incident-create.component.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. <!--
  2. * @Author: seimin
  3. * @Date: 2024-10-24 13:47:40
  4. * @LastEditors: seimin
  5. * @LastEditTime: 2024-10-25 15:47:50
  6. * @Description: 创建
  7. -->
  8. <!-- 新建工单 -->
  9. <div class="newOrder display_flex justify-content_flex-center align-items_center">
  10. <div class="modalBody">
  11. <div class="title" *ngIf="currentTabIndex === '故障报修'">
  12. <div class="newTop">
  13. <div class="name">故障工单编辑</div>
  14. <div class="newTopItem">
  15. <span class="grayFont required">院区:</span>
  16. <nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzPlaceHolder="请选择院区" [(ngModel)]="incidentModel.hosId" (ngModelChange)="changeApplyHospital($event)" nzAllowClear [nzDisabled]="buildType === '编辑事件'">
  17. <ng-container *ngFor="let option of applicationHospitalList">
  18. <nz-option *ngIf="!isLoading" [nzLabel]="option.hosName" [nzValue]="option.id"></nz-option>
  19. </ng-container>
  20. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  21. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  22. </nz-option>
  23. </nz-select>
  24. </div>
  25. <div class="newTopItem">
  26. <span class="grayFont required">申请科室:</span>
  27. <nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeInp('itsm', $event)" nzPlaceHolder="请选择申请科室" [(ngModel)]="incidentModel.department" (ngModelChange)="changeApplyDept($event)" nzAllowClear (nzOpenChange)="openChangeApplyDept($event)">
  28. <ng-container *ngFor="let option of applicationDeptList">
  29. <nz-option *ngIf="!isLoadingApply" [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
  30. </ng-container>
  31. <nz-option *ngIf="isLoadingApply" nzDisabled nzCustomContent>
  32. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  33. </nz-option>
  34. </nz-select>
  35. </div>
  36. <div class="newTopItem">
  37. <span class="grayFont">申请人:</span>
  38. <ng-container *ngIf="buildType === '报修转事件'">{{incidentMsg.requesterName}}</ng-container>
  39. <ng-container *ngIf="buildType !== '报修转事件'">
  40. <nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('requester', $event)" nzPlaceHolder="请选择申请人" [(ngModel)]="incidentModel.requester" (ngModelChange)="changeApplyRequester($event)" nzAllowClear (nzOpenChange)="openChangeApplyRequester($event)">
  41. <ng-container *ngFor="let option of applicationRequesterList">
  42. <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
  43. </ng-container>
  44. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  45. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  46. </nz-option>
  47. </nz-select>
  48. <label nz-checkbox [(ngModel)]="isRelatedDepartment" (ngModelChange)="changeApplyRelatedDepartment($event)" class="ml8">关联查</label>
  49. </ng-container>
  50. </div>
  51. </div>
  52. </div>
  53. <div nz-row class="content">
  54. <div nz-col nzSpan="15" class="col left">
  55. <div class="tabs">
  56. <div class="tabs__inner" #tab>
  57. <div class="tabs__wrap" [style.transform]="'translateX(' + disX + 'px)'">
  58. <ng-container *ngFor="let item of workTypesArrange;let index = index;">
  59. <div [ngClass]="{ tab: true, checked: currentTabIndex == item.key}" (click)="tabClick(item.key)">
  60. {{ item.key }}
  61. </div>
  62. </ng-container>
  63. </div>
  64. </div>
  65. <div class="tabs__operate" *ngIf="workTypesFlag && incidentModel.department">
  66. <i
  67. class="tabs__Icon--right icon_transport transport-xiangzuo"
  68. (click)="toLeft()"
  69. ></i>
  70. <i
  71. class="tabs__Icon--left icon_transport transport-xiangzuo"
  72. (click)="toRight()"
  73. ></i>
  74. </div>
  75. </div>
  76. <!-- 底部tab页 -->
  77. <div class="bottomWrap">
  78. <ng-container *ngFor="let item of workTypesArrange;let index = index;">
  79. <!-- 故障报修 -->
  80. <overlay-scrollbars #osComponentRef15 class="bottom_req" *ngIf="currentTabIndex === '故障报修'">
  81. <div class="req">
  82. <div class="row">
  83. <div class="col flex4">
  84. <span class="name">详细地址:</span>
  85. <nz-select class="w100" [(ngModel)]="incidentModel.area" (ngModelChange)="changeApplyBuilding($event)" nzAllowClear nzPlaceHolder="请选择楼栋">
  86. <nz-option [nzValue]="item.id" [nzLabel]="item.buildingName" *ngFor="let item of applicationBuildingList"></nz-option>
  87. </nz-select>
  88. </div>
  89. <div class="col flex3">
  90. <nz-select class="w100" [(ngModel)]="incidentModel.place" nzAllowClear nzPlaceHolder="请选择楼层">
  91. <nz-option [nzValue]="item.id" [nzLabel]="item.floorName" *ngFor="let item of applicationFloorList"></nz-option>
  92. </nz-select>
  93. </div>
  94. <div class="col flex7">
  95. <input nz-input placeholder="请填写详细地址" [(ngModel)]="incidentModel.houseNumber" />
  96. </div>
  97. </div>
  98. <div class="row gap8">
  99. <div class="col">
  100. <span class="name">科室电话:</span>
  101. <ng-container *ngIf="incidentMsg.deptManyPhone">{{incidentMsg.deptManyPhone|stringToFirstValue}}<em (click)="importPhone(incidentMsg.deptManyPhone, true)">引入</em></ng-container>
  102. </div>
  103. <div class="col">
  104. <span class="name">报修人电话:</span>
  105. <ng-container *ngIf="incidentMsg.requesterPhone">{{incidentMsg.requesterPhone}}<em (click)="importPhone(incidentMsg.requesterPhone)">引入</em></ng-container>
  106. </div>
  107. <div class="col">
  108. </div>
  109. </div>
  110. <div class="row gap8">
  111. <div class="col">
  112. <span class="name">联系人:</span>
  113. <input class="w100" nz-input placeholder="请填写联系人" [(ngModel)]="incidentModel.contacts" />
  114. </div>
  115. <div class="col">
  116. <span class="name required">联系电话:</span>
  117. <input class="w100" nz-input placeholder="请填写联系电话" [(ngModel)]="incidentModel.contactsInformation" />
  118. </div>
  119. <div class="col">
  120. <span class="name">责任部门:</span>
  121. {{incidentModel.duty ? incidentModel.duty.hosName : ''}}
  122. </div>
  123. </div>
  124. <div class="row gap8">
  125. <div class="col">
  126. <span class="name required">故障现象:</span>
  127. <nz-select class="w100" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('category', $event)" nzPlaceHolder="请选择故障现象" [(ngModel)]="incidentModel.category" (ngModelChange)="changeApplyCategory($event)" (nzOpenChange)="openChangeApplyCategory($event)">
  128. <ng-container *ngFor="let option of applicationCategoryList">
  129. <nz-option *ngIf="!isLoading" [nzLabel]="option.mutiCategory" [nzValue]="option.id"></nz-option>
  130. </ng-container>
  131. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  132. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  133. </nz-option>
  134. </nz-select>
  135. </div>
  136. </div>
  137. <div class="row gap8">
  138. <div class="col alignItemsStart">
  139. <span class="name required">故障描述:</span>
  140. <nz-input-group [nzSuffix]="suffixTemplate">
  141. <textarea class="w100" nz-input rows="4" placeholder="请填写故障描述" [(ngModel)]="incidentModel.description"></textarea>
  142. </nz-input-group>
  143. <span #suffixTemplate class="ant-input-clear-icon ml8" *ngIf="incidentModel.description" (click)="incidentModel.description = null">清空</span>
  144. </div>
  145. </div>
  146. <div class="row gap8">
  147. <div class="col">
  148. <span class="name required">优先级:</span>
  149. <nz-select class="w100" [(ngModel)]="incidentModel.priorityId" nzAllowClear nzPlaceHolder="请选择优先级" [nzDisabled]="buildType === '编辑事件'">
  150. <nz-option [nzValue]="item.id" [nzLabel]="item.name" *ngFor="let item of applicationPriorityList"></nz-option>
  151. </nz-select>
  152. </div>
  153. <div class="col">
  154. <span class="name">事件来源:</span>
  155. <nz-select class="w100" [(ngModel)]="incidentModel.source" nzAllowClear nzPlaceHolder="请选择事件来源">
  156. <nz-option [nzValue]="item.id" [nzLabel]="item.name" *ngFor="let item of applicationSourceList"></nz-option>
  157. </nz-select>
  158. </div>
  159. <div class="col">
  160. <span class="name">预约时间:</span>
  161. <nz-date-picker style="width: 150px;" [(ngModel)]="incidentModel.yyTime" nzShowTime></nz-date-picker>
  162. </div>
  163. </div>
  164. <div class="row gap8">
  165. <div class="col">
  166. <span class="name">报修图片:</span>
  167. <div class="value w100 upload">
  168. <ng-container *ngIf="repairImgs.length === 0">
  169. <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">
  170. <i nz-icon nzType="plus"></i>
  171. <div class="ant-upload-text">上传照片</div>
  172. </nz-upload>
  173. <nz-modal [nzVisible]="previewVisible" [nzContent]="modalContent" [nzFooter]="null" (nzOnCancel)="previewVisible = false">
  174. <ng-template #modalContent>
  175. <img [src]="previewImage" [ngStyle]="{ width: '100%' }" />
  176. </ng-template>
  177. </nz-modal>
  178. <div class="tips">(支持JPG/PNG格式图片,单张大小10M以内)</div>
  179. </ng-container>
  180. <div class="thumbList" *ngIf="repairImgs.length > 0">
  181. <div class="thumb" *ngFor="let item of repairImgs;let index = index;" (click)="previewImageHandler(repairImgs, index)"><img [src]="item.thumbFilePath" alt=""></div>
  182. </div>
  183. </div>
  184. </div>
  185. </div>
  186. <div class="row gap8" *ngIf="buildType !== '编辑事件'">
  187. <div class="col">
  188. <span class="name required">处理组:</span>
  189. <nz-select class="w100" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('group', $event)" nzPlaceHolder="请选择处理组" [(ngModel)]="incidentModel.group" (ngModelChange)="changeApplyGroup($event)" (nzOpenChange)="openChangeApplyGroup($event)">
  190. <ng-container *ngFor="let option of applicationGroupList">
  191. <nz-option *ngIf="!isLoading" [nzLabel]="option.groupName" [nzValue]="option.id"></nz-option>
  192. </ng-container>
  193. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  194. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  195. </nz-option>
  196. </nz-select>
  197. </div>
  198. <div class="col">
  199. <span class="name">处理人:</span>
  200. <nz-select class="w100" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('user', $event)" nzPlaceHolder="请选择处理人" [(ngModel)]="incidentModel.user" (nzOpenChange)="openChangeApplyUser($event)" nzAllowClear>
  201. <ng-container *ngFor="let option of applicationUserList">
  202. <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
  203. </ng-container>
  204. <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
  205. <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
  206. </nz-option>
  207. </nz-select>
  208. </div>
  209. <div class="col"></div>
  210. </div>
  211. </div>
  212. </overlay-scrollbars>
  213. </ng-container>
  214. </div>
  215. </div>
  216. <div nz-col nzSpan="9" class="col right">
  217. <div class="rightTitle">
  218. <div class="rightTitle_tab" [class.active]="currentRTab == tab.id" *ngFor="let tab of rightTitle_tab;" (click)="rightTitleHandler(tab.id)">{{ tab.name }}</div>
  219. </div>
  220. <!-- 近期维修 start -->
  221. <div class="cots_body weifenpai top185" *ngIf="currentRTab == 2">
  222. <overlay-scrollbars #osComponentRef16 [ngStyle]="{ height: '100%' }">
  223. <div *ngIf="itsmOrders.length && !loading6">
  224. <div class="list listsTypeColor" *ngFor="let data of itsmOrders">
  225. <div class="left_cots" style="width: 96%;">
  226. <!-- 工单 -->
  227. <div class="gongdan">
  228. <span class="left">{{ data.incidentsign }}</span>
  229. <span class="right">
  230. <span>{{ data.state?.name }}</span>
  231. </span>
  232. </div>
  233. <!-- 描述 -->
  234. <div class="didian">
  235. <span class="left">
  236. {{ data.description }}
  237. </span>
  238. </div>
  239. <!-- 时间 -->
  240. <div class="shijian">
  241. <span class="left"></span>
  242. <span class="right">
  243. {{ data.acceptDate | date: "MM-dd HH:mm" }}
  244. </span>
  245. </div>
  246. </div>
  247. </div>
  248. </div>
  249. <div class="no_data" *ngIf="itsmOrders.length == 0 && !loading6">
  250. 暂无数据
  251. </div>
  252. <div class="no_data" *ngIf="loading6">
  253. <div class="loadingFull display_flex justify-content_flex-center align-items_center">
  254. <div class="loadingFullInner">
  255. <img src="../../../assets/images/loading.gif" alt="" />
  256. <div>加载中...</div>
  257. </div>
  258. </div>
  259. </div>
  260. </overlay-scrollbars>
  261. </div>
  262. <!-- 近期维修 end -->
  263. <!-- 知识库 start -->
  264. <div class="cots_body weifenpai top185" *ngIf="currentRTab == 3">
  265. <overlay-scrollbars #osComponentRef17 [ngStyle]="{ height: '100%' }">
  266. <div *ngIf="knowageList.length && !loading7">
  267. <div class="list listsTypeColor" *ngFor="let data of knowageList" style="height: auto;overflow: hidden;">
  268. <div class="left_cots" style="width: 96%;height: auto;">
  269. <!-- 工单 -->
  270. <div class="gongdan" style="font-size: 16px;">
  271. <span class="left ellipsis-oneline w100" nz-tooltip [nzTooltipTitle]="data.title">{{data.title}}</span>
  272. </div>
  273. <!-- 描述 -->
  274. <div class="didian" style="font-size: 12px;height: auto;">
  275. <span class="left noEllipsis">{{data.content | stripHtml}}</span>
  276. </div>
  277. <!-- 时间 -->
  278. <div class="shijian" style="height: auto;line-height: normal;overflow: hidden;padding-bottom: 16px;">
  279. <span class="right">
  280. <button nz-button nzType="primary" (click)="importKnowage(data)">引用</button>
  281. <button class="ml8" nz-button nzType="primary" (click)="showKnowledgeModal(data)">查看</button>
  282. </span>
  283. </div>
  284. </div>
  285. </div>
  286. </div>
  287. <div class="no_data" *ngIf="knowageList.length == 0 && !loading7">
  288. 暂无数据
  289. </div>
  290. <div class="no_data" *ngIf="loading7">
  291. <div class="loadingFull display_flex justify-content_flex-center align-items_center">
  292. <div class="loadingFullInner">
  293. <img src="../../../assets/images/loading.gif" alt="" />
  294. <div>加载中...</div>
  295. </div>
  296. </div>
  297. </div>
  298. </overlay-scrollbars>
  299. </div>
  300. <!-- 知识库 end -->
  301. </div>
  302. </div>
  303. <div class="btns display_flex justify-content_flex-center align-items_center">
  304. <ng-container *ngIf="currentTabIndex === '故障报修' && buildType !== '编辑事件'">
  305. <label nz-checkbox [(ngModel)]="isBuildOrderAgagin" *ngIf="buildType !== '报修转事件' && buildType !== '留言转事件'">是否连续建单</label>
  306. <button nz-button class="btn" nzType="primary" (click)="directOrder()">
  307. 直接解决
  308. </button>
  309. <button nz-button class="btn" nzType="primary" (click)="assignOrder()">
  310. 建单并派单
  311. </button>
  312. <button nz-button class="btn" nzType="primary" (click)="temporaryStorage()">
  313. 暂存
  314. </button>
  315. </ng-container>
  316. <ng-container *ngIf="currentTabIndex === '故障报修' && buildType === '编辑事件'">
  317. <button nz-button class="btn" nzType="primary" (click)="saveOrder()">
  318. 保存
  319. </button>
  320. </ng-container>
  321. <button class="btn cancel" nz-button nzType="default" (click)="newOrderCancel()">
  322. 取消
  323. </button>
  324. </div>
  325. </div>
  326. </div>
  327. <!-- 遮罩 -->
  328. <app-mask *ngIf="maskFlag"></app-mask>
  329. <!-- 图片预览 -->
  330. <app-image-viewer [imageUrl]="imgs" hidden *ngIf="isPreview" [isPreviewNow]="true" [initialViewIndex]="initialViewIndex"></app-image-viewer>
  331. <!-- 知识库查看 -->
  332. <app-knowledge-look (cancelKnowledgeModal)="cancelKnowledgeModal()" *ngIf="isShowKnowledge" [knowledgeData]="coopData"></app-knowledge-look>