main.component.html 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. <nz-layout class="app-layout display_flex flex_auto ant-layout-has-sider">
  2. <overlay-scrollbars #osComponentRef1 class="menu-sidebar">
  3. <div class="sidebar-logo display_flex align-items_center justify-content_flex-center">
  4. <div class="display_flex align-items_center justify-content_flex-center logoTitle">
  5. <div class="title ellipsis-multiline" nz-tooltip nzTooltipTitle="{{tool.logoTitle}}">{{tool.logoTitle}}</div>
  6. </div>
  7. </div>
  8. <!-- 导航重写,兼容chrome39 -->
  9. <ul id="ds-menu">
  10. <li class="mainMenuOne" (click)="totoMenu('首页')" [ngClass]="{mainMenuSelected:indexFlag}">
  11. <i nz-icon nzType="home"></i>
  12. <span nzTooltipPlacement="right" nz-tooltip nzTooltipTitle="首页">首页</span>
  13. </li>
  14. <li *ngFor="let data of menus" class="mainMenuWrap">
  15. <div class="mainMenuOne" (click)="clickMenuOne(data)" [ngClass]="{mainMenuSelected:data.flagBg}">
  16. <i class="icon_transport" [ngClass]="data.icon" *ngIf="isTransportIcon(data.icon)"></i>
  17. <i nz-icon [nzType]="data.icon" *ngIf="!isTransportIcon(data.icon)"></i>
  18. <span nzTooltipPlacement="right" nz-tooltip nzTooltipTitle="{{data.title}}">{{data.title}}</span>
  19. <span class="icon_transport transport-xialajiantou" [ngStyle]="{transform:data.flag?'rotate(180deg)':'rotate(0deg)',color:data.flag?'#fff':'#999'}"></span>
  20. </div>
  21. <ul>
  22. <li *ngFor="let item of data.childrens" class="mainMenu" (click)="totoMenu(item.title,item,data)" [ngStyle]="{height:data.flag?'44px':0}" [ngClass]="{menuTwoSelected:item.flag}">
  23. <span nzTooltipPlacement="right" nz-tooltip nzTooltipTitle="{{item.title}}">{{item.title}}</span>
  24. </li>
  25. </ul>
  26. </li>
  27. </ul>
  28. </overlay-scrollbars>
  29. <nz-layout style="background:#fff;display: flex;flex-direction: column;position: relative;">
  30. <nz-header>
  31. <div class="app-header display_flex justify-content_space-between align-items_center">
  32. <div class="left">
  33. <!-- <i class="icon_transport transport-tianjiahover green" *ngIf='speediness' (click)="speedinessAdd()" nz-tooltip nzTooltipTitle="新增报修"></i> -->
  34. <div class="dropdown">
  35. <i class="icon_transport transport-tianjiahover green" (mouseenter)="showFastDropdown = true" (mouseleave)="showFastDropdown = false"></i>
  36. <div class="dropdown-content ct" [hidden]="!showFastDropdown" (mouseenter)="showFastDropdown = true" (mouseleave)="showFastDropdown = false">
  37. <div class="dropdownItem" *ngIf="speediness" (click)="speedinessAdd()">新增报修</div>
  38. </div>
  39. </div>
  40. <i class="icon_transport transport-tiaodu-fill green" *ngIf='deskRole' (click)="toFuwutai()" nz-tooltip nzTooltipTitle="调度台"></i>
  41. <i class="icon_transport transport-hushizhihanghuligongzuo green" *ngIf="nurseRole" (click)="toHuShi()" nz-tooltip nzTooltipTitle="护士端"></i>
  42. <i class="icon_transport transport-peizhi1 green" *ngIf="incidentConfigRole || otherConfigRole || pageConfigRole || nurseConfigRole" (click)="toConfigurationCenter()" nz-tooltip nzTooltipTitle="配置中心"></i>
  43. <i class="icon_transport transport-tongji-2 green" *ngIf="newStatisticsRole" (click)="toNewStatistics()" nz-tooltip nzTooltipTitle="统计"></i>
  44. <i class="icon_transport transport-shangban green" *ngIf='PCCommutesToWork && userInfo.user && !userInfo.user.online' (click)="GoWork()" nz-tooltip nzTooltipTitle="我要上班"></i>
  45. <i class="icon_transport transport-shangban green" *ngIf='PCCommutesToWork && userInfo.user && userInfo.user.online' (click)="GoWork()" nz-tooltip nzTooltipTitle="我要下班"></i>
  46. <div class="dropdown" *ngIf="pharmacyRole || largeScreenRole || largeScreenRole2 || specimenViewRole || specimenViewRole2 || specimenRoomView || pathology || disinfectionSupplyRole || sampling || communicationBook || realtimeBroadcastRole || inspectClosedLoopViewRole">
  47. <i class="icon_transport transport-gengduoda-copy" (mouseenter)="showDropdown1 = true" (mouseleave)="showDropdown1 = false"></i>
  48. <div class="dropdown-content ct" [hidden]="!showDropdown1" (mouseenter)="showDropdown1 = true" (mouseleave)="showDropdown1 = false">
  49. <div class="dropdownItem" *ngIf="pharmacyRole" (click)="toPharmacy()">药房端</div>
  50. <div class="dropdownItem" *ngIf="pharmacyRole" (click)="toPharmacy2()">药房端2</div>
  51. <div class="dropdownItem" *ngIf="largeScreenRole" (click)="toBigScreen('largeScreen')">大屏端</div>
  52. <div class="dropdownItem" *ngIf="largeScreenRole2" (click)="toBigScreen('largeScreen2')">大屏端2</div>
  53. <div class="dropdownItem" *ngIf="specimenViewRole" (click)="toBigScreen('specimenView')">业务视图</div>
  54. <div class="dropdownItem" *ngIf="specimenViewRole2" (click)="toSpecimenView2()">标本视图</div>
  55. <div class="dropdownItem" *ngIf="specimenRoomView" (click)="toSpecimenRoomView()">标本间端</div>
  56. <div class="dropdownItem" *ngIf="pathology" (click)="toPathology()">病理科端</div>
  57. <div class="dropdownItem" *ngIf="sampling" (click)="toSampling()">门诊病理采样端</div>
  58. <div class="dropdownItem" *ngIf="communicationBook" (click)="toCommunicationBook()">病理交接本</div>
  59. <div class="dropdownItem" *ngIf="disinfectionSupplyRole" (click)="toDisinfectionSupply()">全局业务查看</div>
  60. <div class="dropdownItem" *ngIf="realtimeBroadcastRole" (click)="toRealtimeBroadcast()">故障实时播报</div>
  61. <div class="dropdownItem" *ngIf="inspectClosedLoopViewRole" (click)="toInspectClosedLoopView()">陪检闭环视图</div>
  62. <div class="dropdownItem" *ngIf="webRepairs" (click)="toWebRepairs()">web报修</div>
  63. </div>
  64. </div>
  65. </div>
  66. <div class="right">
  67. <div class="userInfo dropdown">
  68. <div class="user" (mouseenter)="showDropdown = true" (mouseleave)="showDropdown = false">
  69. <img src="../../assets/images/icon_keshi.png" alt="">
  70. <span><ng-container *ngIf="currentHospital.hosName">{{currentHospital.hosName}}-</ng-container>{{(userInfo&&userInfo.user)?userInfo.user.name:''}}</span>
  71. <i class="icon_transport transport-xiala1 ml8"></i>
  72. </div>
  73. <div class="dropdown-content r8" [hidden]="!showDropdown" (mouseenter)="showDropdown = true" (mouseleave)="showDropdown = false">
  74. <div class="dropdownItem" (click)="selectHospital()">选择院区</div>
  75. <div class="dropdownItem" (click)="showUpPwd()">修改密码</div>
  76. <div class="dropdownItem" (click)="logOut()">退出</div>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </nz-header>
  82. <nz-content style="position: relative;">
  83. <div class="inner-content">
  84. <router-outlet></router-outlet>
  85. </div>
  86. </nz-content>
  87. </nz-layout>
  88. </nz-layout>
  89. <!-- 上下班模态框 -->
  90. <app-dialog-delete [delModal]="workModal" (hideDelModalEvent)="hideWorkModal()" [btnLoading]="loading3"
  91. (confirmDelEvent)="confirmWork()" [content]="types"></app-dialog-delete>
  92. <!-- 消息弹框模板 -->
  93. <ng-template #msgTemplate1 let-msg="data">
  94. <div class="msgTemBox ant-notification-notice-content">
  95. <div class="borderLeft"></div>
  96. <div class="ant-notification-notice-with-icon">
  97. <span class="ant-notification-notice-icon">
  98. <i class="icon icon_transport transport-shouye9"></i>
  99. </span>
  100. <div class="ant-notification-notice-message">{{msg.type==1?'通知':'消息'}}</div>
  101. <div class="ant-notification-notice-description">{{msg.content}}</div>
  102. </div>
  103. </div>
  104. </ng-template>
  105. <!-- 修改密码 -->
  106. <nz-modal [(nzVisible)]="isPwdVisible" nzTitle="修改密码" (nzOnCancel)="pwdHandleCancel()" (nzOnOk)="pwdHandleOk()" [nzOkLoading]="pwdIsOkLoading" (nzAfterOpen)="pwdAfterOpen()">
  107. <div>
  108. <label>
  109. 原始密码:
  110. <nz-input-group [nzSuffix]="suffixTemplate">
  111. <input minlength="9" [type]="passwordVisible ? 'text' : 'password'" nz-input placeholder="原始密码" [(ngModel)]="upModalData.pwdOld" />
  112. </nz-input-group>
  113. <ng-template #suffixTemplate>
  114. <i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'" (click)="passwordVisible = !passwordVisible"></i>
  115. </ng-template>
  116. </label>
  117. <label>新密码:
  118. <div style="display: flex;">
  119. <nz-input-group [nzSuffix]="suffixTemplate">
  120. <input minlength="9" [type]="passwordVisible ? 'text' : 'password'" nz-input placeholder="新密码" [(ngModel)]="upModalData.newPwd" (ngModelChange)="blurNewPwd()" />
  121. </nz-input-group>
  122. <ng-template #suffixTemplate>
  123. <i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'" (click)="passwordVisible = !passwordVisible"></i>
  124. </ng-template>
  125. <div class="red" style="display: flex;justify-content: center;align-items: center;padding-left: 5px;" *ngIf="enoughRegFlag">弱</div>
  126. <div style="display: flex;justify-content: center;align-items: center;padding-left: 5px;" *ngIf="mediumRegFlag">中</div>
  127. <div class="green" style="display: flex;justify-content: center;align-items: center;padding-left: 5px;" *ngIf="strongRegFlag">强</div>
  128. </div>
  129. </label>
  130. <div class="red">强密码需包含大小写字母、数字、特殊字符,长度至少9个字符</div>
  131. <label>确认新密码:
  132. <nz-input-group [nzSuffix]="suffixTemplate">
  133. <input minlength="9" [type]="passwordVisible ? 'text' : 'password'" nz-input placeholder="确认新密码" [(ngModel)]="upModalData.newPwd2" />
  134. </nz-input-group>
  135. <ng-template #suffixTemplate>
  136. <i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'" (click)="passwordVisible = !passwordVisible"></i>
  137. </ng-template>
  138. </label>
  139. </div>
  140. </nz-modal>
  141. <!-- 大屏或视图选择院区模态框 -->
  142. <app-select-hospital (hosFlagHand)="hosFlagHand($event)" (submitFormHand)="submitFormHand($event)" [hosFlag]="hosFlag"></app-select-hospital>
  143. <!-- 切换院区 -->
  144. <app-select-hospital (hosFlagHand)="hosFlagHand1($event)" (submitFormHand)="submitFormHand1($event)" [hosFlag]="hosFlag1"></app-select-hospital>
  145. <!-- 模态框 -->
  146. <div class="save display_flex justify-content_flex-center align-items_center" *ngIf="delModal">
  147. <div class="modalBody">
  148. <div class="title">提示<i class="icon_transport transport-guanbi" (click)="hideDelModal()"></i></div>
  149. <div class="content">
  150. <div class="icon"><i class="icon_transport transport-wenhao"></i></div>
  151. <div class="defeat">{{tipsMsg1}}</div>
  152. </div>
  153. <div class="display_flex justify-content_flex-center">
  154. <button nz-button nzType="primary" (click)="confirmDel()">确认</button>
  155. <button class="btn cancel " nz-button nzType="default" (click)="hideDelModal()">关闭</button>
  156. </div>
  157. </div>
  158. </div>
  159. <!-- 菜单选择 -->
  160. <app-select-menu (cancelMenuModal)="cancelMenuModal($event)" [iShowMenuModal]="iShowMenuModal"></app-select-menu>
  161. <!-- 遮罩 -->
  162. <app-mask *ngIf="maskFlag"></app-mask>
  163. <!-- 直接解决 -->
  164. <app-incident-direct-order *ngIf="directOrderModalShow" (closeModelHs)="closeDirectOrderModelOrder($event)" (confirmModelHs)="confirmDirectOrderModelOrder($event)"></app-incident-direct-order>
  165. <!-- 新建工单 -->
  166. <div class="newOrder display_flex justify-content_flex-center align-items_center" *ngIf="newOrderShowOpen">
  167. <div class="modalBody">
  168. <div class="title" *ngIf="currentTabIndex === '故障报修'">
  169. <div class="newTop">
  170. <div class="name">来电咨询</div>
  171. <div class="newTopItem" *ngIf="hospitalModel!=1">
  172. <span class="grayFont required">院区:</span>
  173. <nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzPlaceHolder="请选择院区" [(ngModel)]="incidentModel.hosId" (ngModelChange)="changeApplyHospital($event)" nzAllowClear [nzDisabled]="buildType === '编辑事件'">
  174. <ng-container *ngFor="let option of applicationHospitalList">
  175. <nz-option *ngIf="!isLoading" [nzLabel]="option.hosName" [nzValue]="option.id"></nz-option>
  176. </ng-container>
  177. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  178. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  179. </nz-option>
  180. </nz-select>
  181. </div>
  182. <div class="newTopItem" [hidden]="incidentModel.repairIncidentType === 'public'">
  183. <span class="grayFont required">申请科室:</span>
  184. <nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeInp('itsm', $event)" nzPlaceHolder="请选择申请科室" [(ngModel)]="incidentModel.department" (ngModelChange)="changeApplyDept($event)" nzAllowClear (nzOpenChange)="openChangeApplyDept($event)">
  185. <ng-container *ngFor="let option of applicationDeptList">
  186. <nz-option *ngIf="!isLoadingApply" [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
  187. </ng-container>
  188. <nz-option *ngIf="isLoadingApply" nzDisabled nzCustomContent>
  189. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  190. </nz-option>
  191. </nz-select>
  192. </div>
  193. <div class="newTopItem">
  194. <span class="grayFont" [ngClass]="{'required': publicRepair && applicantMustFillIn==1}">申请人:</span>
  195. <ng-container *ngIf="buildType === '报修转事件'">{{incidentMsg.requesterName}}</ng-container>
  196. <ng-container *ngIf="buildType !== '报修转事件'">
  197. <nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('requester', $event)" nzPlaceHolder="请选择申请人" [(ngModel)]="incidentModel.requester" (ngModelChange)="changeApplyRequester($event)" nzAllowClear (nzOpenChange)="openChangeApplyRequester($event)">
  198. <ng-container *ngFor="let option of applicationRequesterList">
  199. <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
  200. </ng-container>
  201. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  202. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  203. </nz-option>
  204. </nz-select>
  205. <label [hidden]="incidentModel.repairIncidentType === 'public'" nz-checkbox [(ngModel)]="isRelatedDepartment" (ngModelChange)="changeApplyRelatedDepartment($event)" class="ml8">关联查</label>
  206. </ng-container>
  207. </div>
  208. <div class="newTopItem" *ngIf="incidentModel.incomingPhone">
  209. <span class="grayFont">来电电话:{{incidentModel.incomingPhone}}</span>
  210. </div>
  211. <div class="newTopItem" *ngIf="deptRepair && publicRepair">
  212. <span class="grayFont">
  213. <nz-radio-group [nzDisabled]="buildType === '编辑事件'" [(ngModel)]="incidentModel.repairIncidentType" (ngModelChange)="changeRepairIncidentType($event)">
  214. <label nz-radio [nzValue]="item.value" *ngFor="let item of repairIncidentTypeList">{{item.name}}</label>
  215. </nz-radio-group>
  216. </span>
  217. </div>
  218. </div>
  219. </div>
  220. <div nz-row class="content">
  221. <div nz-col nzSpan="15" class="col left">
  222. <!-- <div class="tabs">
  223. <div class="tabs__inner" #tab>
  224. <div class="tabs__wrap" [style.transform]="'translateX(' + disX + 'px)'">
  225. <ng-container *ngFor="let item of workTypesArrange;let index = index;">
  226. <div [ngClass]="{ tab: true, checked: currentTabIndex == item.key}" (click)="tabClick(item.key)" *ngIf="buildType !== '编辑事件' || (buildType === '编辑事件' && item.key == '故障报修')">
  227. {{ item.key }}
  228. </div>
  229. </ng-container>
  230. </div>
  231. </div>
  232. <div class="tabs__operate" *ngIf="workTypesFlag && applyDept">
  233. <i class="tabs__Icon--right icon_transport transport-xiangzuo" (click)="toLeft()"></i>
  234. <i class="tabs__Icon--left icon_transport transport-xiangzuo" (click)="toRight()"></i>
  235. </div>
  236. </div> -->
  237. <!-- 底部tab页 -->
  238. <div class="bottomWrap">
  239. <ng-container *ngFor="let item of workTypesArrange;let index = index;">
  240. <!-- 故障报修 -->
  241. <overlay-scrollbars #osComponentRef15 class="bottom_req" *ngIf="currentTabIndex === '故障报修'">
  242. <div class="req">
  243. <div class="row">
  244. <div class="col flex4">
  245. <span class="name">详细地址:</span>
  246. <nz-select class="w100" [(ngModel)]="incidentModel.area" (ngModelChange)="changeApplyBuilding($event)" nzAllowClear nzPlaceHolder="请选择楼栋">
  247. <nz-option [nzValue]="item.id" [nzLabel]="item.buildingName" *ngFor="let item of applicationBuildingList"></nz-option>
  248. </nz-select>
  249. </div>
  250. <div class="col flex3">
  251. <nz-select class="w100" [(ngModel)]="incidentModel.place" nzAllowClear nzPlaceHolder="请选择楼层">
  252. <nz-option [nzValue]="item.id" [nzLabel]="item.floorName" *ngFor="let item of applicationFloorList"></nz-option>
  253. </nz-select>
  254. </div>
  255. <div class="col flex7">
  256. <input class="addressFocus" nz-input placeholder="请填写详细地址" [(ngModel)]="incidentModel.houseNumber" (focus)="focusAddress()" />
  257. <div class="addressList" *ngIf="isShowAddressList">
  258. <ng-container *ngIf="!addressLoading && addressList.length">
  259. <div class="addressItem ellipsis-oneline" *ngFor="let item of addressList" [title]="item.name" (click)="selectAddress(item.name)">{{item.name}}</div>
  260. </ng-container>
  261. <div *ngIf="!addressLoading && !addressList.length" class="w100 h100 padding8 display_flex justify-content_flex-center align-items_center">
  262. <nz-empty></nz-empty>
  263. </div>
  264. <div *ngIf="addressLoading" class="w100 h100 padding8 display_flex justify-content_flex-center align-items_center">
  265. <nz-spin nzSimple></nz-spin>
  266. </div>
  267. </div>
  268. </div>
  269. </div>
  270. <div class="row">
  271. <div class="col">
  272. <span class="name">科室电话:</span>
  273. <ng-container *ngIf="incidentMsg.deptManyPhone">{{incidentMsg.deptManyPhone|stringToFirstValue}}<em (click)="importPhone(incidentMsg.deptManyPhone, true)">引入</em></ng-container>
  274. </div>
  275. <div class="col">
  276. <span class="name">报修人电话:</span>
  277. <ng-container *ngIf="incidentMsg.requesterPhone">{{incidentMsg.requesterPhone}}<em (click)="importPhone(incidentMsg.requesterPhone)">引入</em></ng-container>
  278. </div>
  279. <div class="col">
  280. <ng-container *ngIf="buildType !== '编辑事件'">
  281. <span class="name">来电电话:</span>
  282. <ng-container *ngIf="incidentModel.incomingPhone">{{incidentModel.incomingPhone}}<em (click)="importPhone(incidentModel.incomingPhone)">引入</em></ng-container>
  283. </ng-container>
  284. </div>
  285. </div>
  286. <div class="row">
  287. <div class="col">
  288. <span class="name">联系人:</span>
  289. <input class="w100" nz-input placeholder="请填写联系人" [(ngModel)]="incidentModel.contacts" />
  290. </div>
  291. <div class="col">
  292. <span class="name required">联系电话:</span>
  293. <input class="w100" nz-input placeholder="请填写联系电话" [(ngModel)]="incidentModel.contactsInformation" />
  294. </div>
  295. <div class="col">
  296. <span class="name">责任部门:</span>
  297. {{incidentModel.duty ? incidentModel.duty.hosName : ''}}
  298. </div>
  299. </div>
  300. <div class="row">
  301. <div class="col">
  302. <span class="name required">故障现象:</span>
  303. <nz-select class="w100" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('category', $event)" nzPlaceHolder="请选择故障现象" [(ngModel)]="incidentModel.category" (ngModelChange)="changeApplyCategory($event)" (nzOpenChange)="openChangeApplyCategory($event)">
  304. <ng-container *ngFor="let option of applicationCategoryList">
  305. <nz-option *ngIf="!isLoading" [nzLabel]="option.mutiCategory" [nzValue]="option.id"></nz-option>
  306. </ng-container>
  307. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  308. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  309. </nz-option>
  310. </nz-select>
  311. </div>
  312. </div>
  313. <div class="row">
  314. <div class="col alignItemsStart">
  315. <span class="name required">故障描述:</span>
  316. <nz-input-group [nzSuffix]="suffixTemplate">
  317. <textarea class="w100" nz-input rows="4" placeholder="请填写故障描述" [(ngModel)]="incidentModel.description"></textarea>
  318. </nz-input-group>
  319. <span #suffixTemplate class="ant-input-clear-icon ml8" *ngIf="incidentModel.description" (click)="incidentModel.description = null">清空</span>
  320. </div>
  321. </div>
  322. <div class="row">
  323. <div class="col">
  324. <span class="name required">优先级:</span>
  325. <nz-select class="w100" [(ngModel)]="incidentModel.priorityId" nzAllowClear nzPlaceHolder="请选择优先级" [nzDisabled]="buildType === '编辑事件'">
  326. <nz-option [nzValue]="item.id" [nzLabel]="item.name" *ngFor="let item of applicationPriorityList"></nz-option>
  327. </nz-select>
  328. </div>
  329. <div class="col">
  330. <span class="name required">报修来源:</span>
  331. <nz-select class="w100" [(ngModel)]="incidentModel.source" nzAllowClear nzPlaceHolder="请选择报修来源">
  332. <nz-option [nzValue]="item.id" [nzLabel]="item.name" *ngFor="let item of applicationSourceList"></nz-option>
  333. </nz-select>
  334. </div>
  335. <div class="col">
  336. <span class="name">预约时间:</span>
  337. <nz-date-picker style="width: 150px;" [(ngModel)]="incidentModel.yyTime" nzShowTime></nz-date-picker>
  338. </div>
  339. </div>
  340. <div class="row">
  341. <div class="col">
  342. <span class="name">报修图片:</span>
  343. <div class="value w100 upload">
  344. <ng-container *ngIf="repairImgs.length === 0">
  345. <nz-upload nzListType="picture-card" [(nzFileList)]="fileList" [nzShowUploadList]="showUploadList" [nzPreview]="handlePreview" nzFileType="image/jpeg,image/png" nzAccept="image/jpeg,image/png" [nzShowButton]="fileList.length < 3" [nzBeforeUpload]="beforeUpload" [nzAction]="temporarilyUrl" [nzSize]="10240">
  346. <i nz-icon nzType="plus"></i>
  347. <div class="ant-upload-text">上传照片</div>
  348. </nz-upload>
  349. <nz-modal [nzVisible]="previewVisible" [nzContent]="modalContent" [nzFooter]="null" (nzOnCancel)="previewVisible = false">
  350. <ng-template #modalContent>
  351. <img [src]="previewImage" [ngStyle]="{ width: '100%' }" />
  352. </ng-template>
  353. </nz-modal>
  354. <div class="tips">(支持JPG/PNG格式图片,单张大小10M以内)</div>
  355. </ng-container>
  356. <div class="thumbList" *ngIf="repairImgs.length > 0">
  357. <div class="thumb" *ngFor="let item of repairImgs;let index = index;" (click)="previewImageHandler(repairImgs, index)"><img [src]="item.thumbFilePath" alt=""></div>
  358. </div>
  359. </div>
  360. </div>
  361. </div>
  362. <div class="row" *ngIf="buildType !== '编辑事件'">
  363. <div class="col">
  364. <span class="name required">处理组:</span>
  365. <nz-select class="w100" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('group', $event)" nzPlaceHolder="请选择处理组" [(ngModel)]="incidentModel.group" (ngModelChange)="changeApplyGroup($event)" (nzOpenChange)="openChangeApplyGroup($event)">
  366. <ng-container *ngFor="let option of applicationGroupList">
  367. <nz-option *ngIf="!isLoading" [nzLabel]="option.groupName" [nzValue]="option.id"></nz-option>
  368. </ng-container>
  369. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  370. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  371. </nz-option>
  372. </nz-select>
  373. </div>
  374. <div class="col">
  375. <span class="name">处理人:</span>
  376. <nz-select class="w100" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('user', $event)" nzPlaceHolder="请选择处理人" [(ngModel)]="incidentModel.user" (nzOpenChange)="openChangeApplyUser($event)" nzAllowClear>
  377. <ng-container *ngFor="let option of applicationUserList">
  378. <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
  379. </ng-container>
  380. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  381. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  382. </nz-option>
  383. </nz-select>
  384. </div>
  385. <div class="col"></div>
  386. </div>
  387. </div>
  388. </overlay-scrollbars>
  389. </ng-container>
  390. <!-- loading -->
  391. <div class="bottom" *ngIf="newLoading">
  392. <div class="bottom255">
  393. <div class="txtC">
  394. <img src="../../../assets/images/loading.gif" alt="" />
  395. <div>加载中...</div>
  396. </div>
  397. </div>
  398. </div>
  399. </div>
  400. <!-- 底部信息提示 -->
  401. <!-- <div class="bottomInfo" *ngIf="currentTabIndex !== '故障报修'">提示:临床科室建单会更简便哟!</div> -->
  402. </div>
  403. <div nz-col nzSpan="9" class="col right">
  404. <div class="rightTitle">
  405. <div class="rightTitle_tab" [class.active]="currentRTab == tab.id" *ngFor="let tab of rightTitle_tab;" (click)="rightTitleHandler(tab.id)">{{ tab.name }}</div>
  406. <span class="toLastTime1"><span class="time" *ngIf="applyDept">{{ orderRefreshTime }}s</span></span>
  407. </div>
  408. <!-- 近期配送 start -->
  409. <div class="cots_body weifenpai" *ngIf="currentRTab == 0" [ngClass]="{ top185: hurseInfoHiding != 1 }">
  410. <overlay-scrollbars #osComponentRef12 [ngStyle]="{ height: '100%' }">
  411. <div *ngIf="noArrives.length && !loading4">
  412. <div class="list listsTypeColor" *ngFor="let data of noArrives">
  413. <div class="left_cots" (click)="openDetails(data)">
  414. <!-- 工单 -->
  415. <div class="gongdan">
  416. <span class="left">{{ data.taskType.taskName }}({{ data.gdcode }})</span>
  417. <span class="right">
  418. <span>{{ data.gdState.name }}</span>
  419. </span>
  420. </div>
  421. <!-- 地点 -->
  422. <div class="didian">
  423. <span class="left" *ngIf="data.taskType.associationType.value == 'inspect'">
  424. {{ data.startDept ? data.startDept.dept : "" }}
  425. <span *ngFor="let item of data.middleDept">
  426. ->{{ item.dept }}
  427. </span>
  428. </span>
  429. <span class="left" *ngIf="data.taskType.associationType.id != 260">
  430. {{ data.startDept ? data.startDept.dept : "" }}{{ data.endDepts ? "->" + data.endDepts[0].dept : "" }}
  431. </span>
  432. <span class="right" *ngIf="data.goods">
  433. <i class="icon_transport transport-icon3"></i>
  434. <span>{{ data.goods }}</span>
  435. </span>
  436. <span class="right" *ngIf="data.workOrderRemark" [title]="data.workOrderRemark">
  437. <i class="icon_transport transport-icon3"></i>
  438. <span>{{ data.workOrderRemark }}</span>
  439. </span>
  440. </div>
  441. <!-- 时间 -->
  442. <div class="shijian">
  443. <span class="left" *ngIf="data.expectTimeNum && data.timeOut != true">
  444. <i class="icon_transport transport-shouye10" nz-tooltip nzTooltipTitle="进行中"></i>
  445. <ng-container *ngIf="(data.taskType.associationType.value == 'patientTransport' || data.taskType.associationType.value == 'inspect') && data.patient?.illnessState">
  446. <i *ngIf="data.patient.illnessState.value === '2'" class="colorRed icon_transport transport-tubiao_wei" nz-tooltip nzTooltipTitle="病危"></i>
  447. <i *ngIf="data.patient.illnessState.value === '3'" class="colorRed icon_transport transport-zhong" nz-tooltip nzTooltipTitle="病重"></i>
  448. </ng-container>
  449. <ng-container *ngIf="(data.taskType.associationType.value == 'patientTransport' || data.taskType.associationType.value == 'inspect') && data.patient?.careLevel">
  450. <i *ngIf="data.patient.careLevel.value === '0'" class="icon_transport transport-te1" nz-tooltip nzTooltipTitle="特级护理"></i>
  451. <i *ngIf="data.patient.careLevel.value === '1'" class="icon_transport transport-1_round_solid" nz-tooltip nzTooltipTitle="一级护理"></i>
  452. <i *ngIf="data.patient.careLevel.value === '2'" class="icon_transport transport-2_round_solid" nz-tooltip nzTooltipTitle="二级护理"></i>
  453. <i *ngIf="data.patient.careLevel.value === '3'" class="icon_transport transport-3_round_solid" nz-tooltip nzTooltipTitle="三级护理"></i>
  454. </ng-container>
  455. <span nz-tooltip nzTooltipTitle="患者姓名(住院号)" *ngIf="data.taskType.associationType.value == 'patientTransport' || data.taskType.associationType.value == 'inspect'">{{ data.patient.patientName }}<span *ngIf="data.patient.residenceNo">({{ data.patient.residenceNo }})</span></span>
  456. </span>
  457. <span class="left" *ngIf="data.timeOutLength && data.timeOut == true">
  458. <i class="colorRed icon_transport transport-daojishi" nz-tooltip nzTooltipTitle="超时"></i>
  459. <ng-container *ngIf="(data.taskType.associationType.value == 'patientTransport' || data.taskType.associationType.value == 'inspect') && data.patient?.illnessState">
  460. <i *ngIf="data.patient.illnessState.value === '2'" class="colorRed icon_transport transport-tubiao_wei" nz-tooltip nzTooltipTitle="病危"></i>
  461. <i *ngIf="data.patient.illnessState.value === '3'" class="colorRed icon_transport transport-zhong" nz-tooltip nzTooltipTitle="病重"></i>
  462. </ng-container>
  463. <ng-container *ngIf="(data.taskType.associationType.value == 'patientTransport' || data.taskType.associationType.value == 'inspect') && data.patient?.careLevel">
  464. <i *ngIf="data.patient.careLevel.value === '0'" class="icon_transport transport-te1" nz-tooltip nzTooltipTitle="特级护理"></i>
  465. <i *ngIf="data.patient.careLevel.value === '1'" class="icon_transport transport-1_round_solid" nz-tooltip nzTooltipTitle="一级护理"></i>
  466. <i *ngIf="data.patient.careLevel.value === '2'" class="icon_transport transport-2_round_solid" nz-tooltip nzTooltipTitle="二级护理"></i>
  467. <i *ngIf="data.patient.careLevel.value === '3'" class="icon_transport transport-3_round_solid" nz-tooltip nzTooltipTitle="三级护理"></i>
  468. </ng-container>
  469. <span nz-tooltip nzTooltipTitle="患者姓名(住院号)" *ngIf="data.taskType.associationType.value == 'patientTransport' || data.taskType.associationType.value == 'inspect'">{{ data.patient.patientName }}<span *ngIf="data.patient.residenceNo">({{ data.patient.residenceNo }})</span></span>
  470. </span>
  471. <span class="right" nz-tooltip [nzTooltipTitle]="'总时长' + formatTime(data.expectTimeNum / 1000)">
  472. {{ data.showCreateTime }}
  473. </span>
  474. </div>
  475. <!-- 急单 -->
  476. <img *ngIf="data.emergencyType && data.emergencyType.id == 300" src="../../assets/images/icon_ji.png" alt="" class="ji" />
  477. <!-- 加急单 -->
  478. <img *ngIf="data.emergencyType && data.emergencyType.id == 301" src="../../assets/images/icon_jiaji.png" alt="" class="ji" />
  479. </div>
  480. <div class="right_bots display_flex col-flex align-items_center justify-content_flex-center">
  481. <input type="button" *ngIf="data.gdState.value == 2" class="top_bot" value="派单" (click)="allotWorker(data.id, data.gdState.id)" />
  482. <input type="button" *ngIf="data.gdState.value == 3 || data.gdState.value == 4" class="mid_bot" value="撤回" (click)="openRecallModal(data.id)" />
  483. <input type="button" *ngIf="data.gdState.value == 2 || data.gdState.value == 3 || data.gdState.value == 4" class="btm_bot" value="删除" (click)="openDelModal(data.id, 'hsms')" />
  484. </div>
  485. <div *ngIf="data.timeOut != true" class="slider sgreen" [ngStyle]="{ width: data.percent + '%' }"></div>
  486. <div *ngIf="data.timeOut == true" class="slider sred" [ngStyle]="{ width: '100%' }"></div>
  487. </div>
  488. </div>
  489. <div class="no_data" *ngIf="noArrives.length == 0 && !loading4">
  490. 暂无数据
  491. </div>
  492. <div class="no_data" *ngIf="loading4">
  493. <div class="loadingFull display_flex justify-content_flex-center align-items_center">
  494. <div class="loadingFullInner">
  495. <img src="../../../assets/images/loading.gif" alt="" />
  496. <div>加载中...</div>
  497. </div>
  498. </div>
  499. </div>
  500. </overlay-scrollbars>
  501. </div>
  502. <!-- 近期维修 start -->
  503. <div class="cots_body weifenpai" *ngIf="currentRTab == 2" [ngClass]="{ top185: hurseInfoHiding != 1 }">
  504. <overlay-scrollbars #osComponentRef16 [ngStyle]="{ height: '100%' }">
  505. <div *ngIf="itsmOrders.length && !loading6">
  506. <div class="list listsTypeColor" *ngFor="let data of itsmOrders">
  507. <div class="left_cots" style="width: 96%;">
  508. <!-- 工单 -->
  509. <div class="gongdan">
  510. <span class="left">{{ data.incidentsign }}</span>
  511. <span class="right">
  512. <span>{{ data.state?.name }}</span>
  513. </span>
  514. </div>
  515. <!-- 描述 -->
  516. <div class="didian">
  517. <span class="left">
  518. {{ data.description }}
  519. </span>
  520. </div>
  521. <!-- 时间 -->
  522. <div class="shijian">
  523. <span class="left"></span>
  524. <span class="right">
  525. {{ data.acceptDate | date: "MM-dd HH:mm" }}
  526. </span>
  527. </div>
  528. </div>
  529. </div>
  530. </div>
  531. <div class="no_data" *ngIf="itsmOrders.length == 0 && !loading6">
  532. 暂无数据
  533. </div>
  534. <div class="no_data" *ngIf="loading6">
  535. <div class="loadingFull display_flex justify-content_flex-center align-items_center">
  536. <div class="loadingFullInner">
  537. <img src="../../../assets/images/loading.gif" alt="" />
  538. <div>加载中...</div>
  539. </div>
  540. </div>
  541. </div>
  542. </overlay-scrollbars>
  543. </div>
  544. <!-- 近期维修 end -->
  545. <!-- 知识库 start -->
  546. <div class="cots_body weifenpai" *ngIf="currentRTab == 3" [ngClass]="{ top185: hurseInfoHiding != 1 }">
  547. <overlay-scrollbars #osComponentRef17 [ngStyle]="{ height: '100%' }">
  548. <div *ngIf="knowageList.length && !loading7">
  549. <div class="list listsTypeColor" *ngFor="let data of knowageList" style="height: auto;overflow: hidden;">
  550. <div class="left_cots" style="width: 96%;height: auto;">
  551. <!-- 工单 -->
  552. <div class="gongdan" style="font-size: 16px;">
  553. <span class="left ellipsis-oneline w100" nz-tooltip [nzTooltipTitle]="data.title">{{data.title}}</span>
  554. </div>
  555. <!-- 描述 -->
  556. <div class="didian" style="font-size: 12px;height: auto;">
  557. <span class="left noEllipsis">{{data.content | stripHtml}}</span>
  558. </div>
  559. <!-- 时间 -->
  560. <div class="shijian" style="height: auto;line-height: normal;overflow: hidden;padding-bottom: 16px;">
  561. <span class="right">
  562. <button nz-button nzType="primary" (click)="importKnowage(data)">引用</button>
  563. <button class="ml8" nz-button nzType="primary" (click)="showKnowledgeModal(data)">查看</button>
  564. </span>
  565. </div>
  566. </div>
  567. </div>
  568. </div>
  569. <div class="no_data" *ngIf="knowageList.length == 0 && !loading7">
  570. 暂无数据
  571. </div>
  572. <div class="no_data" *ngIf="loading7">
  573. <div class="loadingFull display_flex justify-content_flex-center align-items_center">
  574. <div class="loadingFullInner">
  575. <img src="../../../assets/images/loading.gif" alt="" />
  576. <div>加载中...</div>
  577. </div>
  578. </div>
  579. </div>
  580. </overlay-scrollbars>
  581. </div>
  582. <!-- 知识库 end -->
  583. </div>
  584. </div>
  585. <div class="btns display_flex justify-content_flex-center align-items_center">
  586. <!-- <ng-container *ngIf="applyDept && currentTabIndex !== '故障报修'">
  587. <button nz-button class="btn" nzType="primary" (click)="newOrderOk('&go&')" [nzLoading]="isGoLoading" *ngIf="(radioValueQt || radioValueZy) && currentTasktype && currentTasktype.associationType && ((currentTasktype.associationType.value === 'inspect' && linkCheckLisTrue && !(currentTasktype.isMoreDept === 0 && isInspects)) || currentTasktype.associationType.value !== 'inspect')">
  588. 继续建单
  589. </button>
  590. <button nz-button class="btn" nzType="primary" (click)="newOrderOk()" [nzLoading]="isOkLoading" *ngIf="(radioValueQt || radioValueZy) && currentTasktype && currentTasktype.associationType && ((currentTasktype.associationType.value === 'inspect' && linkCheckLisTrue && !(currentTasktype.isMoreDept === 0 && isInspects)) || currentTasktype.associationType.value !== 'inspect')">
  591. {{isYyInspect ? '预约建单' :'直接建单'}}
  592. </button>
  593. </ng-container> -->
  594. <ng-container *ngIf="currentTabIndex === '故障报修' && buildType !== '编辑事件'">
  595. <label nz-checkbox [(ngModel)]="isBuildOrderAgagin" *ngIf="buildType !== '报修转事件' && buildType !== '留言转事件' && buildType !== '继续建单'">是否连续建单</label>
  596. <button nz-button class="btn" nzType="primary" (click)="directOrder()">
  597. 直接解决
  598. </button>
  599. <button nz-button class="btn" nzType="primary" (click)="assignOrder()">
  600. 建单并派单
  601. </button>
  602. <button nz-button class="btn" nzType="primary" (click)="temporaryStorage()">
  603. 暂存
  604. </button>
  605. </ng-container>
  606. <ng-container *ngIf="currentTabIndex === '故障报修' && buildType === '编辑事件'">
  607. <button nz-button class="btn" nzType="primary" (click)="saveOrder()">
  608. 保存
  609. </button>
  610. </ng-container>
  611. <button class="btn cancel" nz-button nzType="default" (click)="newOrderCancel()">
  612. 取消
  613. </button>
  614. </div>
  615. </div>
  616. </div>
  617. <!-- 操作成功/失败提示框 -->
  618. <app-prompt-modal
  619. *ngIf="promptModalShow"
  620. [content]="promptContent"
  621. [success]="ifSuccess"
  622. [show]="promptModalShow"
  623. [info]="promptInfo"
  624. [back]="back"
  625. (closeModel)="closeModel($event)"
  626. >