浏览代码

试管类型开发

maotao 1 周之前
父节点
当前提交
bda3288955
共有 41 个文件被更改,包括 10759 次插入3396 次删除
  1. 8 0
      src/app/app-routing.module.ts
  2. 22 0
      src/app/guard/WebRepairs.guard.ts
  3. 6 0
      src/app/services/tool.service.ts
  4. 4 2
      src/app/share/businessData-detail-modal/businessData-detail-modal.component.html
  5. 3 0
      src/app/share/businessData-detail-modal/businessData-detail-modal.component.less
  6. 2 1
      src/app/share/businessData-detail-modal/businessData-detail-modal.component.ts
  7. 1 0
      src/app/share/detail-sample/detail-sample.component.html
  8. 2 0
      src/app/share/detail-sample/detail-sample.component.ts
  9. 1 0
      src/app/share/order-detail/order-detail.component.html
  10. 3 0
      src/app/share/order-detail/order-detail.component.ts
  11. 17 0
      src/app/views/common-document/common-document-routing.module.ts
  12. 213 0
      src/app/views/common-document/common-document.component.html
  13. 276 0
      src/app/views/common-document/common-document.component.less
  14. 1036 0
      src/app/views/common-document/common-document.component.ts
  15. 19 0
      src/app/views/common-document/common-document.module.ts
  16. 3 3
      src/app/views/fuwutai/fuwutai.component.html
  17. 52 3
      src/app/views/fuwutai/fuwutai.component.ts
  18. 10 0
      src/app/views/main/main-routing.module.ts
  19. 23 8
      src/app/views/main/main.component.html
  20. 776 0
      src/app/views/main/main.component.less
  21. 3399 3330
      src/app/views/main/main.component.ts
  22. 3 1
      src/app/views/main/main.module.ts
  23. 17 0
      src/app/views/personage-document/personage-document-routing.module.ts
  24. 279 0
      src/app/views/personage-document/personage-document.component.html
  25. 233 0
      src/app/views/personage-document/personage-document.component.less
  26. 895 0
      src/app/views/personage-document/personage-document.component.ts
  27. 19 0
      src/app/views/personage-document/personage-document.module.ts
  28. 6 6
      src/app/views/specimen-search/specimen-search.component.ts
  29. 1 1
      src/app/views/users-management/users-management.component.html
  30. 25 0
      src/app/views/web-repairs/web-repairs-routing.module.ts
  31. 422 0
      src/app/views/web-repairs/web-repairs.component.html
  32. 1843 0
      src/app/views/web-repairs/web-repairs.component.less
  33. 979 0
      src/app/views/web-repairs/web-repairs.component.ts
  34. 18 0
      src/app/views/web-repairs/web-repairs.module.ts
  35. 95 26
      src/assets/iconfont/demo_index.html
  36. 19 7
      src/assets/iconfont/iconfont.css
  37. 1 1
      src/assets/iconfont/iconfont.js
  38. 28 7
      src/assets/iconfont/iconfont.json
  39. 二进制
      src/assets/iconfont/iconfont.ttf
  40. 二进制
      src/assets/iconfont/iconfont.woff
  41. 二进制
      src/assets/iconfont/iconfont.woff2

+ 8 - 0
src/app/app-routing.module.ts

@@ -32,6 +32,8 @@ import { SystemConfigGuard } from './guard/SystemConfig.guard';
32 32
 // 故障实时播报权限
33 33
 import { RealtimeBroadcastGuard } from './guard/realtimeBroadcast.guard';
34 34
 import { InspectClosedLoopViewGuard } from './guard/inspectClosedLoopView.guard';
35
+// web报修权限
36
+import { WebRepairsGuard } from './guard/WebRepairs.guard';
35 37
 const routes: Routes = [
36 38
   // 默认
37 39
   {
@@ -211,6 +213,12 @@ const routes: Routes = [
211 213
     path: 'batchSpecimen',
212 214
     loadChildren: () => import('./views/batch-specimen/batch-specimen.module').then(m => m.BatchSpecimenModule),
213 215
   },
216
+	// web报修
217
+	{
218
+	  path: 'webRepairs',
219
+	  loadChildren: () => import('./views/web-repairs/web-repairs.module').then(m => m.WebRepairsModule),
220
+		canActivate: [WebRepairsGuard]
221
+	},
214 222
   // 临时路由
215 223
   {
216 224
     path: "redirect",

+ 22 - 0
src/app/guard/WebRepairs.guard.ts

@@ -0,0 +1,22 @@
1
+import { Injectable } from '@angular/core';
2
+import { CanActivate, Router } from '@angular/router';
3
+
4
+@Injectable({
5
+  providedIn: 'root'
6
+})
7
+export class WebRepairsGuard implements CanActivate {
8
+  constructor(public router: Router) { }
9
+
10
+  canActivate(): boolean {
11
+    const menus = JSON.parse(localStorage.getItem('menu'));
12
+    let can = false;
13
+    if (menus) {
14
+      can = menus.some(e => e.link == 'webRepairs');
15
+    }
16
+    if (!can) {
17
+      this.router.navigate(['login']);
18
+      return false
19
+    }
20
+    return true;
21
+  }
22
+}

+ 6 - 0
src/app/services/tool.service.ts

@@ -318,6 +318,12 @@ export class ToolService {
318 318
 				case "viewGd":
319 319
 				  coopBtns.viewGd = true; //查看工单
320 320
 				  break;
321
+				case "updata":
322
+				  coopBtns.updata = true; //更新
323
+				  break;
324
+				case "download":
325
+				  coopBtns.download = true; //下载
326
+				  break;
321 327
       }
322 328
     });
323 329
     console.log(coopBtns);

+ 4 - 2
src/app/share/businessData-detail-modal/businessData-detail-modal.component.html

@@ -136,7 +136,7 @@
136 136
         </div>
137 137
       </div>
138 138
       <nz-table *ngIf="type === 'specimen'" class="hospitalTable" [nzData]="specimenList" nzSize="middle" [nzShowPagination]="false"
139
-        [nzLoading]="hsLoading" [nzScroll]="{ y: '350px' }">
139
+        [nzLoading]="hsLoading">
140 140
         <thead>
141 141
           <tr class="thead">
142 142
             <th nzWidth="4%">序号</th>
@@ -156,7 +156,9 @@
156 156
         </thead>
157 157
         <tbody>
158 158
           <tr *ngFor="let data of specimenList;let i = index;">
159
-            <td><span class="sign" *ngIf="orderId != data.gdid"></span>{{ (pageIndex - 1) * pageSize + i + 1 }}</td>
159
+            <td>
160
+							<span class="sign" *ngIf="orderId != data.gdIdSend && orderId != data.gdid"></span>
161
+						{{ (pageIndex - 1) * pageSize + i + 1 }}</td>
160 162
             <td>{{ data.sickRoom ? data.sickRoom.dept : "-" }}</td>
161 163
             <td>{{ data.patientName}}<span *ngIf="data.bedNum">({{data.bedNum}})</span><br>{{data.residenceNo}}</td>
162 164
             <td class="underline" (click)="viewSpecimenHistory(data)">{{ data.scode || "-" }}</td>

+ 3 - 0
src/app/share/businessData-detail-modal/businessData-detail-modal.component.less

@@ -31,6 +31,8 @@
31 31
   }
32 32
   .hospitalTable {
33 33
     width: 100%;
34
+		height: calc(100vh - 360px);
35
+		overflow-y: auto;
34 36
     td {
35 37
       text-align: center !important;
36 38
       position: relative;
@@ -136,6 +138,7 @@
136 138
       flex-direction: column;
137 139
       justify-content: center;
138 140
       align-items: center;
141
+			
139 142
       &.content-search {
140 143
         min-height: 147px;
141 144
         justify-content: start;

+ 2 - 1
src/app/share/businessData-detail-modal/businessData-detail-modal.component.ts

@@ -28,7 +28,7 @@ export class BusinessDataDetailModalComponent implements OnInit {
28 28
   @Input() orderId: String;
29 29
   @Input() type: String = '';
30 30
   @Input() dataInfo: any;
31
-
31
+	@Input() taskTypeValue: String;
32 32
   @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
33 33
 
34 34
   constructor(
@@ -75,6 +75,7 @@ export class BusinessDataDetailModalComponent implements OnInit {
75 75
         break;
76 76
 
77 77
     }
78
+		console.log(10010,this.taskTypeValue)
78 79
   }
79 80
 	
80 81
 	// 查看标本历史记录

+ 1 - 0
src/app/share/detail-sample/detail-sample.component.html

@@ -116,6 +116,7 @@
116 116
   [show]="businessDataModalShow"
117 117
   [type]="businessDataModalType"
118 118
   [orderId]="orderId"
119
+	[taskTypeValue]="taskTypeValue"
119 120
   (closeModelHs)="closeModelBlood($event)"
120 121
 ></app-businessData-detail-modal>
121 122
 

+ 2 - 0
src/app/share/detail-sample/detail-sample.component.ts

@@ -244,8 +244,10 @@ export class DetailSampleComponent implements OnInit {
244 244
   businessDataModalShow = false; //业务数据弹窗开关
245 245
   businessDataModalType = ''; //业务数据类型
246 246
   orderId = ""; //查看业务数据携带
247
+	taskTypeValue:any;
247 248
   viewDetail(data, type) {
248 249
     this.orderId = data.id;
250
+		this.taskTypeValue = data.taskType.associationType.value;
249 251
     this.businessDataModalType = type;
250 252
     this.businessDataModalShow = true;
251 253
   }

+ 1 - 0
src/app/share/order-detail/order-detail.component.html

@@ -1298,6 +1298,7 @@
1298 1298
   [show]="businessDataModalShow"
1299 1299
   [type]="businessDataModalType"
1300 1300
   [orderId]="orderId"
1301
+	[taskTypeValue]="taskTypeValue"
1301 1302
   (closeModelHs)="closeModelBlood($event)"
1302 1303
 ></app-businessData-detail-modal>
1303 1304
 

+ 3 - 0
src/app/share/order-detail/order-detail.component.ts

@@ -165,8 +165,11 @@ export class OrderDetailComponent implements OnInit {
165 165
   businessDataModalShow = false; //业务数据弹窗开关
166 166
   businessDataModalType = ''; //业务数据类型
167 167
   orderId = ""; //查看业务数据携带
168
+	taskTypeValue:any;
168 169
   viewDetail(data, type) {
170
+		console.log(4444,data)
169 171
     this.orderId = data.id;
172
+		this.taskTypeValue = data.taskType.associationType.value;
170 173
     this.businessDataModalType = type;
171 174
     this.businessDataModalShow = true;
172 175
   }

+ 17 - 0
src/app/views/common-document/common-document-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from '@angular/core';
2
+import { Routes, RouterModule } from '@angular/router';
3
+import { CommonDocumentComponent } from './common-document.component';
4
+
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: '',
9
+    component: CommonDocumentComponent,
10
+  }
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule]
16
+})
17
+export class CommonDocumentRoutingModule { }

+ 213 - 0
src/app/views/common-document/common-document.component.html

@@ -0,0 +1,213 @@
1
+<div class="list-template">
2
+  <div class="content list-template__content">
3
+		<div class="list-left">
4
+			<div class="tree-top-add">
5
+				<button class="btn default" (click)='addTree(1)'>新增一级目录</button>
6
+			</div>
7
+			<div class="tree-opt">
8
+				<div class="item" (click)='addTree(2)'>新增</div>
9
+				<div class="item" (click)="treeDel()">删除</div>
10
+				<div class="item" (click)='editTree(3)'>修改</div>
11
+			</div>
12
+			<div class="tree-content">
13
+				<nz-tree [nzData]="nodes" 
14
+				(nzClick)="nodeClick($event)"
15
+				(nzDblClick)="openFolder($event)"
16
+				[nzExpandedIcon]="mutiExpandedIconTpl"
17
+				[nzTreeTemplate]="nzTreeTemplate"
18
+				[nzTreeTemplate]="nzTreeTemplate"
19
+				>
20
+<!-- 					<ng-template #mutiExpandedIconTpl let-node>
21
+						<i
22
+							*ngIf="!node.origin.isLeaf"
23
+							nz-icon
24
+							[nzType]="node.isExpanded ? 'folder-open' : 'folder'"
25
+							class="ant-tree-switcher-line-icon"
26
+						></i>
27
+						<i *ngIf="node.origin.isLeaf" nz-icon nzType="file" class="ant-tree-switcher-line-icon"></i>
28
+					</ng-template>
29
+					<ng-template #nzTreeTemplate let-node>
30
+						<div>{{node.folderName}}</div>
31
+					</ng-template> -->
32
+					<ng-template #nzTreeTemplate let-node>
33
+						<span class="custom-node" [class.active]="treeItem?.id === node.origin.id">
34
+							<span *ngIf="node.origin.children">
35
+								<i nz-icon [nzType]="node.origin.isExpanded ? 'folder-open' : 'folder'" (click)="openFolder(node)"></i>
36
+								<span class="folder-name">{{ node.origin.folderName }}</span>
37
+							</span>
38
+							<span *ngIf="!node.origin.children">
39
+								<i nz-icon nzType="file"></i>
40
+								<span class="file-name">{{ node.folderName }}</span>
41
+							</span>
42
+						</span>
43
+					</ng-template>
44
+				</nz-tree>
45
+			</div>
46
+		</div>
47
+		<div class="list-right">
48
+			<div class="list-template__top">
49
+			  <div class="list-template__searchBox">
50
+					<div class="list-template__searchItem">
51
+					  <span class="label">文档名称:</span>
52
+					  <input nz-input class="formItem" [(ngModel)]="batchNumber" placeholder="请输入文档名称" nzSize="default" />
53
+					</div>
54
+			    <div class="list-template__searchItem">
55
+			      <span class="label">文档格式:</span>
56
+			      <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" (nzOnSearch)="changeInp($event)" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择文档格式" [(ngModel)]="department">
57
+			        <ng-container *ngFor="let option of hospitals1">
58
+			          <nz-option *ngIf="!isDeptLoading" [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
59
+			        </ng-container>
60
+			        <nz-option *ngIf="isDeptLoading" nzDisabled nzCustomContent>
61
+			          <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
62
+			        </nz-option>
63
+			      </nz-select>
64
+			    </div>
65
+
66
+			  </div>
67
+			  <div class="list-template__btns">
68
+			    <button class="btn default" (click)='search()'>搜索</button>
69
+			    <button class="btn default ml8" (click)='reset()'>重置</button>
70
+			  </div>
71
+			</div>
72
+			<div class="list-template__bottom">
73
+			  <nz-table class="list-template__nzTable" [nzData]="listOfData" nzSize="middle" [nzShowPagination]="false"
74
+			    [nzLoading]="loading1">
75
+			    <thead>
76
+			      <tr class="thead">
77
+			        <th nzWidth="10%">序号</th>
78
+			        <th>文档名称</th>
79
+			        <th>文档格式</th>
80
+			        <th>大小</th>
81
+			        <th>上传者</th>
82
+			        <th>更新时间</th>
83
+			        <th nzWidth="25%">操作</th>
84
+			      </tr>
85
+			    </thead>
86
+			    <tbody v-if="listOfData && listOfData.length>0">
87
+			      <tr *ngFor="let data of listOfData let index = index;" (click)="selectedListData(data.id)">
88
+							<td>{{ index+(pageIndex-1) * pageSize + 1 }}</td>
89
+			        <td>{{ data.applyDeptDTO?data.applyDeptDTO.dept :'-' }}</td>
90
+			        <td>{{ data.totalCount||'0' }}</td>
91
+			        <td>{{ data.expendPrice ||'0' }}</td>
92
+			        <td>{{ data.actualPrice || '0'}}</td>
93
+			        <td>{{ data.pharmacyDTO?data.pharmacyDTO.dept:'-'}}</td>
94
+			        <td>
95
+			          <div class="coop">
96
+									<span *ngIf="coopBtns.del" (click)="detail($event,data.id)">删除</span>
97
+									<span *ngIf="coopBtns.download" (click)="excelExport($event,data.id)">下载</span>
98
+			            <span *ngIf="coopBtns.updata" (click)="detail($event,data.id)">更新</span>
99
+									<span *ngIf="coopBtns.look" (click)="detail($event,data.id)">查看历史</span>
100
+								</div>
101
+			        </td>
102
+			      </tr>
103
+			    </tbody>
104
+			  </nz-table>
105
+			  <div class="list-template__pagination">
106
+			    <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="listLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
107
+			      (nzPageIndexChange)="getList()" (nzPageSizeChange)="getList()">
108
+			    </nz-pagination>
109
+			  </div>
110
+			</div>
111
+		</div>
112
+
113
+  </div>
114
+
115
+  <!-- 新增/编辑模态框 -->
116
+  <div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="modal">
117
+    <div class="modalBody">
118
+      <div class="title">科室发药单-查看<i class="icon_transport transport-guanbi" (click)="hideModal()"></i>
119
+      </div>
120
+      <overlay-scrollbars #osComponentRef1 class="content">
121
+        <div class="list-template__bottom">
122
+          <nz-table class="list-template__nzTable" [nzData]="viewData" nzSize="middle" [nzShowPagination]="false"
123
+            [nzLoading]="loading1">
124
+            <thead>
125
+              <tr class="thead">
126
+								<th nzWidth="10%">药品标识</th>
127
+                <th nzWidth="10%">药品名称</th>
128
+                <th nzWidth="10%">规格</th>
129
+                <th nzWidth="10%">消耗数量</th>
130
+                <th nzWidth="10%">实发数量</th>
131
+                <th nzWidth="10%">包装规格</th>
132
+                <th nzWidth="10%">发药药箱</th>
133
+                <th nzWidth="10%">原库存数</th>
134
+                <th nzWidth="10%">计算后库存</th>
135
+        				<th nzWidth="10%">增减</th>
136
+              </tr>
137
+            </thead>
138
+            <tbody>
139
+              <tr *ngFor="let data of viewData">
140
+								<td>{{ data.drugsInfoDTO?data.drugsInfoDTO.drugCode:'无' }}</td>
141
+                <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.drugName:'无' }}</td>
142
+                <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.specs:'无' }}</td>
143
+                <td>{{ data.expendCount||'0' }}</td>
144
+                <td>{{ data.actualCount||'0' }}</td>
145
+                <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.packingSpecs:'0' }}</td>
146
+                <td>{{ data.cartonNum || '0' }}</td>
147
+                <td>{{ data.formerInventory || '0' }}</td>
148
+                <td>{{ data.afterInventory || '0'}}</td>
149
+        				<td>{{ data.addSub || '0' }}</td>
150
+              </tr>
151
+            </tbody>
152
+          </nz-table>
153
+        </div>
154
+      </overlay-scrollbars>
155
+      <div class="display_flex justify-content_flex-center">
156
+        <button class="btn" nz-button nzType="primary" (click)="hideModal()">知道了</button>
157
+      </div>
158
+    </div>
159
+  </div>
160
+  <!-- 删除模态框 -->
161
+  <app-dialog-delete [delModal]="delModal" (hideDelModalEvent)="hideDelModal()" [btnLoading]="btnLoading"
162
+    (confirmDelEvent)="confirmDel()" content="您确认要删除科室吗?"></app-dialog-delete>
163
+
164
+  <!-- 启用停用模态框 -->
165
+  <app-dialog-delete [delModal]="delModal1" (hideDelModalEvent)="hideDelModal1()" [btnLoading]="btnLoading"
166
+    (confirmDelEvent)="confirmDel1()" [content]="'您确认要建立配送工单吗?'"></app-dialog-delete>
167
+
168
+</div>
169
+<!-- 操作成功/失败提示框 -->
170
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
171
+  [info]="promptInfo"></app-prompt-modal>
172
+
173
+<!-- 查看详情 -->
174
+<router-outlet></router-outlet>
175
+<!-- 遮罩 -->
176
+<app-mask *ngIf="maskFlag"></app-mask>
177
+<app-excel-import [isShow]="isShow" (hideFormHand)="hideExcelImport($event)" *ngIf="isShow" (submitFormHand)="submitExcelImport($event)"></app-excel-import>
178
+
179
+<!-- 删除树结构模态框 -->
180
+  <app-dialog-delete [delModal]="delTreeModal" (hideDelModalEvent)="hideTreeModal()" [btnLoading]="btnLoading"
181
+    (confirmDelEvent)="confirmTree()" content="您确认要删除目录吗?"></app-dialog-delete>
182
+		
183
+<!-- 新增一级目录 -->
184
+<div class="save display_flex justify-content_flex-center align-items_center add" *ngIf="addModal">
185
+	<div class="modalAddBody">
186
+		<div class="title">{{add?'新增':'编辑'}}<i class="icon_transport transport-guanbi" (click)="hideAddModal()"></i>
187
+		</div>
188
+		<div class="content">
189
+			<form nz-form [formGroup]="validateTreeForm" class="addForm" (ngSubmit)="submitForm()">
190
+				<nz-form-item *ngIf="treeType==2">
191
+					<nz-form-label [nzSpan]="7" nzRequired nzFor="parent">父级目录名称</nz-form-label>
192
+					<nz-form-control [nzSpan]="17" nzErrorTip="请输入父级目录名称!">
193
+						<nz-input-group>
194
+							<input nz-input disabled formControlName="parent" placeholder="请输入父级目录名称" />
195
+						</nz-input-group>
196
+					</nz-form-control>
197
+				</nz-form-item>
198
+				<nz-form-item>
199
+					<nz-form-label [nzSpan]="7" nzRequired nzFor="folderName">目录名称</nz-form-label>
200
+					<nz-form-control [nzSpan]="17" nzErrorTip="请输入目录名称!">
201
+						<nz-input-group>
202
+							<input nz-input formControlName="folderName" placeholder="请输入目录名称" />
203
+						</nz-input-group>
204
+					</nz-form-control>
205
+				</nz-form-item>
206
+			</form>
207
+		</div>
208
+		<div class=" display_flex justify-content_flex-center">
209
+			<button nzType="primary" [nzLoading]="btnLoading" nz-button (click)="submitAddForm()">确认</button>
210
+			<button class="btn cancel" nz-button nzType="default" (click)="hideAddModal()">取消</button>
211
+		</div>
212
+	</div>
213
+</div>

+ 276 - 0
src/app/views/common-document/common-document.component.less

@@ -0,0 +1,276 @@
1
+@import "../../../../src/theme.less";
2
+:host {
3
+  .add-button {
4
+    margin: 0 auto 16px !important;
5
+  }
6
+  .targetDept {
7
+    overflow: hidden;
8
+    // width: 90px;
9
+    text-overflow: ellipsis;
10
+    white-space: nowrap;
11
+  }
12
+  .dynamic {
13
+    margin-bottom: 16px;
14
+    display: flex;
15
+    align-items: center;
16
+    input {
17
+      width: 90%;
18
+    }
19
+    i {
20
+      margin-left: 8px;
21
+      cursor: pointer;
22
+      font-size: 18px;
23
+    }
24
+  }
25
+}
26
+
27
+.list-template{
28
+	background: #eee;
29
+	.content{
30
+		display: flex;
31
+		.list-left{
32
+			width: 20%;
33
+			margin-right: 15px;
34
+			height: 100vh;
35
+			overflow-y: auto;
36
+			background: #fff;
37
+			.tree-top-add{
38
+				margin: 6px;
39
+			}
40
+			.tree-opt{
41
+				display: flex;
42
+				flex: 1;
43
+				.item{
44
+					width: 34%;
45
+					text-align: center;
46
+					height: 38px;
47
+					line-height: 38px;
48
+					color: #333;
49
+					background: #F0F6ED;
50
+					border: 1px solid #e5e9ed;
51
+					cursor: pointer;
52
+				}
53
+			}
54
+			.tree-content{
55
+				padding: 0 10px;
56
+				.ant-tree-node-content-wrapper{
57
+					width: 100%;
58
+				}
59
+			}
60
+		}
61
+		
62
+		.list-right{
63
+			width: 80%;
64
+			background: #fff;
65
+			padding: 10px;
66
+		}
67
+	}
68
+}
69
+
70
+.save {
71
+  position: fixed;
72
+  left: 0;
73
+  top: 0;
74
+  width: 100%;
75
+  height: 100%;
76
+  background: rgba(0, 0, 0, 0.4);
77
+  z-index: 99;
78
+
79
+  .modalAddBody {
80
+    width: 480px;
81
+    background: #fff;
82
+    border-radius: 5px;
83
+    padding: 10px 20px;
84
+    color: #333;
85
+
86
+    .title {
87
+      width: 100%;
88
+      text-align: center;
89
+      font-size: 18px;
90
+      position: relative;
91
+
92
+      i {
93
+        position: absolute;
94
+        right: 0;
95
+        top: 0;
96
+        font-size: 20px;
97
+        color: #666;
98
+        cursor: pointer;
99
+        padding: 0 5px;
100
+      }
101
+    }
102
+
103
+    .content {
104
+      width: 100%;
105
+      background: #f9fafb;
106
+      border: 1px solid #e5e9ed;
107
+      border-radius: 5px;
108
+      overflow: hidden;
109
+      margin-top: 12px;
110
+			padding: 16px;
111
+			
112
+      div {
113
+        text-align: center;
114
+        margin: 0;
115
+
116
+        &.icon {
117
+          margin-top: 17px;
118
+
119
+          i {
120
+            color: #34b349;
121
+            font-size: 30px !important;
122
+
123
+            &.transport-wenhao {
124
+              color: #f5a523;
125
+            }
126
+
127
+            &.transport-shibai {
128
+              color: #ff3a52;
129
+            }
130
+          }
131
+        }
132
+
133
+        &.defeat {
134
+          color: #333;
135
+          font-size: 18px;
136
+        }
137
+
138
+        &:nth-child(3) {
139
+          font-size: 14px;
140
+          color: #666;
141
+        }
142
+      }
143
+    }
144
+
145
+    button {
146
+      margin-top: 10px;
147
+
148
+      &.btn {
149
+        margin-left: 8px;
150
+      }
151
+    }
152
+  }
153
+
154
+  // 新增
155
+  &.add {
156
+    .modalBody {
157
+      width: 80%;
158
+      height: auto;
159
+
160
+      .content {
161
+        width: 100%;
162
+        height: auto;
163
+        padding: 19px 14px 0 14px;
164
+        max-height: 500px;
165
+        overflow-y: auto;
166
+				
167
+				.list-template__bottom {
168
+				  background: #f9fafb;
169
+				  border: 1px solid #e5e9ed;
170
+				  border-radius: 8px;
171
+				  padding-bottom: 56px;
172
+				  position: relative;
173
+				  .list-template__nzTable {
174
+				    padding: 16px 16px 0;
175
+				
176
+				    .thead {
177
+				      background-image: linear-gradient(to right, @bg-start, @bg-end);
178
+				
179
+				      th {
180
+				        background: transparent;
181
+				        color: #fff;
182
+				        text-align: center;
183
+				      }
184
+				    }
185
+				
186
+				    .ant-table-body {
187
+				      border-bottom: 1px solid #e5e9ed;
188
+				    }
189
+				
190
+				    .ant-table-tbody {
191
+				      tr {
192
+				        text-align: center;
193
+				        color: #333;
194
+				
195
+				        td {
196
+				          border: none;
197
+				
198
+				          &.tab_hover:hover{
199
+				            text-decoration: underline;
200
+				            cursor: pointer;
201
+				          }
202
+				
203
+				          .coop {
204
+				            button{
205
+				              color: #333;
206
+				            }
207
+				            span,button {
208
+				              display: inline-block;
209
+				              padding: 0 8px;
210
+				              cursor: pointer;
211
+				              position: relative;
212
+				
213
+				              &::after {
214
+				                content: "|";
215
+				                position: absolute;
216
+				                top: 0;
217
+				                right: 0;
218
+				              }
219
+				
220
+				              &:hover,
221
+				              &:active {
222
+				                color: @primary-color;
223
+				              }
224
+				
225
+				              &:nth-last-child(1) {
226
+				                &::after {
227
+				                  content: "";
228
+				                }
229
+				              }
230
+				            }
231
+				          }
232
+				        }
233
+				      }
234
+				    }
235
+				  }
236
+				  .list-template__pagination {
237
+				    height: 56px;
238
+				    display: flex;
239
+				    align-items: center;
240
+				    position: absolute;
241
+				    right: 8px;
242
+				  }
243
+				}
244
+				
245
+        .addForm {
246
+          .ant-form-item {
247
+            margin-bottom: 14px;
248
+
249
+            .ant-form-item-label {
250
+              line-height: 14px;
251
+              text-align: left;
252
+            }
253
+          }
254
+        }
255
+
256
+        .editForm {
257
+          .ant-form-item {
258
+            margin-bottom: 14px;
259
+
260
+            .ant-form-item-label {
261
+              line-height: 0;
262
+              text-align: left;
263
+            }
264
+          }
265
+        }
266
+      }
267
+
268
+      button {
269
+        &:nth-child(1) {
270
+          margin-right: 20px;
271
+        }
272
+      }
273
+    }
274
+  }
275
+}
276
+

文件差异内容过多而无法显示
+ 1036 - 0
src/app/views/common-document/common-document.component.ts


+ 19 - 0
src/app/views/common-document/common-document.module.ts

@@ -0,0 +1,19 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { CommonDocumentRoutingModule } from './common-document-routing.module';
5
+import { CommonDocumentComponent } from './common-document.component';
6
+import { ShareModule } from 'src/app/share/share.module';
7
+
8
+
9
+@NgModule({
10
+  declarations: [
11
+    CommonDocumentComponent,
12
+  ],
13
+  imports: [
14
+    CommonModule,
15
+    CommonDocumentRoutingModule,
16
+    ShareModule
17
+  ]
18
+})
19
+export class CommonDocumentModule { }

+ 3 - 3
src/app/views/fuwutai/fuwutai.component.html

@@ -1015,7 +1015,7 @@
1015 1015
       <div class="title" *ngIf="currentTabIndex === '故障报修'">
1016 1016
         <div class="newTop">
1017 1017
           <div class="name">来电咨询</div>
1018
-          <div class="newTopItem">
1018
+          <div class="newTopItem" *ngIf="hospitalModel!=1">
1019 1019
             <span class="grayFont required">院区:</span>
1020 1020
             <nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzPlaceHolder="请选择院区" [(ngModel)]="incidentModel.hosId" (ngModelChange)="changeApplyHospital($event)" nzAllowClear [nzDisabled]="buildType === '编辑事件'">
1021 1021
               <ng-container *ngFor="let option of applicationHospitalList">
@@ -1038,7 +1038,7 @@
1038 1038
             </nz-select>
1039 1039
           </div>
1040 1040
           <div class="newTopItem">
1041
-            <span class="grayFont" [ngClass]="{'required': incidentModel.repairIncidentType === 'public'}">申请人:</span>
1041
+            <span class="grayFont" [ngClass]="{'required': publicRepair && applicantMustFillIn==1}">申请人:</span>
1042 1042
             <ng-container *ngIf="buildType === '报修转事件'">{{incidentMsg.requesterName}}</ng-container>
1043 1043
             <ng-container *ngIf="buildType !== '报修转事件'">
1044 1044
               <nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('requester', $event)" nzPlaceHolder="请选择申请人" [(ngModel)]="incidentModel.requester" (ngModelChange)="changeApplyRequester($event)" nzAllowClear (nzOpenChange)="openChangeApplyRequester($event)">
@@ -1055,7 +1055,7 @@
1055 1055
           <div class="newTopItem" *ngIf="incidentModel.incomingPhone">
1056 1056
             <span class="grayFont">来电电话:{{incidentModel.incomingPhone}}</span>
1057 1057
           </div>
1058
-          <div class="newTopItem">
1058
+          <div class="newTopItem" *ngIf="deptRepair && publicRepair">
1059 1059
             <span class="grayFont">
1060 1060
               <nz-radio-group [nzDisabled]="buildType === '编辑事件'" [(ngModel)]="incidentModel.repairIncidentType" (ngModelChange)="changeRepairIncidentType($event)">
1061 1061
                 <label nz-radio [nzValue]="item.value" *ngFor="let item of repairIncidentTypeList">{{item.name}}</label>

+ 52 - 3
src/app/views/fuwutai/fuwutai.component.ts

@@ -2625,6 +2625,54 @@ export class FuwutaiComponent implements OnInit {
2625 2625
       this.isRelatedDepartment = true;
2626 2626
     }
2627 2627
   }
2628
+	
2629
+	// 获取系统配置
2630
+	initConfig:any;
2631
+	config:any;
2632
+	hospitalModel:any; //院区模式 1:单院区 -1:多院区
2633
+	applicantMustFillIn:any; //申请人是否必填 1是,0否
2634
+	deptRepair:any; //科内报修
2635
+	publicRepair:any; //公共报修
2636
+	getSysConfig() {
2637
+		const postData = { idx: 0, sum: 99 };
2638
+		this.mainService
2639
+			.getFetchDataList("simple/data", "systemConfiguration", postData)
2640
+			.subscribe((result) => {
2641
+				if (result.status == 200) {
2642
+					if (result.list && Array.isArray(result.list)) {
2643
+						this.initConfig = JSON.parse(JSON.stringify(result.list));
2644
+						this.config = result.list.map((item) => {
2645
+							return [item.keyconfig, item.valueconfig, item.id, item.label];
2646
+						});
2647
+						this.config.forEach((c) => {
2648
+							switch (c[0]) {
2649
+								case "deptRepair":
2650
+									if(c[1]=='1'){
2651
+										this.deptRepair = true
2652
+									}else{
2653
+										this.deptRepair = false
2654
+									}
2655
+									break;
2656
+								case "publicRepair":
2657
+									if(c[1]=='1'){
2658
+										this.publicRepair = true
2659
+									}else{
2660
+										this.publicRepair = false
2661
+									}
2662
+									break;
2663
+								case "hospitalModel":
2664
+									this.hospitalModel = c[1]
2665
+									break;	
2666
+								case "applicantMustFillIn":
2667
+									this.applicantMustFillIn = c[1]
2668
+									break;	
2669
+							}
2670
+						});
2671
+					}
2672
+				}
2673
+			});
2674
+	 }
2675
+	 
2628 2676
   // 打开新建工单
2629 2677
   deathTasktypeId; //获取这个写死的任务类型的id,送病人回病房
2630 2678
   deathTasktypeIdPatient; //获取这个写死的任务类型的id,转出院记录
@@ -2643,6 +2691,7 @@ export class FuwutaiComponent implements OnInit {
2643 2691
       }else{
2644 2692
         this.resetOrderData2();
2645 2693
       }
2694
+			this.getSysConfig();
2646 2695
       this.searchApplicationHospital();
2647 2696
       this.searchApplicationCategory();
2648 2697
       this.searchApplicationPriority();
@@ -3827,7 +3876,7 @@ export class FuwutaiComponent implements OnInit {
3827 3876
   maskFlag:any = false;
3828 3877
   // 运维-直接解决
3829 3878
   directOrder(){
3830
-    if(this.incidentModel.repairIncidentType === 'public' && !this.incidentModel.requester){
3879
+    if(this.publicRepair && this.applicantMustFillIn==1 && !this.incidentModel.requester){
3831 3880
       this.msg.warning('请选择申请人!');
3832 3881
       return;
3833 3882
     }
@@ -3882,7 +3931,7 @@ export class FuwutaiComponent implements OnInit {
3882 3931
   }
3883 3932
   // 运维-建单并派单
3884 3933
   assignOrder(){
3885
-    if(this.incidentModel.repairIncidentType === 'public' && !this.incidentModel.requester){
3934
+    if(this.publicRepair && this.applicantMustFillIn==1 && !this.incidentModel.requester){
3886 3935
       this.msg.warning('请选择申请人!');
3887 3936
       return;
3888 3937
     }
@@ -4075,7 +4124,7 @@ export class FuwutaiComponent implements OnInit {
4075 4124
 
4076 4125
   // 运维-保存
4077 4126
   saveOrder(){
4078
-    if(this.incidentModel.repairIncidentType === 'public' && !this.incidentModel.requester){
4127
+    if(this.publicRepair && this.applicantMustFillIn==1 && !this.incidentModel.requester){
4079 4128
       this.msg.warning('请选择申请人!');
4080 4129
       return;
4081 4130
     }

+ 10 - 0
src/app/views/main/main-routing.module.ts

@@ -637,6 +637,16 @@ const routes: Routes = [
637 637
 			{
638 638
 			  path: "operationSearch",
639 639
 			  loadChildren: () => import("../operation-search/operation-search.module").then((m) => m.OperationSearchModule),
640
+			},
641
+			// 文档管理-公共文档
642
+			{
643
+			  path: "commonDocument",
644
+			  loadChildren: () => import("../common-document/common-document.module").then((m) => m.CommonDocumentModule),
645
+			},
646
+			// 文档管理-个人文档
647
+			{
648
+			  path: "personageDocument",
649
+			  loadChildren: () => import("../personage-document/personage-document.module").then((m) => m.PersonageDocumentModule),
640 650
 			}
641 651
     ],
642 652
   },

+ 23 - 8
src/app/views/main/main.component.html

@@ -30,7 +30,7 @@
30 30
     <nz-header>
31 31
       <div class="app-header display_flex justify-content_space-between align-items_center">
32 32
         <div class="left">
33
-					<!-- <i class="icon_transport transport-bg-add green" *ngIf='speediness' (click)="speedinessAdd()" nz-tooltip nzTooltipTitle="新增报修"></i> -->
33
+					<i class="icon_transport transport-xinzeng green" *ngIf='speediness' (click)="speedinessAdd()" nz-tooltip nzTooltipTitle="新增报修"></i>
34 34
           <i class="icon_transport transport-tiaodu-fill green" *ngIf='deskRole' (click)="toFuwutai()" nz-tooltip nzTooltipTitle="调度台"></i>
35 35
           <i class="icon_transport transport-hushizhihanghuligongzuo green" *ngIf="nurseRole" (click)="toHuShi()" nz-tooltip nzTooltipTitle="护士端"></i>
36 36
           <i class="icon_transport transport-peizhi1 green" *ngIf="incidentConfigRole || otherConfigRole || pageConfigRole || nurseConfigRole" (click)="toConfigurationCenter()" nz-tooltip nzTooltipTitle="配置中心"></i>
@@ -53,7 +53,8 @@
53 53
 							<div class="dropdownItem" *ngIf="disinfectionSupplyRole" (click)="toDisinfectionSupply()">全局业务查看</div>
54 54
 							<div class="dropdownItem" *ngIf="realtimeBroadcastRole" (click)="toRealtimeBroadcast()">故障实时播报</div>
55 55
 							<div class="dropdownItem" *ngIf="inspectClosedLoopViewRole" (click)="toInspectClosedLoopView()">陪检闭环视图</div>
56
-            </div>
56
+							<div class="dropdownItem" *ngIf="webRepairs" (click)="toWebRepairs()">web报修</div>
57
+						</div>
57 58
           </div>
58 59
         </div>
59 60
         <div class="right">
@@ -155,14 +156,16 @@
155 156
 <app-select-menu (cancelMenuModal)="cancelMenuModal($event)" [iShowMenuModal]="iShowMenuModal"></app-select-menu>
156 157
 <!-- 遮罩 -->
157 158
 <app-mask *ngIf="maskFlag"></app-mask>
159
+<!-- 直接解决 -->
160
+<app-incident-direct-order *ngIf="directOrderModalShow" (closeModelHs)="closeDirectOrderModelOrder($event)" (confirmModelHs)="confirmDirectOrderModelOrder($event)"></app-incident-direct-order>
158 161
 
159 162
 <!-- 新建工单 -->
160
-<div class="newOrder display_flex justify-content_flex-center align-items_center" *ngIf="newOrderShowOpen" (click)="clickExtra($event)">
163
+<div class="newOrder display_flex justify-content_flex-center align-items_center" *ngIf="newOrderShowOpen">
161 164
 	<div class="modalBody">
162 165
 		<div class="title" *ngIf="currentTabIndex === '故障报修'">
163 166
 			<div class="newTop">
164 167
 				<div class="name">来电咨询</div>
165
-				<div class="newTopItem">
168
+				<div class="newTopItem" *ngIf="hospitalModel!=1">
166 169
 					<span class="grayFont required">院区:</span>
167 170
 					<nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzPlaceHolder="请选择院区" [(ngModel)]="incidentModel.hosId" (ngModelChange)="changeApplyHospital($event)" nzAllowClear [nzDisabled]="buildType === '编辑事件'">
168 171
 						<ng-container *ngFor="let option of applicationHospitalList">
@@ -185,7 +188,7 @@
185 188
 					</nz-select>
186 189
 				</div>
187 190
 				<div class="newTopItem">
188
-					<span class="grayFont" [ngClass]="{'required': incidentModel.repairIncidentType === 'public'}">申请人:</span>
191
+					<span class="grayFont" [ngClass]="{'required': publicRepair && applicantMustFillIn==1}">申请人:</span>
189 192
 					<ng-container *ngIf="buildType === '报修转事件'">{{incidentMsg.requesterName}}</ng-container>
190 193
 					<ng-container *ngIf="buildType !== '报修转事件'">
191 194
 						<nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('requester', $event)" nzPlaceHolder="请选择申请人" [(ngModel)]="incidentModel.requester" (ngModelChange)="changeApplyRequester($event)" nzAllowClear (nzOpenChange)="openChangeApplyRequester($event)">
@@ -202,7 +205,7 @@
202 205
 				<div class="newTopItem" *ngIf="incidentModel.incomingPhone">
203 206
 					<span class="grayFont">来电电话:{{incidentModel.incomingPhone}}</span>
204 207
 				</div>
205
-				<div class="newTopItem">
208
+				<div class="newTopItem" *ngIf="deptRepair && publicRepair">
206 209
 					<span class="grayFont">
207 210
 						<nz-radio-group [nzDisabled]="buildType === '编辑事件'" [(ngModel)]="incidentModel.repairIncidentType" (ngModelChange)="changeRepairIncidentType($event)">
208 211
 							<label nz-radio [nzValue]="item.value" *ngFor="let item of repairIncidentTypeList">{{item.name}}</label>
@@ -585,14 +588,14 @@
585 588
 			</div>
586 589
 		</div>
587 590
 		<div class="btns display_flex justify-content_flex-center align-items_center">
588
-			<ng-container *ngIf="applyDept && currentTabIndex !== '故障报修'">
591
+<!-- 			<ng-container *ngIf="applyDept && currentTabIndex !== '故障报修'">
589 592
 				<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')">
590 593
 					继续建单
591 594
 				</button>
592 595
 				<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')">
593 596
 					{{isYyInspect ? '预约建单' :'直接建单'}}
594 597
 				</button>
595
-			</ng-container>
598
+			</ng-container> -->
596 599
 			<ng-container *ngIf="currentTabIndex === '故障报修' && buildType !== '编辑事件'">
597 600
 				<label nz-checkbox [(ngModel)]="isBuildOrderAgagin" *ngIf="buildType !== '报修转事件' && buildType !== '留言转事件' && buildType !== '继续建单'">是否连续建单</label>
598 601
 				<button nz-button class="btn" nzType="primary" (click)="directOrder()">
@@ -616,3 +619,15 @@
616 619
 		</div>
617 620
 	</div>
618 621
 </div>
622
+
623
+<!-- 操作成功/失败提示框 -->
624
+<app-prompt-modal
625
+  *ngIf="promptModalShow"
626
+  [content]="promptContent"
627
+  [success]="ifSuccess"
628
+  [show]="promptModalShow"
629
+  [info]="promptInfo"
630
+  [back]="back"
631
+  (closeModel)="closeModel($event)"
632
+>
633
+

+ 776 - 0
src/app/views/main/main.component.less

@@ -421,3 +421,779 @@ nz-header.ant-layout-header {
421 421
     }
422 422
   }
423 423
 }
424
+
425
+  // 新建工单弹框
426
+  .newOrder {
427
+    position: fixed;
428
+    left: 0;
429
+    top: 0;
430
+    width: 100%;
431
+    height: 100%;
432
+    background: rgba(0, 0, 0, 0.5);
433
+    z-index: 99;
434
+
435
+    .modalBody {
436
+      width: 1318px;
437
+      // height: 580px;
438
+      background: #fff;
439
+      border-radius: 5px;
440
+      // padding: 12px 20px;
441
+      padding: 12px 0;
442
+      color: #333;
443
+      font-size: 14px;
444
+
445
+      .title {
446
+        font-size: 18px;
447
+        // text-align: center;
448
+        line-height: 24px;
449
+        margin: 6px 24px 18px;
450
+        position: relative;
451
+
452
+        i {
453
+          position: absolute;
454
+          right: 0;
455
+          top: 0;
456
+          font-size: 20px;
457
+          color: #666;
458
+          cursor: pointer;
459
+          padding: 0 5px;
460
+        }
461
+
462
+        .newTop{
463
+          display: flex;
464
+          align-items: center;
465
+          font-size: 14px;
466
+          .name{
467
+            font-weight: bold;
468
+            margin-right: 24px;
469
+          }
470
+          .newTopItem{
471
+            margin-right: 16px;
472
+            &:last-of-type{
473
+              margin-right: 0;
474
+            }
475
+          }
476
+        }
477
+      }
478
+
479
+      .content {
480
+        // width: 960px;
481
+        // height: 474px;
482
+        height: 603px;
483
+        // border: 1px solid #e5e9ed;
484
+        border-top: 1px solid #e5e9ed;
485
+        border-bottom: 1px solid #e5e9ed;
486
+        // background: #f9fafb;
487
+        // border-radius: 5px;
488
+        overflow: hidden;
489
+
490
+        .grayFont {
491
+          color: #666;
492
+        }
493
+
494
+        .col {
495
+          height: 100%;
496
+
497
+          &.left {
498
+            border-right: 2px solid #e5e9ed;
499
+            display: flex;
500
+            flex-direction: column;
501
+
502
+            .top {
503
+              padding: 8px;
504
+              nz-select {
505
+                margin-right: 8px;
506
+              }
507
+
508
+              .tel {
509
+                margin: 0 8px 0 0;
510
+              }
511
+            }
512
+            // tab 任务类型
513
+            .tabs {
514
+              display: flex;
515
+              height: 37px;
516
+              border-bottom: 1px solid #e5e9ed;
517
+              background-color: #fff;
518
+              .tabs__inner {
519
+                flex: 1;
520
+                overflow: hidden;
521
+                .tabs__wrap {
522
+                  position: relative;
523
+                  z-index: 1;
524
+                  display: flex;
525
+                  transition: all 1s;
526
+                  .tab {
527
+                    width: 120px;
528
+                    height: 36px;
529
+                    text-align: center;
530
+                    line-height: 36px;
531
+                    background: #fff;
532
+                    cursor: pointer;
533
+                    font-size: 14px;
534
+                    position: relative;
535
+
536
+                    &.checked {
537
+                      color: @primary-color;
538
+                      &::after{
539
+                        content: '';
540
+                        position: absolute;
541
+                        bottom: 0;
542
+                        left: 0;
543
+                        width: 100%;
544
+                        height: 1px;
545
+                        background-color: @primary-color;
546
+                      }
547
+                    }
548
+                  }
549
+                }
550
+              }
551
+              .tabs__operate {
552
+                border-bottom: 1px solid #e5e9ed;
553
+                border-left: 1px solid #e5e9ed;
554
+                width: 22px;
555
+                display: flex;
556
+                flex-direction: column;
557
+                align-items: center;
558
+                justify-content: center;
559
+                position: relative;
560
+                z-index: 2;
561
+                .tabs__Icon--left {
562
+                  font-size: 12px;
563
+                  color: #e5e9ed;
564
+                  cursor: pointer;
565
+                  &:hover {
566
+                    color: #333;
567
+                  }
568
+                }
569
+                .tabs__Icon--right {
570
+                  transform: rotateY(180deg);
571
+                  font-size: 12px;
572
+                  color: #e5e9ed;
573
+                  cursor: pointer;
574
+                  &:hover {
575
+                    color: #333;
576
+                  }
577
+                }
578
+              }
579
+            }
580
+
581
+            // 底部tab页
582
+            .bottomWrap {
583
+              flex: 1;
584
+              height: 300px;
585
+              .bottom_req{
586
+                height: 100%;
587
+                padding: 16px;
588
+                ::ng-deep .ant-calendar-picker{
589
+                  width: 100%!important;
590
+                }
591
+                .row{
592
+                  display: flex;
593
+                  align-items: center;
594
+                  margin-bottom: 16px;
595
+                  &:last-of-type{
596
+                    margin-bottom: 0;
597
+                  }
598
+                  .col{
599
+                    flex: 1;
600
+                    flex-shrink: 0;
601
+                    display: flex;
602
+                    align-items: center;
603
+                    word-break: break-all;
604
+                    position: relative;
605
+                    margin-right: 8px;
606
+                    &:last-of-type{
607
+                      margin-right: 0;
608
+                    }
609
+                    &.alignItemsStart{
610
+                      align-items: flex-start;
611
+                    }
612
+                    &.flex2{
613
+                      flex: 2;
614
+                    }
615
+                    &.flex3{
616
+                      flex: 3;
617
+                    }
618
+                    &.flex4{
619
+                      flex: 4;
620
+                    }
621
+                    &.flex5{
622
+                      flex: 5;
623
+                    }
624
+                    &.flex6{
625
+                      flex: 6;
626
+                    }
627
+                    &.flex7{
628
+                      flex: 7;
629
+                    }
630
+                    .addressList{
631
+                      position: absolute;
632
+                      top: 100%;
633
+                      left: 0;
634
+                      width: 100%;
635
+                      max-height: 256px;
636
+                      z-index: 2;
637
+                      background: #fff;
638
+                      border: 1px solid #d9d9d9;
639
+                      border-radius: 4px;
640
+                      overflow: hidden auto;
641
+                      .addressItem{
642
+                        padding: 5px 12px;
643
+                        cursor: pointer;
644
+                        &:hover{
645
+                          background-color: #e9f7e9;
646
+                        }
647
+                      }
648
+                    }
649
+                    .ant-input-clear-icon{
650
+                      align-self: center;
651
+                      font-style: normal;
652
+                      cursor: pointer;
653
+                      margin-left: 8px;
654
+                      font-size: 12px;
655
+                      border-bottom: 1px solid #49b856;
656
+                      color: #49b856;
657
+                      flex-shrink: 0;
658
+                    }
659
+                    .name{
660
+                      flex-shrink: 0;
661
+                      width: 6em;
662
+                      text-align-last: justify;
663
+                      padding-left: 12px;
664
+                      box-sizing: content-box;
665
+                    }
666
+                    em{
667
+                      font-style: normal;
668
+                      cursor: pointer;
669
+                      margin-left: 8px;
670
+                      font-size: 12px;
671
+                      border-bottom: 1px solid @primary-color;
672
+                      color: @primary-color;
673
+                    }
674
+                  }
675
+                }
676
+              }
677
+              .bottom {
678
+                padding: 0 16px;
679
+                // height: 310px;
680
+                height: 567px;
681
+                overflow-y: auto;
682
+                .ant-form {
683
+                  height: 100%;
684
+                  .ant-form-item {
685
+                    margin-bottom: 0;
686
+                  }
687
+                }
688
+                .control-flex {
689
+                  margin-top: 16px;
690
+                  overflow: hidden;
691
+                  display: flex;
692
+                  justify-content: space-between;
693
+                  align-items: center;
694
+                  .patient-control{
695
+                    flex-shrink: 0;
696
+                  }
697
+                  .goods-control{
698
+                    display: flex;
699
+                    flex-shrink: 0;
700
+                    margin-left: 16px;
701
+                    align-items: center;
702
+                  }
703
+                }
704
+                .goods-wrap {
705
+                  margin-left: 8px;
706
+                  .goods-item {
707
+                    display: inline-block;
708
+                  }
709
+                }
710
+                // 标本轮巡
711
+                .bottom380256 {
712
+                  height: 100%;
713
+                  font-size: 16px;
714
+                  color: #333;
715
+                  display: flex;
716
+                  justify-content: center;
717
+                  align-items: center;
718
+                  text-align: center;
719
+                }
720
+                .bottom255 {
721
+                  height: 100%;
722
+                  // overflow-y: auto;
723
+                  .txtC {
724
+                    height: 100%;
725
+                    display: flex;
726
+                    flex-direction: column;
727
+                    justify-content: center;
728
+                    align-items: center;
729
+                  }
730
+                }
731
+
732
+                .label {
733
+                  text-align: left;
734
+                }
735
+
736
+                .handlerType {
737
+                  margin: 21px 0 0 0;
738
+                }
739
+
740
+                .radios {
741
+                  // height: 96px;
742
+                  max-height: 267px;
743
+                  width: 100%;
744
+                  overflow-y: auto;
745
+                  padding: 8px;
746
+                  background: #fff;
747
+                  border: 1px solid #e6dede;
748
+                  border-radius: 5px;
749
+                  .ant-row {
750
+                    width: 100%;
751
+                    display: flex;
752
+                    flex-wrap: wrap;
753
+                    .ant-radio-wrapper {
754
+                      width: 20%;
755
+                      display: flex;
756
+                      align-items: center;
757
+                      margin-right: 0;
758
+                      ::ng-deep span.ant-radio + * {
759
+                        overflow: hidden;
760
+                        text-overflow: ellipsis;
761
+                        white-space: inherit;
762
+                      }
763
+                    }
764
+                  }
765
+                }
766
+              }
767
+            }
768
+            // 底部信息提示
769
+            .bottomInfo {
770
+              border-top: 2px solid #e5e9ed;
771
+              padding-left: 32px;
772
+              padding-right: 32px;
773
+              height: 52px;
774
+              line-height: 52px;
775
+              font-size: 14px;
776
+              color: #ff3b53;
777
+            }
778
+          }
779
+
780
+          &.right {
781
+            background: #fff;
782
+            position: relative;
783
+
784
+            .rightTitle {
785
+              position: absolute;
786
+              width: 100%;
787
+              height: 37px;
788
+              line-height: 37px;
789
+              font-size: 16px;
790
+              margin: 0;
791
+              border-bottom: 1px solid #e5e9ed;
792
+              background: #fff;
793
+              z-index: 9999;
794
+              display: flex;
795
+              align-items: center;
796
+              .rightTitle_tab {
797
+                width: 120px;
798
+                height: 36px;
799
+                text-align: center;
800
+                line-height: 36px;
801
+                background: #fff;
802
+                cursor: pointer;
803
+                font-size: 14px;
804
+                position: relative;
805
+                overflow: hidden;
806
+                &.active {
807
+                  color: @primary-color;
808
+                  &::after{
809
+                    content: '';
810
+                    position: absolute;
811
+                    bottom: 0;
812
+                    left: 0;
813
+                    width: 100%;
814
+                    height: 1px;
815
+                    background-color: @primary-color;
816
+                  }
817
+                }
818
+              }
819
+            }
820
+
821
+            .cots_body {
822
+              width: 100%;
823
+              height: 100%;
824
+              // overflow: scroll;
825
+              // padding-right: 2%;
826
+              padding-top: 47px;
827
+            }
828
+          }
829
+        }
830
+      }
831
+    }
832
+
833
+    .btns {
834
+      padding-top: 12px;
835
+      .btn {
836
+        margin: 0 4px;
837
+      }
838
+    }
839
+  }
840
+	
841
+	.required{
842
+	  position: relative;
843
+	  padding-left: 12px;
844
+	  box-sizing: content-box;
845
+	  &::before{
846
+	    font-family: icon_transport;
847
+	    font-size: 10px;
848
+	    content:'\e606';
849
+	    color: red;
850
+	    position: absolute;
851
+	    left: 0;
852
+	    top: 50%;
853
+	    transform: translateY(-50%);
854
+	  }
855
+	}
856
+	
857
+	/* 未分派 */
858
+	.weifenpai .list {
859
+	  // height: 100px;
860
+	  border-bottom: 1px rgb(225, 229, 232) solid;
861
+	  position: relative;
862
+	  // overflow: hidden;
863
+	  display: flex;
864
+	}
865
+	
866
+	// 转出院记录
867
+	.patientLog .list {
868
+	  height: auto !important;
869
+	  th,
870
+	  td {
871
+	    text-align: center !important;
872
+	  }
873
+	}
874
+	
875
+	/* 左边 */
876
+	.left_cots {
877
+	  // height: 100px;
878
+	  width: 78%;
879
+	  float: left;
880
+	  margin-left: 2%;
881
+	  padding-right: 2%;
882
+	  cursor: pointer;
883
+	  position: relative;
884
+	}
885
+	
886
+	/* 急标 */
887
+	.left_cots .ji {
888
+	  position: absolute;
889
+	  right: -3px;
890
+	  top: -3px;
891
+	  width: 30px;
892
+	}
893
+	
894
+	/* 右边 */
895
+	.right_bots {
896
+	  width: 20%;
897
+	  border-left: 1px #e1e5e8 solid;
898
+	  padding: 8px 0;
899
+	}
900
+	
901
+	/* 上按钮 */
902
+	.right_bots .top_bot {
903
+	  width: 70%;
904
+	  border-radius: 4px;
905
+	  color: white;
906
+	  background-color: @primary-color;
907
+	  border: 1px @primary-color solid;
908
+	  cursor: pointer;
909
+	  height: 27px;
910
+	  margin-bottom: 8px;
911
+	}
912
+	
913
+	.slider {
914
+	  position: absolute;
915
+	  // top: 98px;
916
+	  bottom: 0;
917
+	  right: 0;
918
+	  width: 100%;
919
+	  height: 2px;
920
+	
921
+	  &.sgreen {
922
+	    background: rgb(86, 186, 182);
923
+	  }
924
+	
925
+	  &.syellow {
926
+	    background: rgb(245, 166, 35);
927
+	  }
928
+	  &.sred {
929
+	    background: #d81e06;
930
+	  }
931
+	}
932
+	
933
+	/* 中按钮 */
934
+	.right_bots .mid_bot {
935
+	  width: 70%;
936
+	  border-radius: 4px;
937
+	  color: white;
938
+	  background-color: @primary-color;
939
+	  border: 1px @primary-color solid;
940
+	  cursor: pointer;
941
+	  height: 27px;
942
+	}
943
+	
944
+	/* 下按钮 */
945
+	.right_bots .btm_bot {
946
+	  width: 70%;
947
+	  border-radius: 4px;
948
+	  color: #78797a;
949
+	  background-color: #FFF;
950
+	  border: 1px #e5e9ed solid;
951
+	  cursor: pointer;
952
+	  height: 27px;
953
+	}
954
+	
955
+	/* 工单 */
956
+	.weifenpai .left_cots .gongdan {
957
+	  height: 24px;
958
+	  margin: 4px 0;
959
+	  line-height: 24px;
960
+	  text-align: center;
961
+	}
962
+	
963
+	.weifenpai .left_cots .gongdan .left {
964
+	  float: left;
965
+	  color: #333;
966
+	  font-size: 14px;
967
+	}
968
+	.gongdan_name {
969
+	  max-width: 80% !important;
970
+	  overflow: hidden !important;
971
+	  text-overflow: ellipsis !important;
972
+	  white-space: nowrap !important;
973
+	}
974
+	
975
+	.weifenpai .left_cots .gongdan .right {
976
+	  float: right;
977
+	  color: #666666;
978
+	
979
+	  &.colorRed {
980
+	    color: red;
981
+	  }
982
+	}
983
+	
984
+	.weifenpai .left_cots .gongdan .right span:nth-child(1) {
985
+	  float: right;
986
+	  font-size: 12px;
987
+	
988
+	  &.colorRed {
989
+	    color: red;
990
+	  }
991
+	}
992
+	
993
+	.weifenpai .left_cots .gongdan .right span:nth-child(2) {
994
+	  float: right;
995
+	  border-radius: 50%;
996
+	  width: 10px;
997
+	  height: 10px;
998
+	  background-color: red;
999
+	  margin-top: 7px;
1000
+	  margin-right: 8px;
1001
+	}
1002
+	
1003
+	/* 地点 */
1004
+	.weifenpai .didian {
1005
+	  height: 24px;
1006
+	  line-height: 24px;
1007
+	  margin: 4px 0;
1008
+	  display: flex;
1009
+	}
1010
+	
1011
+	.weifenpai .didian .left {
1012
+	  float: left;
1013
+	  color: #666666;
1014
+	  font-size: 14px;
1015
+	  flex: 1;
1016
+	  white-space: nowrap;
1017
+	  overflow: hidden;//文本超出隐藏
1018
+	  text-overflow: ellipsis;//文本超出省略号替代
1019
+	  &.noEllipsis{
1020
+	    white-space: normal;
1021
+	    overflow: visible;
1022
+	    text-overflow: inherit;
1023
+	    word-break: break-all;
1024
+	  }
1025
+	}
1026
+	
1027
+	.weifenpai .didian .right {
1028
+	  float: right;
1029
+	  flex: 1;
1030
+	  white-space: nowrap;
1031
+	  overflow: hidden;//文本超出隐藏
1032
+	  text-overflow: ellipsis;//文本超出省略号替代
1033
+	  text-align: right;
1034
+	}
1035
+	
1036
+	.weifenpai .didian .right i {
1037
+	  font-size: 12px;
1038
+	  color: @primary-color;
1039
+	}
1040
+	
1041
+	.weifenpai .didian .right span {
1042
+	  font-size: 12px;
1043
+	}
1044
+	
1045
+	/* 时间 */
1046
+	.weifenpai .shijian {
1047
+	  height: 24px;
1048
+	  line-height: 24px;
1049
+	  margin: 4px 0;
1050
+	}
1051
+	
1052
+	.weifenpai .shijian .left {
1053
+	  float: left;
1054
+	}
1055
+	
1056
+	.weifenpai .shijian .right {
1057
+	  float: right;
1058
+	  font-size: 12px;
1059
+	  color: #999999;
1060
+	}
1061
+	
1062
+	.weifenpai .shijian .left i {
1063
+	  color: @primary-color;
1064
+	  font-size: 14px;
1065
+	
1066
+	  &.colorRed {
1067
+	    color: red;
1068
+	  }
1069
+	}
1070
+	
1071
+	.weifenpai .shijian .left span {
1072
+	  font-size: 12px;
1073
+	  color: #666666;
1074
+	}
1075
+	
1076
+	/* 待到达 */
1077
+	.daidaoda .list {
1078
+	  // height: 100px;
1079
+	  // overflow: hidden;
1080
+	  border-bottom: 1px rgb(225, 229, 232) solid;
1081
+	  position: relative;
1082
+	  display: flex;
1083
+	}
1084
+	
1085
+	/* 左边 */
1086
+	.daidaoda .left_cots {
1087
+	  // height: 100px;
1088
+	  width: 78%;
1089
+	  float: left;
1090
+	  margin-left: 2%;
1091
+	  padding-right: 2%;
1092
+	  cursor: pointer;
1093
+	  position: relative;
1094
+	}
1095
+	
1096
+	/* 急标 */
1097
+	.daidaoda .left_cots .ji {
1098
+	  position: absolute;
1099
+	  right: -3px;
1100
+	  top: -3px;
1101
+	  width: 30px;
1102
+	}
1103
+	
1104
+	/* 急标 */
1105
+	.daidaoda .list .ji {
1106
+	  position: absolute;
1107
+	  right: -3px;
1108
+	  top: -3px;
1109
+	  width: 30px;
1110
+	}
1111
+	
1112
+	/* 工单 */
1113
+	.daidaoda .gongdan {
1114
+	  height: 24px;
1115
+	  margin: 4px 0;
1116
+	  line-height: 24px;
1117
+	  text-align: center;
1118
+	}
1119
+	
1120
+	.daidaoda .gongdan .left {
1121
+	  float: left;
1122
+	  color: #333;
1123
+	  font-size: 14px;
1124
+	}
1125
+	
1126
+	.daidaoda .gongdan .right {
1127
+	  float: right;
1128
+	  color: #666666;
1129
+	
1130
+	  &.colorRed {
1131
+	    color: red;
1132
+	  }
1133
+	}
1134
+	
1135
+	.cots_body .loading {
1136
+	  width: 100%;
1137
+	  height: 100%;
1138
+	  position: absolute;
1139
+	  left: 0;
1140
+	  top: 0;
1141
+	  // display: flex;
1142
+	  // flex-flow: column;
1143
+	  // justify-content: center;
1144
+	  // align-items: center;
1145
+	}
1146
+	
1147
+	/* 暂无数据 */
1148
+	.cots_body .no_data {
1149
+	  width: 100%;
1150
+	  height: 100%;
1151
+	  position: absolute;
1152
+	  left: 0;
1153
+	  top: 0;
1154
+	  // text-align: center;
1155
+	  // line-height: 593px;
1156
+	  color: @primary-color;
1157
+	  font-size: 24px;
1158
+	  font-weight: bold;
1159
+	  display: flex;
1160
+	  justify-content: center;
1161
+	  align-items: center;
1162
+	}
1163
+	
1164
+	.toLastTime {
1165
+	  margin-left: auto;
1166
+	  color: #999999;
1167
+	  font-size: 12px;
1168
+	
1169
+	  &.colorRed {
1170
+	    color: red;
1171
+	  }
1172
+	  .order{
1173
+	    color: #000;
1174
+	    font-weight: bold;
1175
+	    margin-right: 16px;
1176
+	    cursor: pointer;
1177
+	  }
1178
+	}
1179
+	
1180
+	.toLastTime .time {
1181
+	  font-size: 12px;
1182
+	  color: @primary-color;
1183
+	  margin-left: 8px;
1184
+	}
1185
+	.toLastTime1 {
1186
+	  position: absolute;
1187
+	  right: 10px;
1188
+	  color: #999999;
1189
+	  font-size: 12px;
1190
+	
1191
+	  &.colorRed {
1192
+	    color: red;
1193
+	  }
1194
+	}
1195
+	
1196
+	.toLastTime1 .time {
1197
+	  font-size: 12px;
1198
+	  color: @primary-color;
1199
+	}

文件差异内容过多而无法显示
+ 3399 - 3330
src/app/views/main/main.component.ts


+ 3 - 1
src/app/views/main/main.module.ts

@@ -5,6 +5,7 @@ import { MainRoutingModule } from './main-routing.module';
5 5
 import { MainComponent } from './main.component';
6 6
 import { ShareModule } from 'src/app/share/share.module';
7 7
 import { SelectMenuComponent } from 'src/app/components/select-menu/select-menu.component';
8
+import { IncidentDicrectOrderModule } from 'src/app/components/incidentManagement/incident-direct-order/incident-direct-order.module';
8 9
 
9 10
 @NgModule({
10 11
   declarations: [
@@ -14,7 +15,8 @@ import { SelectMenuComponent } from 'src/app/components/select-menu/select-menu.
14 15
   imports: [
15 16
     CommonModule,
16 17
     MainRoutingModule,
17
-    ShareModule
18
+    ShareModule,
19
+		IncidentDicrectOrderModule
18 20
   ]
19 21
 })
20 22
 export class MainModule { }

+ 17 - 0
src/app/views/personage-document/personage-document-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from '@angular/core';
2
+import { Routes, RouterModule } from '@angular/router';
3
+import { PersonageDocumentComponent } from './personage-document.component';
4
+
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: '',
9
+    component: PersonageDocumentComponent,
10
+  }
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule]
16
+})
17
+export class PersonageDocumentRoutingModule { }

+ 279 - 0
src/app/views/personage-document/personage-document.component.html

@@ -0,0 +1,279 @@
1
+<div class="list-template">
2
+  <div class="list-template__content">
3
+    <div class="list-template__top" nz-row>
4
+      <div nz-col nzLg='20' class="list-template__searchBox">
5
+        <div class="list-template__searchItem">
6
+          <span class="label">申请科室:</span>
7
+          <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" (nzOnSearch)="changeInp($event)" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择申请科室" [(ngModel)]="department">
8
+            <ng-container *ngFor="let option of hospitals1">
9
+              <nz-option *ngIf="!isDeptLoading" [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
10
+            </ng-container>
11
+            <nz-option *ngIf="isDeptLoading" nzDisabled nzCustomContent>
12
+              <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
13
+            </nz-option>
14
+          </nz-select>
15
+        </div>
16
+        <div class="list-template__searchItem">
17
+          <span class="label">批次号:</span>
18
+          <input nz-input class="formItem" [(ngModel)]="batchNumber" placeholder="请输入批次号" nzSize="default" />
19
+        </div>
20
+        <div class="list-template__searchItem">
21
+          <span class="label">创建时间:</span>
22
+          <nz-range-picker [(ngModel)]="dateRange" nzFormat="yyyy-MM-dd"
23
+					(ngModelChange)="changeDate($event)"></nz-range-picker>
24
+        </div>
25
+      </div>
26
+      <div nz-col nzLg="4" class="list-template__btns">
27
+        <button class="btn default" (click)='search()'>搜索</button>
28
+        <button class="btn default ml8" (click)='reset()'>重置</button>
29
+      </div>
30
+    </div>
31
+    <div class="list-template__bottom">
32
+      <nz-table class="list-template__nzTable" [nzData]="listOfData" nzSize="middle" [nzShowPagination]="false"
33
+        [nzLoading]="loading1">
34
+        <thead>
35
+          <tr class="thead">
36
+            <th nzWidth="10%">单号|创建时间</th>
37
+            <th nzWidth="10%">批次号</th>
38
+            <th nzWidth="10%">申请科室</th>
39
+            <th nzWidth="7%">总件数</th>
40
+            <th nzWidth="7%">品类数</th>
41
+            <th nzWidth="7%">消耗总价</th>
42
+            <th nzWidth="7%">实发总价</th>
43
+            <th nzWidth="10%">取药药房</th>
44
+						<th nzWidth="7%">是否已建单</th>
45
+						<th nzWidth="6%">状态</th>
46
+            <th nzWidth="18%">操作</th>
47
+          </tr>
48
+        </thead>
49
+        <tbody v-if="listOfData && listOfData.length>0">
50
+          <tr *ngFor="let data of listOfData" (click)="selectedListData(data.id)">
51
+            <td>
52
+							<div>{{ data.packingNo}}</div>
53
+							<div>{{ data.createTime|date:'yyyy-MM-dd HH:mm'}}</div>
54
+						</td>
55
+            <td>{{ data.batch?data.batch.batchNo:'-' }}</td>
56
+            <td>{{ data.applyDeptDTO?data.applyDeptDTO.dept :'-' }}</td>
57
+            <td>{{ data.totalCount||'0' }}</td>
58
+            <td>{{data.kindCount||'0'}}</td>
59
+            <td>{{ data.expendPrice ||'0' }}</td>
60
+            <td>{{ data.actualPrice || '0'}}</td>
61
+            <td>{{ data.pharmacyDTO?data.pharmacyDTO.dept:'-'}}</td>
62
+						<td>{{ data.createOrder==1?'是':'否'}}</td>
63
+						<td>{{ data.orderState.name}}</td>
64
+            <td>
65
+              <div class="coop">
66
+                <span *ngIf="coopBtns.look" (click)="detail($event,data.id)">查看</span>
67
+                <span *ngIf="coopBtns.print" (click)="print($event, data, data.id)">打印</span>
68
+                <span *ngIf="coopBtns.establish && ( data.createOrder=='0' || data.createOrder==null)" (click)="addDateModal(data)">配送建单</span>
69
+              </div>
70
+            </td>
71
+          </tr>
72
+        </tbody>
73
+      </nz-table>
74
+      <div class="list-template__pagination">
75
+        <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="listLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
76
+          (nzPageIndexChange)="getList()" (nzPageSizeChange)="getList()">
77
+        </nz-pagination>
78
+      </div>
79
+    </div>
80
+  </div>
81
+
82
+  <!-- 新增/编辑模态框 -->
83
+  <div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="modal">
84
+    <div class="modalBody">
85
+      <div class="title">科室发药单-查看<i class="icon_transport transport-guanbi" (click)="hideModal()"></i>
86
+      </div>
87
+      <overlay-scrollbars #osComponentRef1 class="content">
88
+        <div class="list-template__bottom">
89
+          <nz-table class="list-template__nzTable" [nzData]="viewData" nzSize="middle" [nzShowPagination]="false"
90
+            [nzLoading]="loading1">
91
+            <thead>
92
+              <tr class="thead">
93
+								<th nzWidth="10%">药品标识</th>
94
+                <th nzWidth="10%">药品名称</th>
95
+                <th nzWidth="10%">规格</th>
96
+                <th nzWidth="10%">消耗数量</th>
97
+                <th nzWidth="10%">实发数量</th>
98
+                <th nzWidth="10%">包装规格</th>
99
+                <th nzWidth="10%">发药药箱</th>
100
+                <th nzWidth="10%">原库存数</th>
101
+                <th nzWidth="10%">计算后库存</th>
102
+        				<th nzWidth="10%">增减</th>
103
+              </tr>
104
+            </thead>
105
+            <tbody>
106
+              <tr *ngFor="let data of viewData">
107
+								<td>{{ data.drugsInfoDTO?data.drugsInfoDTO.drugCode:'无' }}</td>
108
+                <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.drugName:'无' }}</td>
109
+                <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.specs:'无' }}</td>
110
+                <td>{{ data.expendCount||'0' }}</td>
111
+                <td>{{ data.actualCount||'0' }}</td>
112
+                <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.packingSpecs:'0' }}</td>
113
+                <td>{{ data.cartonNum || '0' }}</td>
114
+                <td>{{ data.formerInventory || '0' }}</td>
115
+                <td>{{ data.afterInventory || '0'}}</td>
116
+        				<td>{{ data.addSub || '0' }}</td>
117
+              </tr>
118
+            </tbody>
119
+          </nz-table>
120
+        </div>
121
+      </overlay-scrollbars>
122
+      <div class="display_flex justify-content_flex-center">
123
+        <button class="btn" nz-button nzType="primary" (click)="hideModal()">知道了</button>
124
+      </div>
125
+    </div>
126
+  </div>
127
+  <!-- 删除模态框 -->
128
+  <app-dialog-delete [delModal]="delModal" (hideDelModalEvent)="hideDelModal()" [btnLoading]="btnLoading"
129
+    (confirmDelEvent)="confirmDel()" content="您确认要删除科室吗?"></app-dialog-delete>
130
+
131
+  <!-- 启用停用模态框 -->
132
+  <app-dialog-delete [delModal]="delModal1" (hideDelModalEvent)="hideDelModal1()" [btnLoading]="btnLoading"
133
+    (confirmDelEvent)="confirmDel1()" [content]="'您确认要建立配送工单吗?'"></app-dialog-delete>
134
+
135
+  <!-- 打印 -->
136
+  <div id="report" style="display: none;">
137
+		<div class="monad" 
138
+				*ngIf="rowData"
139
+				style="padding: 10px;
140
+				border: 1px solid #e7e7e7;
141
+				border-radius: 5px;">
142
+			<div class="monad-title" 
143
+				style="text-align: center;
144
+				font-size: 18px;
145
+				border-bottom: 1px solid #e7e7e7;
146
+				padding-bottom: 10px;">
147
+				大输液发药单-{{rowData.applyDeptDTO?rowData.applyDeptDTO.dept:''}}
148
+			</div>
149
+			<div class="monad-sign" style="display: flex;line-height: 23px;font-size: 14px;">
150
+				<div style="margin-right: 15px;">日期:{{rowData.createTime|date:'yyyy-MM-dd HH:mm'}}</div>
151
+				<div style="margin-right: 15px;">批次号:{{rowData.batch?rowData.batch.batchNo:'-'}}</div>
152
+				<div style="margin-right: 15px;">单号:{{rowData.packingNo}}</div>
153
+			</div>
154
+			<div class="monad-sign" style="display: flex;line-height: 23px;font-size: 14px;">
155
+				<div style="margin-right: 15px;">取药药房:{{rowData.pharmacyDTO?rowData.pharmacyDTO.dept:'-'}}</div>
156
+			</div>
157
+			<div style="border: 1px solid #e7e7e7;border-bottom: none;font-size: 14px;">
158
+				<div class="thead" style="display: flex;">
159
+					<div style="width: 40%;display: flex;font-size: 12px;
160
+					align-items: center;
161
+					justify-content: center;
162
+					flex-wrap: wrap;
163
+					border-right: 1px solid #e7e7e7;
164
+					border-bottom: 1px solid #e7e7e7;">药品名称</div>
165
+					
166
+					<div style="width: 20%;display: flex;font-size: 12px;
167
+					align-items: center;
168
+					justify-content: center;
169
+					flex-wrap: wrap;
170
+					border-right: 1px solid #e7e7e7;
171
+					border-bottom: 1px solid #e7e7e7;">规格</div>
172
+					
173
+					<div style="width: 10%;display: flex;font-size: 12px;
174
+					align-items: center;
175
+					justify-content: center;
176
+					flex-wrap: wrap;
177
+					border-right: 1px solid #e7e7e7;
178
+					border-bottom: 1px solid #e7e7e7;">15日消耗</div>
179
+					
180
+					<div style="width: 8%;display: flex;font-size: 12px;
181
+					align-items: center;
182
+					justify-content: center;
183
+					flex-wrap: wrap;
184
+					border-right: 1px solid #e7e7e7;
185
+					border-bottom: 1px solid #e7e7e7;">包规</div>
186
+					
187
+					<div style="width: 8%;display: flex;font-size: 12px;
188
+					align-items: center;
189
+					justify-content: center;
190
+					flex-wrap: wrap;
191
+					border-right: 1px solid #e7e7e7;
192
+					border-bottom: 1px solid #e7e7e7;">实消</div>
193
+					
194
+					<div style="width: 10%;display: flex;font-size: 12px;
195
+					align-items: center;
196
+					justify-content: center;
197
+					flex-wrap: wrap;
198
+					border-right: 1px solid #e7e7e7;
199
+					border-bottom: 1px solid #e7e7e7;">临时增发</div>
200
+					
201
+					<div style="width: 10%;display: flex;font-size: 12px;
202
+					align-items: center;
203
+					justify-content: center;
204
+					flex-wrap: wrap;
205
+					border-bottom: 1px solid #e7e7e7;">箱数</div>
206
+				</div>
207
+				<div *ngFor="let data of codes" style="display: flex;">
208
+					<div style="width: 40%;display: flex;font-size: 12px;
209
+					align-items: center;
210
+					justify-content: center;
211
+					flex-wrap: wrap;
212
+					border-right: 1px solid #e7e7e7;
213
+					border-bottom: 1px solid #e7e7e7;">{{ data.drugsInfoDTO.drugName }}</div>
214
+					
215
+					<div style="width: 20%;display: flex;font-size: 12px;
216
+					align-items: center;
217
+					justify-content: center;
218
+					flex-wrap: wrap;
219
+					border-right: 1px solid #e7e7e7;
220
+					border-bottom: 1px solid #e7e7e7;">{{ data.drugsInfoDTO.specs }}</div>
221
+					
222
+					<div style="width: 10%;display: flex;font-size: 12px;
223
+					align-items: center;
224
+					justify-content: center;
225
+					flex-wrap: wrap;
226
+					border-right: 1px solid #e7e7e7;
227
+					border-bottom: 1px solid #e7e7e7;">{{data.fifteenExpendCount}}</div>
228
+					
229
+					<div style="width: 8%;display: flex;font-size: 12px;
230
+					align-items: center;
231
+					justify-content: center;
232
+					flex-wrap: wrap;
233
+					border-right: 1px solid #e7e7e7;
234
+					border-bottom: 1px solid #e7e7e7;">{{ data.drugsInfoDTO.packingSpecs }}</div>
235
+					
236
+					<div style="width: 8%;display: flex;font-size: 12px;
237
+					align-items: center;
238
+					justify-content: center;
239
+					flex-wrap: wrap;
240
+					border-right: 1px solid #e7e7e7;
241
+					border-bottom: 1px solid #e7e7e7;">{{ data.expendCount }}</div>
242
+					
243
+					<div style="width: 10%;display: flex;font-size: 12px;
244
+					align-items: center;
245
+					justify-content: center;
246
+					flex-wrap: wrap;
247
+					border-right: 1px solid #e7e7e7;
248
+					border-bottom: 1px solid #e7e7e7;">{{ data.addSub || 0 }}</div>
249
+					
250
+					<div style="width: 10%;display: flex;font-size: 12px;
251
+					align-items: center;
252
+					justify-content: center;
253
+					flex-wrap: wrap;
254
+					border-bottom: 1px solid #e7e7e7;">
255
+						<span *ngIf="data.drugsInfoDTO.drugName!='合计'">
256
+							{{ data.giveOutType.value==1 ? data.actualCount :data.cartonNum }}
257
+							{{data.giveOutType && data.giveOutType.value==1?
258
+							data.drugsInfoDTO.unit:'箱'}}
259
+						</span>
260
+						<span *ngIf="data.drugsInfoDTO.drugName=='合计'">
261
+							{{ data.cartonActual}}
262
+						</span>
263
+					</div>
264
+					
265
+				</div>
266
+			</div>
267
+		</div>
268
+  </div>
269
+
270
+</div>
271
+<!-- 操作成功/失败提示框 -->
272
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
273
+  [info]="promptInfo"></app-prompt-modal>
274
+
275
+<!-- 查看详情 -->
276
+<router-outlet></router-outlet>
277
+<!-- 遮罩 -->
278
+<app-mask *ngIf="maskFlag"></app-mask>
279
+<app-excel-import [isShow]="isShow" (hideFormHand)="hideExcelImport($event)" *ngIf="isShow" (submitFormHand)="submitExcelImport($event)"></app-excel-import>

+ 233 - 0
src/app/views/personage-document/personage-document.component.less

@@ -0,0 +1,233 @@
1
+@import "../../../../src/theme.less";
2
+:host {
3
+  .add-button {
4
+    margin: 0 auto 16px !important;
5
+  }
6
+  .targetDept {
7
+    overflow: hidden;
8
+    // width: 90px;
9
+    text-overflow: ellipsis;
10
+    white-space: nowrap;
11
+  }
12
+  .dynamic {
13
+    margin-bottom: 16px;
14
+    display: flex;
15
+    align-items: center;
16
+    input {
17
+      width: 90%;
18
+    }
19
+    i {
20
+      margin-left: 8px;
21
+      cursor: pointer;
22
+      font-size: 18px;
23
+    }
24
+  }
25
+}
26
+
27
+.save {
28
+  position: fixed;
29
+  left: 0;
30
+  top: 0;
31
+  width: 100%;
32
+  height: 100%;
33
+  background: rgba(0, 0, 0, 0.4);
34
+  z-index: 99;
35
+
36
+  .modalBody {
37
+    width: 350px;
38
+    background: #fff;
39
+    border-radius: 5px;
40
+    padding: 10px 20px;
41
+    color: #333;
42
+
43
+    .title {
44
+      width: 100%;
45
+      text-align: center;
46
+      font-size: 18px;
47
+      position: relative;
48
+
49
+      i {
50
+        position: absolute;
51
+        right: 0;
52
+        top: 0;
53
+        font-size: 20px;
54
+        color: #666;
55
+        cursor: pointer;
56
+        padding: 0 5px;
57
+      }
58
+    }
59
+
60
+    .content {
61
+      width: 100%;
62
+      height: 117px;
63
+      background: #f9fafb;
64
+      border: 1px solid #e5e9ed;
65
+      border-radius: 5px;
66
+      overflow: hidden;
67
+      margin-top: 12px;
68
+
69
+      div {
70
+        text-align: center;
71
+        margin: 0;
72
+
73
+        &.icon {
74
+          margin-top: 17px;
75
+
76
+          i {
77
+            color: #34b349;
78
+            font-size: 30px !important;
79
+
80
+            &.transport-wenhao {
81
+              color: #f5a523;
82
+            }
83
+
84
+            &.transport-shibai {
85
+              color: #ff3a52;
86
+            }
87
+          }
88
+        }
89
+
90
+        &.defeat {
91
+          color: #333;
92
+          font-size: 18px;
93
+        }
94
+
95
+        &:nth-child(3) {
96
+          font-size: 14px;
97
+          color: #666;
98
+        }
99
+      }
100
+    }
101
+
102
+    button {
103
+      margin-top: 10px;
104
+
105
+      &.btn {
106
+        margin-left: 8px;
107
+      }
108
+    }
109
+  }
110
+
111
+  // 新增
112
+  &.add {
113
+    .modalBody {
114
+      width: 80%;
115
+      height: auto;
116
+
117
+      .content {
118
+        width: 100%;
119
+        height: auto;
120
+        padding: 19px 14px 0 14px;
121
+        max-height: 500px;
122
+        overflow-y: auto;
123
+				
124
+				.list-template__bottom {
125
+				  background: #f9fafb;
126
+				  border: 1px solid #e5e9ed;
127
+				  border-radius: 8px;
128
+				  padding-bottom: 56px;
129
+				  position: relative;
130
+				  .list-template__nzTable {
131
+				    padding: 16px 16px 0;
132
+				
133
+				    .thead {
134
+				      background-image: linear-gradient(to right, @bg-start, @bg-end);
135
+				
136
+				      th {
137
+				        background: transparent;
138
+				        color: #fff;
139
+				        text-align: center;
140
+				      }
141
+				    }
142
+				
143
+				    .ant-table-body {
144
+				      border-bottom: 1px solid #e5e9ed;
145
+				    }
146
+				
147
+				    .ant-table-tbody {
148
+				      tr {
149
+				        text-align: center;
150
+				        color: #333;
151
+				
152
+				        td {
153
+				          border: none;
154
+				
155
+				          &.tab_hover:hover{
156
+				            text-decoration: underline;
157
+				            cursor: pointer;
158
+				          }
159
+				
160
+				          .coop {
161
+				            button{
162
+				              color: #333;
163
+				            }
164
+				            span,button {
165
+				              display: inline-block;
166
+				              padding: 0 8px;
167
+				              cursor: pointer;
168
+				              position: relative;
169
+				
170
+				              &::after {
171
+				                content: "|";
172
+				                position: absolute;
173
+				                top: 0;
174
+				                right: 0;
175
+				              }
176
+				
177
+				              &:hover,
178
+				              &:active {
179
+				                color: @primary-color;
180
+				              }
181
+				
182
+				              &:nth-last-child(1) {
183
+				                &::after {
184
+				                  content: "";
185
+				                }
186
+				              }
187
+				            }
188
+				          }
189
+				        }
190
+				      }
191
+				    }
192
+				  }
193
+				  .list-template__pagination {
194
+				    height: 56px;
195
+				    display: flex;
196
+				    align-items: center;
197
+				    position: absolute;
198
+				    right: 8px;
199
+				  }
200
+				}
201
+				
202
+        .addForm {
203
+          .ant-form-item {
204
+            margin-bottom: 14px;
205
+
206
+            .ant-form-item-label {
207
+              line-height: 14px;
208
+              text-align: left;
209
+            }
210
+          }
211
+        }
212
+
213
+        .editForm {
214
+          .ant-form-item {
215
+            margin-bottom: 14px;
216
+
217
+            .ant-form-item-label {
218
+              line-height: 0;
219
+              text-align: left;
220
+            }
221
+          }
222
+        }
223
+      }
224
+
225
+      button {
226
+        &:nth-child(1) {
227
+          margin-right: 20px;
228
+        }
229
+      }
230
+    }
231
+  }
232
+}
233
+

+ 895 - 0
src/app/views/personage-document/personage-document.component.ts

@@ -0,0 +1,895 @@
1
+import { Component, OnInit, ViewChild} from "@angular/core";
2
+import { ActivatedRoute, Router } from "@angular/router";
3
+import {
4
+  FormBuilder,
5
+  Validators,
6
+  FormGroup,
7
+  FormControl,
8
+} from "@angular/forms";
9
+
10
+import { MainService } from "../../services/main.service";
11
+import { OverlayScrollbarsComponent } from "overlayscrollbars-ngx";
12
+import { ToolService } from "../../services/tool.service";
13
+import { format, startOfDay, endOfDay } from "date-fns";
14
+import { NzMessageService } from "ng-zorro-antd";
15
+import { Subject } from "rxjs";
16
+import { debounceTime, filter } from "rxjs/operators";
17
+import host from "../../../assets/js/http";
18
+import { HttpRequest, HttpResponse, HttpClient } from '@angular/common/http';
19
+
20
+@Component({
21
+  selector: "app-personage-document",
22
+  templateUrl: "./personage-document.component.html",
23
+  styleUrls: ["./personage-document.component.less"],
24
+})
25
+export class PersonageDocumentComponent implements OnInit{
26
+  @ViewChild("osComponentRef1", {
27
+    read: OverlayScrollbarsComponent,
28
+    static: false,
29
+  })
30
+  osComponentRef1: OverlayScrollbarsComponent;
31
+  constructor(
32
+    private message: NzMessageService,
33
+    private fb: FormBuilder,
34
+    private route: ActivatedRoute,
35
+    private router: Router,
36
+    private mainService: MainService,
37
+    private tool: ToolService,
38
+    private http: HttpClient,
39
+  ) {}
40
+
41
+  ngOnInit() {
42
+    this.searchParentDeptSubject.pipe(debounceTime(500)).subscribe((e) => {
43
+      // this.getAllParentdepart(v).subscribe((result) => {
44
+      //   this.isLoading = false;
45
+      //   if (result.status == 200) {
46
+      //     this.allParentdepart = result.list;
47
+      //   }
48
+      // });
49
+			this.isDeptLoading = true;
50
+			this.getDeparts(e);
51
+    });
52
+		this.hosId = this.tool.getCurrentHospital().id;
53
+    this.coopBtns = this.tool.initCoopBtns(this.route);
54
+    this.initForm();
55
+    this.getAllHospital();
56
+    // this.getType();
57
+    // this.getDeptHandoverType();
58
+  }
59
+  listOfData: any[] = []; //表格数据
60
+  promptContent: string; //操作提示框提示信息
61
+  ifSuccess: boolean; //操作成功/失败
62
+  promptInfo: string; //操作结果提示信息
63
+  promptModalShow: boolean; //操作提示框是否展示
64
+  modal: boolean = false; //新增/编辑模态框
65
+  add: boolean; //true:新增;false:编辑
66
+  validateForm: FormGroup; //新增/编辑表单
67
+  coopId: number; //表格中执行操作的id
68
+  department: ""; //所属科室
69
+	hosId: number;
70
+	dateRange;//时间
71
+  batchNumber; //批次号
72
+  num; //编码
73
+  deptalias; //别名
74
+  type; //类型
75
+  deptHandoverType; //类型
76
+  pageIndex: number = 1; //页码
77
+  listLength: number = 10; //总条数
78
+  pageSize: number = 10; //每页条数
79
+  btnLoading: boolean = false; //确认按钮loading状态
80
+  printLoading: boolean = false; //批量打印按钮loading状态
81
+  deptPhones: any = []; //新添加的科室电话列表
82
+  isAddDeptsPhone = true; //添加新的科室电话是否禁用
83
+  deptsPhoneId = 1; //科室电话自增id
84
+  allParentdepart: any = []; //所有的父级科室列表
85
+  hospitals1: any = []; //科室列表(搜索)
86
+	rowData: object = {}; //打印选择列表
87
+  searchParentDeptSubject = new Subject();
88
+  // 初始化增删改按钮
89
+  coopBtns: any = {};
90
+	viewData: any = []; //科室单查看数据
91
+  // 模板导出
92
+  excelExport(){
93
+    this.maskFlag = this.message.loading("下载模板中..", {
94
+      nzDuration: 0,
95
+    }).messageId;
96
+    this.mainService.exportExcel("department", {}).subscribe(
97
+      (data) => {
98
+        this.message.remove(this.maskFlag);
99
+        this.maskFlag = false;
100
+        this.message.success('下载模板成功');
101
+        var file = new Blob([data], {
102
+          type: "application/vnd.ms-excel",
103
+        });
104
+        //trick to download store a file having its URL
105
+        var fileURL = URL.createObjectURL(file);
106
+        var a = document.createElement("a");
107
+        a.href = fileURL;
108
+        a.target = "_blank";
109
+        a.download = "科室导入模板.xls";
110
+        document.body.appendChild(a);
111
+        a.click();
112
+      },
113
+      (err) => {
114
+        this.message.remove(this.maskFlag);
115
+        this.maskFlag = false;
116
+        this.message.error('下载模板失败');
117
+      }
118
+    );
119
+  }
120
+
121
+  // 导入---start
122
+  // model-取消
123
+  isShow = false;
124
+  hideExcelImport() {
125
+    this.isShow = false;
126
+  }
127
+  // 触发
128
+  excelImport() {
129
+    this.isShow = true;
130
+  }
131
+  submitExcelImport({fileList}){
132
+    this.isShow = false;
133
+    const formData = new FormData();
134
+    fileList.forEach((file: any) => {
135
+      formData.append('file', file);
136
+    });
137
+    this.maskFlag = this.message.loading("正在导入中..", {
138
+      nzDuration: 0,
139
+    }).messageId;
140
+    const req = new HttpRequest('Post', this.mainService.returnImportExcelUrl('department'), formData, {
141
+      reportProgress: true
142
+    });
143
+    this.http
144
+      .request(req)
145
+      .pipe(filter(e => e instanceof HttpResponse))
146
+      .subscribe(
147
+        (res:any) => {
148
+          if(res.body.status == 200){
149
+            this.message.remove(this.maskFlag);
150
+            this.maskFlag = false;
151
+            this.message.success('导入成功');
152
+            this.getList();
153
+          }else{
154
+            this.message.remove(this.maskFlag);
155
+            this.maskFlag = false;
156
+            this.showPromptModal("导入", false, res.body.msg);
157
+          }
158
+        },
159
+        () => {
160
+          this.message.remove(this.maskFlag);
161
+          this.maskFlag = false;
162
+          this.message.error('导入失败');
163
+        },
164
+      );
165
+  }
166
+  // 导入---end
167
+  //搜索父级科室
168
+	isDeptLoading = false;
169
+  changeInp(e) {
170
+    this.searchParentDeptSubject.next(e);
171
+  }
172
+  // 打开父级科室下拉框baba
173
+  isLoading = false;
174
+  openDeptSelect(flag) {
175
+    if (flag) {
176
+      this.isLoading = true;
177
+      this.getAllParentdepart().subscribe((result) => {
178
+        this.isLoading = false;
179
+        if (result.status == 200) {
180
+          this.allParentdepart = result.list;
181
+        }
182
+      });
183
+    }
184
+  }
185
+  // 配送建单
186
+  coopData:any = {};
187
+  addDateModal(data) {
188
+    this.coopData = data;
189
+    this.showDelModal1();
190
+  }
191
+  delModal1: boolean = false; //删除模态框
192
+
193
+  showDelModal1() {
194
+    this.delModal1 = true;
195
+  }
196
+  hideDelModal1() {
197
+    this.delModal1 = false;
198
+  }
199
+  // 确认配送工单
200
+  confirmDel1() {
201
+    this.btnLoading = true;
202
+    this.mainService
203
+      .transfusionBuildOrder({
204
+				drugsListId:this.coopData.id
205
+			})
206
+      .subscribe((data) => {
207
+        this.btnLoading = false;
208
+        this.delModal1 = false;
209
+        if (data.status == 200) {
210
+          this.showPromptModal('操作', true, "");
211
+        } else {
212
+          this.showPromptModal('操作', false, data.msg);
213
+        }
214
+      });
215
+  }
216
+  //获取所有的父级科室列表
217
+  getAllParentdepart(keyWord = "") {
218
+    let postData: any = {
219
+      idx: 0,
220
+      sum: 10,
221
+      department: {
222
+        // hospital: { id: this.add ? this.tool.getCurrentHospital().id : this.hospital },
223
+        keyWord: keyWord,
224
+      },
225
+    };
226
+    if (this.coopItem) {
227
+      // 过滤这个科室及其子科室
228
+      postData.department.filterByDeptId = this.coopItem.id;
229
+    }
230
+    return this.mainService.getFetchDataList("data", "department", postData);
231
+  }
232
+  // 新添加科室号码
233
+  addDeptPhone(e: MouseEvent) {
234
+    e.preventDefault();
235
+    this.deptPhones.push({ id: ++this.deptsPhoneId, phone: "" });
236
+    this.deptsPhoneChange();
237
+  }
238
+  // 删除新添加科室号码
239
+  removeDeptPhone(index: number, e: MouseEvent) {
240
+    e.preventDefault();
241
+    this.deptPhones.splice(index, 1);
242
+    this.deptsPhoneChange();
243
+  }
244
+  //监听科室电话输入事件
245
+  deptsPhoneChange(e?, phone?) {
246
+    if (e !== undefined && phone !== undefined) {
247
+      phone.phone = e;
248
+    }
249
+    // -------------判断添加按钮是否禁用 start
250
+    this.isAddDeptsPhone = !this.validateForm.value.officeNum;
251
+    if (!this.isAddDeptsPhone) {
252
+      //如果没禁用
253
+      this.isAddDeptsPhone = this.deptPhones.some((item) => item.phone === "");
254
+    }
255
+    // -------------判断添加按钮是否禁用 end
256
+  }
257
+
258
+  // 搜索
259
+  search() {
260
+    this.pageIndex = 1;
261
+    this.getList();
262
+  }
263
+  // 重置
264
+  reset() {
265
+    this.pageIndex = 1;
266
+    this.department = null;
267
+    this.batchNumber = "";
268
+		this.dateRange = [];
269
+		this.startDate = "";
270
+		this.endDate = "";
271
+    this.getList();
272
+  }
273
+  // 表格数据
274
+  loading1 = false;
275
+  getList() {
276
+    var that = this;
277
+    let data = {
278
+      idx: that.pageIndex - 1,
279
+      sum: that.pageSize,
280
+      drugsList: {
281
+        applyDept: that.department,
282
+				batch:{
283
+					batchNo:that.batchNumber
284
+				},
285
+        startTime: this.startDate,
286
+				endTime: this.endDate,
287
+				hosId: this.hosId
288
+      },
289
+    };
290
+		if(that.department){
291
+			data.drugsList.applyDept = that.department
292
+		}else{
293
+			delete data.drugsList.applyDept
294
+		}
295
+		if(that.batchNumber){
296
+			data.drugsList.batch.batchNo = that.batchNumber
297
+		}else{
298
+			delete data.drugsList.batch
299
+		}
300
+    this.loading1 = true;
301
+    that.mainService
302
+      .getFetchDataList("data", "drugsList", data)
303
+      .subscribe((data) => {
304
+        this.loading1 = false;
305
+        that.listOfData = data.list;
306
+        that.listLength = data.totalNum;
307
+      });
308
+  }
309
+
310
+	// 日期选择
311
+	startDate: string; //发起时间开始
312
+	endDate: string; //发起时间结束
313
+	changeDate(result?): void {
314
+	  if (!result) {
315
+	    this.startDate = this.endDate = "";
316
+	    return;
317
+	  }
318
+	  this.startDate = format(startOfDay(result[0]), 'yyyy-MM-dd HH:mm:ss');
319
+	  this.endDate = format(endOfDay(result[1]), 'yyyy-MM-dd HH:mm:ss');
320
+	}
321
+
322
+	// 获取所有科室
323
+  // snum = 0;
324
+  getDeparts(dept) {
325
+    var that = this;
326
+    let data:any = {
327
+      department: {
328
+        dept,
329
+        hosIds: this.hosId,
330
+      },
331
+      idx: 0,
332
+      sum: 20,
333
+    };
334
+		if(this.isParentData==1){
335
+			if(this.tool.getCurrentUserInfo().currentHospital &&
336
+			this.tool.getCurrentUserInfo().currentHospital.parent){
337
+				data.department.hosIds = this.hosId +','+this.tool.getCurrentUserInfo().currentHospital.parent.id
338
+			}else{
339
+				data.department.hosIds = this.hosId
340
+			}
341
+		}
342
+    that.mainService
343
+		.getFetchDataList("data", "department", data)
344
+		.subscribe((data) => {
345
+			setTimeout(_=>{
346
+				this.isDeptLoading = false
347
+				this.hospitals1 = data.list
348
+			},500)
349
+		});
350
+  }
351
+
352
+  // 获取所有院区
353
+	isParentData:any = null;
354
+  getAllHospital() {
355
+		this.mainService.getDictionary("list", "ordinary_field").subscribe((data) => {
356
+			let taskTypeData = data.find(i=>i.value=='infusionSolutions')
357
+			let postData = {
358
+			  idx: 0,
359
+			  sum: 10,
360
+			  taskTypeConfig: {
361
+					hosId:this.hosId,
362
+					taskType:taskTypeData.id
363
+			  }
364
+			};
365
+			this.mainService
366
+			  .getFetchDataList("simple/data", "taskTypeConfig", postData)
367
+			  .subscribe((result) => {
368
+			    if (result.status == 200) {
369
+						let data = result.list[0] || {};
370
+						this.isParentData = data.quoteParentData;
371
+						this.getDeparts('')
372
+						this.getList();
373
+			    }
374
+			  });
375
+		});
376
+  }
377
+
378
+  // 切换院区选项
379
+  buildings: any = []; //楼栋
380
+  maskFlag: any = false;
381
+  changeHosp(obj?) {
382
+    let hospitalId;
383
+    if (obj) {
384
+      hospitalId = obj.hospital.id;
385
+    }
386
+    let hid;
387
+    if (hospitalId || hospitalId == 0) {
388
+      hid = hospitalId - 0;
389
+    }
390
+		// else {
391
+  //     hid = this.hospital - 0;
392
+  //   }
393
+    let data = {
394
+      // hosId: this.add ? this.tool.getCurrentHospital().id : hid,
395
+    };
396
+    this.maskFlag = this.message.loading("正在加载中..", {
397
+      nzDuration: 0,
398
+    }).messageId;
399
+    this.mainService
400
+      .coopData("getBuildingOrFloor", "building", data)
401
+      .subscribe((data) => {
402
+        this.buildings = data.data;
403
+        this.floors = [];
404
+        // ---------
405
+        if (obj) {
406
+          //编辑
407
+          let arr = this.buildings.map((item) => item.id);
408
+          if (obj.building.id && arr.includes(obj.building.id)) {
409
+            //有楼栋
410
+            this.changeBuilding(obj.building.id, obj);
411
+            this.validateForm.controls.building.setValue(obj.building.id + "");
412
+          } else {
413
+            //无楼栋
414
+            this.floors = [];
415
+            this.message.remove(this.maskFlag);
416
+            this.maskFlag = false;
417
+            this.modal = true;
418
+            this.validateForm.controls.building.setValue(null);
419
+            this.validateForm.controls.officeAddress.setValue(null);
420
+          }
421
+        } else {
422
+          //新增
423
+          this.message.remove(this.maskFlag);
424
+          this.maskFlag = false;
425
+          this.modal = true;
426
+        }
427
+        // ---------
428
+      });
429
+  }
430
+
431
+  // 切换楼栋信息
432
+  floors: Array<any> = []; //楼层
433
+  floorLoading: boolean = false;
434
+  changeBuilding(buildingId?, obj?) {
435
+    var that = this;
436
+    that.floors = [];
437
+    var bid;
438
+    if (buildingId || buildingId == 0) {
439
+      bid = buildingId - 0;
440
+    } else if (!that.add && that.validateForm.value.building) {
441
+      bid = that.validateForm.value.building - 0;
442
+    } else {
443
+      return;
444
+    }
445
+    let data = {
446
+      buildingId: bid,
447
+    };
448
+    this.floorLoading = true;
449
+    that.mainService
450
+      .coopData("getBuildingOrFloor", "floor", data)
451
+      .subscribe((data) => {
452
+        this.floorLoading = false;
453
+        this.message.remove(this.maskFlag);
454
+        this.maskFlag = false;
455
+        this.modal = true;
456
+        that.floors = data.data;
457
+        if (obj) {
458
+          let floorId = obj.floor.id;
459
+          let arr = that.floors.map((item) => item["id"]);
460
+          if (floorId && arr.includes(floorId)) {
461
+            this.validateForm.controls.floor.setValue(floorId + "");
462
+          } else {
463
+            this.validateForm.controls.floor.setValue(null);
464
+            this.validateForm.controls.officeAddress.setValue(null);
465
+          }
466
+        }
467
+      });
468
+  }
469
+
470
+  // 获取科室类型
471
+  types: Array<any> = [];
472
+  getType() {
473
+    var that = this;
474
+    that.mainService.getDictionary("list", "dept_type").subscribe((data) => {
475
+      console.log(data);
476
+      that.types = data;
477
+    });
478
+  }
479
+
480
+  // 获取科室汇总交接类型
481
+  deptHandoverTypes: Array<any> = [];
482
+  getDeptHandoverType() {
483
+    var that = this;
484
+    that.mainService.getDictionary("list", "dept_handover_type").subscribe((data) => {
485
+      console.log(data);
486
+      that.deptHandoverTypes = data;
487
+    });
488
+  }
489
+
490
+  // 新增弹框
491
+  showModal() {
492
+    this.initForm();
493
+    // this.changeHosp();
494
+    this.add = true;
495
+    this.isAddDeptsPhone = true;
496
+    this.deptPhones = [];
497
+  }
498
+  hideModal() {
499
+    this.coopItem = null;
500
+    this.modal = false;
501
+    this.initForm();
502
+  }
503
+  // 初始化新增form表单
504
+  initForm() {
505
+    this.endTime1Hourdis = () => [];
506
+    this.endTime1Mindis = () => [];
507
+    this.endTime2Hourdis = () => [];
508
+    this.endTime2Mindis = () => [];
509
+    this.startTime1Hourdis = () => [];
510
+    this.startTime1Mindis = () => [];
511
+    this.startTime2Hourdis = () => [];
512
+    this.startTime2Mindis = () => [];
513
+    this.validateForm = this.fb.group({
514
+      parentOfficeName: [null],
515
+      officeName: [null, [Validators.required]],
516
+      deptalias: [null],
517
+      officeNo: [null, [Validators.required]],
518
+      officeNum: [null, [Validators.required]],
519
+      building: [null, [Validators.required]],
520
+      floor: [null, [Validators.required]],
521
+      officeAddress: [null, [Validators.required]],
522
+      officeType: [null, [Validators.required]],
523
+      deptHandoverType: [null],
524
+      startTime1: [null],
525
+      endTime1: [null],
526
+      dynamicCode1: [null],
527
+      startTime2: [null],
528
+      endTime2: [null],
529
+      dynamicCode2: [null],
530
+    });
531
+  }
532
+  // 科室位置必填
533
+  buildValidator = (control: FormControl): { [s: string]: boolean } => {
534
+    if (
535
+      this.validateForm &&
536
+      this.validateForm.value &&
537
+      (!this.validateForm.value.building ||
538
+        !this.validateForm.value.floor ||
539
+        !this.validateForm.value.officeAddress)
540
+    ) {
541
+      return { required: true };
542
+    }
543
+  };
544
+  /**
545
+   * 生成一个从 start 到 end 的连续数组
546
+   * @param start
547
+   * @param end
548
+   */
549
+  generateArray(start, end) {
550
+    return Array.from(new Array(end).keys()).slice(start);
551
+  }
552
+
553
+  //服务时间选择
554
+  // 禁用的小时
555
+  startTime1Hourdis() {
556
+    return [];
557
+  }
558
+  endTime1Hourdis() {
559
+    return [];
560
+  }
561
+  startTime2Hourdis() {
562
+    return [];
563
+  }
564
+  endTime2Hourdis() {
565
+    return [];
566
+  }
567
+  // 禁用的分钟
568
+  startTime1Mindis() {
569
+    return [];
570
+  }
571
+  endTime1Mindis() {
572
+    return [];
573
+  }
574
+  startTime2Mindis() {
575
+    return [];
576
+  }
577
+  endTime2Mindis() {
578
+    return [];
579
+  }
580
+  timeChange(e: boolean, type: string, num: number) {
581
+    if (!e && this.validateForm.value[type + num]) {
582
+      let hour = new Date(this.validateForm.value[type + num]).getHours();
583
+      let minute = new Date(this.validateForm.value[type + num]).getMinutes();
584
+      if (type == "startTime" && num === 1) {
585
+        this.endTime1Hourdis = () => this.generateArray(0, hour);
586
+        this.endTime1Mindis = () => this.generateArray(0, minute + 1);
587
+      } else if (type == "startTime" && num === 2) {
588
+        this.endTime2Hourdis = () => this.generateArray(0, hour);
589
+        this.endTime2Mindis = () => this.generateArray(0, minute + 1);
590
+      } else if (type == "endTime" && num === 1) {
591
+        this.startTime1Hourdis = () => this.generateArray(hour + 1, 24);
592
+        this.startTime1Mindis = () => this.generateArray(minute, 60);
593
+      } else if (type == "endTime" && num === 2) {
594
+        this.startTime2Hourdis = () => this.generateArray(hour + 1, 24);
595
+        this.startTime2Mindis = () => this.generateArray(minute, 60);
596
+      }
597
+    }
598
+  }
599
+  // 表单提交
600
+  submitForm(): void {
601
+    var that = this;
602
+    for (const i in that.validateForm.controls) {
603
+      that.validateForm.controls[i].markAsDirty();
604
+      that.validateForm.controls[i].updateValueAndValidity();
605
+    }
606
+    console.log(that.validateForm);
607
+    if (that.validateForm.invalid) return;
608
+    let deptsPhone = this.deptPhones.map((item) => item.phone).join();
609
+    let data: any = {
610
+      department: {
611
+        dept: that.validateForm.value.officeName,
612
+        deptalias: that.validateForm.value.deptalias,
613
+        // hospital: { id: that.add ? that.tool.getCurrentHospital().id : that.hospital },
614
+        pcode: that.validateForm.value.officeNo,
615
+        manyPhone: deptsPhone
616
+          ? that.validateForm.value.officeNum + "," + deptsPhone
617
+          : that.validateForm.value.officeNum,
618
+        building: { id: that.validateForm.value.building - 0 },
619
+        floor: { id: that.validateForm.value.floor - 0 },
620
+        address: that.validateForm.value.officeAddress,
621
+        type: { id: that.validateForm.value.officeType },
622
+        deptHandoverType: { id: that.validateForm.value.deptHandoverType },
623
+      },
624
+    };
625
+    if (this.validateForm.value.parentOfficeName) {
626
+      data.department.parent = { id: this.validateForm.value.parentOfficeName };
627
+    }
628
+    if (
629
+      this.validateForm.value.startTime1 ||
630
+      this.validateForm.value.endTime1
631
+    ) {
632
+      if (
633
+        this.validateForm.value.startTime1 &&
634
+        this.validateForm.value.endTime1
635
+      ) {
636
+        data.department["startTime1"] = format(
637
+          this.validateForm.value.startTime1,
638
+          "yyyy-MM-dd HH:mm:ss"
639
+        );
640
+        data.department["endTime1"] = format(
641
+          this.validateForm.value.endTime1,
642
+          "yyyy-MM-dd HH:mm:ss"
643
+        );
644
+        data.department["dynamicCode1"] = this.validateForm.value.dynamicCode1 ? 1 : 0;
645
+      } else {
646
+        return;
647
+      }
648
+    }
649
+    if (
650
+      this.validateForm.value.startTime2 ||
651
+      this.validateForm.value.endTime2
652
+    ) {
653
+      if (
654
+        this.validateForm.value.startTime2 &&
655
+        this.validateForm.value.endTime2
656
+      ) {
657
+        data.department["startTime2"] = format(
658
+          this.validateForm.value.startTime2,
659
+          "yyyy-MM-dd HH:mm:ss"
660
+        );
661
+        data.department["endTime2"] = format(
662
+          this.validateForm.value.endTime2,
663
+          "yyyy-MM-dd HH:mm:ss"
664
+        );
665
+        data.department["dynamicCode2"] = this.validateForm.value.dynamicCode2 ? 1 : 0;
666
+      } else {
667
+        return;
668
+      }
669
+    }
670
+    if (!that.add) {
671
+      data.department["id"] = that.coopId;
672
+    }
673
+    that.btnLoading = true;
674
+    that.mainService
675
+      .coopData(that.add ? "addData" : "updData", "department", data)
676
+      .subscribe((data) => {
677
+        that.btnLoading = false;
678
+        that.hideModal();
679
+        that.initForm();
680
+        if (data.status == 200) {
681
+          that.showPromptModal(that.add ? "新增" : "编辑", true, "");
682
+        } else {
683
+          that.showPromptModal(that.add ? "新增" : "编辑", false, data.msg);
684
+        }
685
+      });
686
+  }
687
+
688
+  // 编辑
689
+  coopItem: any = null;
690
+  edit(e, data) {
691
+    e.stopPropagation();
692
+    this.add = false;
693
+    this.coopId = data.id;
694
+    this.coopItem = data;
695
+    this.isAddDeptsPhone = false;
696
+    this.deptPhones = [];
697
+    let phones = data.manyPhone ? data.manyPhone.split(",") : [];
698
+    if (phones.length === 0) {
699
+      this.validateForm.controls.officeNum.setValue("");
700
+      this.deptPhones = [];
701
+    } else if (phones.length === 1) {
702
+      this.validateForm.controls.officeNum.setValue(phones[0]);
703
+      this.deptPhones = [];
704
+    } else {
705
+      this.validateForm.controls.officeNum.setValue(phones[0]);
706
+      this.deptPhones = phones.slice(1).map((item) => {
707
+        return {
708
+          id: ++this.deptsPhoneId,
709
+          phone: item,
710
+        };
711
+      });
712
+    }
713
+    if (data.startTime1 && data.endTime1) {
714
+      this.validateForm.controls.startTime1.setValue(new Date(data.startTime1));
715
+      this.validateForm.controls.endTime1.setValue(new Date(data.endTime1));
716
+      this.validateForm.controls.dynamicCode1.setValue(data.dynamicCode1 == 1);
717
+    }
718
+    if (data.startTime2 && data.endTime2) {
719
+      this.validateForm.controls.startTime2.setValue(new Date(data.startTime2));
720
+      this.validateForm.controls.endTime2.setValue(new Date(data.endTime2));
721
+      this.validateForm.controls.dynamicCode2.setValue(data.dynamicCode2 == 1);
722
+    }
723
+    this.validateForm.controls.officeAddress.setValue(data.address);
724
+    if (data.parent) {
725
+      this.getAllParentdepart(data.parent.dept).subscribe((res) => {
726
+        if (res.status == 200) {
727
+          this.allParentdepart = res.list;
728
+          this.validateForm.controls.parentOfficeName.setValue(data.parent.id);
729
+        }
730
+      });
731
+    }
732
+    this.validateForm.controls.officeName.setValue(data.dept);
733
+    this.validateForm.controls.deptalias.setValue(data.deptalias);
734
+    this.validateForm.controls.officeNo.setValue(data.pcode);
735
+    this.validateForm.controls.officeType.setValue(data.type.id + "");
736
+    this.validateForm.controls.deptHandoverType.setValue(data.deptHandoverType ? data.deptHandoverType.id + "" : null);
737
+    // this.changeHosp(data);
738
+    this.validateForm.controls.officeAddress.setValue(data.address);
739
+  }
740
+
741
+  // 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
742
+  showPromptModal(con, success, promptInfo?) {
743
+    this.promptModalShow = false;
744
+    this.promptContent = con;
745
+    this.ifSuccess = success;
746
+    this.promptInfo = promptInfo;
747
+    setTimeout(() => {
748
+      this.promptModalShow = true;
749
+    }, 100);
750
+    this.getList();
751
+  }
752
+
753
+  delModal: boolean = false; //删除模态框
754
+  coopIds: any;
755
+  coopFlag: any = false;
756
+  /**
757
+   *
758
+   * @param e 事件对象
759
+   * @param flag true是批量删除,false是单个删除
760
+   * @param id
761
+   */
762
+  showDelModal(e, flag, id) {
763
+    e.stopPropagation();
764
+    this.delModal = true;
765
+    this.coopFlag = flag;
766
+    if (flag) {
767
+      this.coopIds = id;
768
+    } else {
769
+      this.coopId = id;
770
+    }
771
+  }
772
+  hideDelModal() {
773
+    this.delModal = false;
774
+  }
775
+  // 确认删除
776
+  confirmDel() {
777
+    var that = this;
778
+    that.btnLoading = true;
779
+    that.mainService
780
+      .coopData(
781
+        "rmvData",
782
+        "department",
783
+        this.coopFlag ? this.coopIds : [that.coopId]
784
+      )
785
+      .subscribe((data) => {
786
+        that.btnLoading = false;
787
+        that.delModal = false;
788
+        if (data.data && data.data[0]) {
789
+          if (!data.data[0].msg) {
790
+            if (
791
+              that.listOfData.length == 1 &&
792
+              that.pageIndex == Math.ceil(that.listLength / that.pageSize)
793
+            ) {
794
+              that.listLength--;
795
+              that.pageIndex = Math.ceil(that.listLength / that.pageSize) || 1;
796
+            }
797
+            that.showPromptModal("删除", true, "");
798
+          } else {
799
+            that.showPromptModal("删除", false, data.data[0].msg);
800
+          }
801
+        } else {
802
+          that.showPromptModal("删除", false, "");
803
+        }
804
+      });
805
+  }
806
+
807
+  // 查看
808
+  detail(e, id) {
809
+    e.stopPropagation();
810
+		var that = this;
811
+		let data = {
812
+			idx: 0,
813
+			sum: 9999,
814
+			drugsConfigure: {
815
+			  hosId: this.hosId,
816
+			  drugListId: id
817
+			}
818
+		};
819
+		this.loading1 = true;
820
+		that.mainService
821
+		  .getFetchDataList("data", "drugsConfigure", data)
822
+		  .subscribe((data) => {
823
+		    this.loading1 = false;
824
+				this.modal = true
825
+		    that.viewData = data.list;
826
+		    // that.listLength = data.totalNum;
827
+		  });
828
+  }
829
+
830
+  // 选中表格中科室
831
+  mapOfCheckedId: { [key: string]: boolean } = {};
832
+  checkedDepIds = []; //已选中科室id
833
+  refreshStatus(): void {
834
+    this.isAllDisplayDataChecked = this.listOfData.every(
835
+      (item) => this.mapOfCheckedId[item.id]
836
+    );
837
+    let arr = [];
838
+    for (var k in this.mapOfCheckedId) {
839
+      if (this.mapOfCheckedId[k]) {
840
+        arr.push(Number(k));
841
+      }
842
+    }
843
+    this.checkedDepIds = arr;
844
+    console.log(this.checkedDepIds);
845
+  }
846
+  //表格整行选中
847
+  selectedListData(id) {
848
+    this.mapOfCheckedId[id] = !this.mapOfCheckedId[id];
849
+    this.refreshStatus();
850
+  }
851
+  // 全选
852
+  isAllDisplayDataChecked = false; //当前页是否全选
853
+  checkAll(value: boolean): void {
854
+    this.listOfData.forEach((item) => (this.mapOfCheckedId[item.id] = value));
855
+    this.refreshStatus();
856
+  }
857
+
858
+  // 打印
859
+  codes = []; //二维码
860
+  print(e, data, id) {
861
+		this.rowData = data
862
+    e.stopPropagation();
863
+    let that = this;
864
+    that.printLoading = true;
865
+    that.mainService
866
+      .transfusionPrint("drugsList", id)
867
+      .subscribe((res) => {
868
+				let arr = res.data.drugsConfigureDTOS;
869
+				for(let i of arr){
870
+					i.deptName = res.data.pharmacyDTO?res.data.pharmacyDTO.dept:'-'
871
+				}
872
+				arr.push({
873
+					drugsInfoDTO:{
874
+						drugName:'合计',
875
+						specs:'',
876
+					},
877
+					expendCount:res.data.totalExpendCount,
878
+					addSub:res.data.totalAddSub,
879
+					deptName:'',
880
+					cartonActual:res.data.cartonActual
881
+				})
882
+        that.codes = arr
883
+        that.printLoading = false;
884
+        setTimeout(() => {
885
+          const printContent = document.getElementById("report");
886
+          const WindowPrt = window.open("", "", "width=1000,height=900");
887
+          WindowPrt.document.write(printContent.innerHTML);
888
+          WindowPrt.document.close();
889
+          WindowPrt.focus();
890
+          WindowPrt.print();
891
+          WindowPrt.close();
892
+        }, 500);
893
+      });
894
+  }
895
+}

+ 19 - 0
src/app/views/personage-document/personage-document.module.ts

@@ -0,0 +1,19 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { PersonageDocumentRoutingModule } from './personage-document-routing.module';
5
+import { PersonageDocumentComponent } from './personage-document.component';
6
+import { ShareModule } from 'src/app/share/share.module';
7
+
8
+
9
+@NgModule({
10
+  declarations: [
11
+    PersonageDocumentComponent,
12
+  ],
13
+  imports: [
14
+    CommonModule,
15
+    PersonageDocumentRoutingModule,
16
+    ShareModule
17
+  ]
18
+})
19
+export class PersonageDocumentModule { }

+ 6 - 6
src/app/views/specimen-search/specimen-search.component.ts

@@ -38,12 +38,12 @@ export class SpecimenSearchComponent implements OnInit {
38 38
   changeInpSubject = new Subject();
39 39
   changeInp2Subject = new Subject();
40 40
   ngOnInit() {
41
-		this.searchCriteria.dateRange = [
42
-			format(subDays(new Date(), 7), "yyyy-MM-dd") + ' ' +'00:00:00',
43
-			format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss")
44
-		]
45
-		this.startDate = format(subDays(new Date(), 7), "yyyy-MM-dd") + ' ' +'00:00:00';
46
-		this.endDate = format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
41
+		// this.searchCriteria.dateRange = [
42
+		// 	format(subDays(new Date(), 7), "yyyy-MM-dd") + ' ' +'00:00:00',
43
+		// 	format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss")
44
+		// ]
45
+		// this.startDate = format(subDays(new Date(), 7), "yyyy-MM-dd") + ' ' +'00:00:00';
46
+		// this.endDate = format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
47 47
     this.changeInpSubject.pipe(debounceTime(500)).subscribe((v) => {
48 48
       this.searchDepartment(v[0], v[1]);
49 49
     });

+ 1 - 1
src/app/views/users-management/users-management.component.html

@@ -118,7 +118,7 @@
118 118
             <nz-input-group>
119 119
               <input type="name" nz-input formControlName="name" placeholder="请填写姓名" />
120 120
             </nz-input-group>
121
-          </nz-form-control>
121
+          </nz-form-contr(ngModelChange)ol>
122 122
         </nz-form-item>
123 123
         <nz-form-item>
124 124
           <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="account">用户名</nz-form-label>

+ 25 - 0
src/app/views/web-repairs/web-repairs-routing.module.ts

@@ -0,0 +1,25 @@
1
+import { NgModule } from "@angular/core";
2
+import { Routes, RouterModule } from "@angular/router";
3
+import { WebRepairsComponent } from "./web-repairs.component";
4
+import { DetailSampleComponent } from 'src/app/share/detail-sample/detail-sample.component';
5
+import { DetailBxComponent } from 'src/app/share/detail-bx/detail-bx.component';
6
+
7
+const routes: Routes = [
8
+  {
9
+    path: "",
10
+    component: WebRepairsComponent,
11
+		children: [
12
+		  {
13
+		    // 报修详情
14
+		    path: 'detailBx/:id',
15
+		    component: DetailBxComponent
16
+		  },
17
+		]
18
+  },
19
+];
20
+
21
+@NgModule({
22
+  imports: [RouterModule.forChild(routes)],
23
+  exports: [RouterModule],
24
+})
25
+export class WebRepairsRoutingModule {}

+ 422 - 0
src/app/views/web-repairs/web-repairs.component.html

@@ -0,0 +1,422 @@
1
+<div class="pharmacy">
2
+  <!-- 头部 start -->
3
+  <div class="pharmacy-header">
4
+   <div class="pharmacy-logo">
5
+			<div class="pharmacy-name__title">一站式服务管理平台</div>
6
+    </div>
7
+    <div class="pharmacy-name">
8
+			<div class="pharmacy-title">个人报修</div>
9
+			<div class="pharmacy-btn">
10
+				<button class="btn default" (click)='speediness()'>快速报修</button>
11
+			</div>
12
+    </div>
13
+    <div class="right">
14
+      <div class="userInfo dropdown">
15
+        <div class="user" (mouseenter)="showDropdown = true" (mouseleave)="showDropdown = false">
16
+          <img src="../../assets/images/icon_keshi.png" alt="">
17
+          <span><ng-container *ngIf="loginUser.dept">{{deptDisplay == 2 ? loginUser.dept.deptalias : loginUser.dept.dept}}-</ng-container>{{loginUser.name}}</span>
18
+          <i class="icon_transport transport-xiala1 ml8"></i>
19
+        </div>
20
+        <div class="dropdown-content r8" [hidden]="!showDropdown" (mouseenter)="showDropdown = true" (mouseleave)="showDropdown = false">
21
+          <div class="dropdownItem" (click)="etitPasswrod()">修改密码</div>
22
+					<div class="dropdownItem" (click)="editInfo()">修改个人信息</div>
23
+          <div class="dropdownItem" (click)="logOut()">退出</div>
24
+        </div>
25
+      </div>
26
+    </div>
27
+  </div>
28
+  <!-- 头部 end -->
29
+  <div class="pharmacy-main">
30
+    <div class="list-template pharmacy-main__list pharmacy-main__print">
31
+			<div class="list-template__content">
32
+			  <div class="list-template__top" nz-row>
33
+			    <div nz-col nzLg='18' class="list-template__searchBox">
34
+			      <div class="list-template__searchItem">
35
+			        <span class="label width-108">报修时间区间:</span>
36
+			        <nz-range-picker [(ngModel)]="acceptTime" nzFormat="yyyy-MM-dd HH:mm:ss"
37
+							(ngModelChange)="changeDate($event)"></nz-range-picker>
38
+			      </div>
39
+						<div class="list-template__searchItem">
40
+						  <span class="label">状态:</span>
41
+							<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择状态"
42
+							  [(ngModel)]="status">
43
+							  <ng-container *ngFor="let option of statusData">
44
+							    <nz-option [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
45
+							  </ng-container>
46
+							</nz-select>
47
+						</div>
48
+						<div class="list-template__searchItem">
49
+						  <span class="label">单号:</span>
50
+							<input type="text" class="search-input" [(ngModel)]="incidentsign" nz-input placeholder="请输入患者" />
51
+						</div>
52
+			    </div>
53
+			    <div nz-col nzLg="6" class="list-template__btns">
54
+			      <button class="btn default" (click)='search()'>搜索</button>
55
+			      <button class="btn default ml8" (click)='reset()'>重置</button>
56
+			    </div>
57
+			  </div>
58
+			  <div class="list-template__bottom">
59
+			    <nz-table class="list-template__nzTable" [nzData]="listOneData" nzSize="middle" [nzShowPagination]="false"
60
+			      [nzLoading]="loading1">
61
+			      <thead>
62
+			        <tr class="thead">
63
+								<th nzWidth="80px">序号</th>
64
+			          <th>工单号</th>
65
+								<th>报修内容</th>
66
+			          <th>报修时间</th>
67
+			          <th>状态</th>
68
+			          <th>维修人</th>
69
+								<th>维修人电话</th>
70
+								<th>维修费用</th>
71
+			          <th nzWidth="150px">操作</th>
72
+			        </tr>
73
+			      </thead>
74
+			      <tbody>
75
+			        <tr *ngFor="let data of listOneData let index = index;">
76
+								<td>{{ index+(pageOneIndex-1) * pageSize + 1 }}</td>
77
+			          <td>{{ data.incidentsign}}</td>
78
+			          <td>{{ data.description}}</td>
79
+			          <td>{{ data.startDate | date: "yyyy-MM-dd HH:mm" }}</td>
80
+			          <td>{{ data.state?data.state.name:'无' }}</td>
81
+								<td>{{ data.handlingPersonnelUser ? data.handlingPersonnelUser.name : "无"}}</td>
82
+								<td>{{ data.handlingPersonnelUser ? data.handlingPersonnelUser.phone : "无"  }}</td>
83
+								<td>{{ data.rsPrice?data.rsPrice : '-' }}</td>
84
+			          <td>
85
+			            <div class="coop">
86
+										<span (click)="delBx(data)">撤销</span>
87
+										<span (click)="detailBx(data)">查看</span>
88
+			            </div>
89
+			          </td>
90
+			        </tr>
91
+			      </tbody>
92
+			    </nz-table>
93
+			    <div class="list-template__pagination">
94
+			      <nz-pagination [(nzPageIndex)]="pageOneIndex" [(nzTotal)]="listOneLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
95
+			        (nzPageIndexChange)="getConnectList()" (nzPageSizeChange)="getConnectList()">
96
+			      </nz-pagination>
97
+			    </div>
98
+			  </div>
99
+			</div>
100
+    </div>
101
+  </div>
102
+</div>
103
+
104
+<!-- 修改密码 -->
105
+<nz-modal [(nzVisible)]="isPwdVisible" nzTitle="修改密码" (nzOnCancel)="pwdHandleCancel()" (nzOnOk)="pwdHandleOk()" [nzOkLoading]="pwdIsOkLoading" (nzAfterOpen)="pwdAfterOpen()">
106
+  <div>
107
+    <label>
108
+      原始密码:
109
+      <nz-input-group [nzSuffix]="suffixTemplate">
110
+        <input minlength="9" [type]="passwordVisible ? 'text' : 'password'" nz-input placeholder="原始密码" [(ngModel)]="upModalData.pwdOld" />
111
+      </nz-input-group>
112
+      <ng-template #suffixTemplate>
113
+        <i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'" (click)="passwordVisible = !passwordVisible"></i>
114
+      </ng-template>
115
+    </label>
116
+    <label>新密码:
117
+      <div style="display: flex;">
118
+        <nz-input-group [nzSuffix]="suffixTemplate">
119
+          <input minlength="9" [type]="passwordVisible ? 'text' : 'password'" nz-input placeholder="新密码" [(ngModel)]="upModalData.newPwd" (ngModelChange)="blurNewPwd()" />
120
+        </nz-input-group>
121
+        <ng-template #suffixTemplate>
122
+          <i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'" (click)="passwordVisible = !passwordVisible"></i>
123
+        </ng-template>
124
+        <div class="red" style="display: flex;justify-content: center;align-items: center;padding-left: 5px;" *ngIf="enoughRegFlag">弱</div>
125
+        <div style="display: flex;justify-content: center;align-items: center;padding-left: 5px;" *ngIf="mediumRegFlag">中</div>
126
+        <div class="green" style="display: flex;justify-content: center;align-items: center;padding-left: 5px;" *ngIf="strongRegFlag">强</div>
127
+      </div>
128
+    </label>
129
+    <div class="red">强密码需包含大小写字母、数字、特殊字符,长度至少9个字符</div>
130
+    <label>确认新密码:
131
+      <nz-input-group [nzSuffix]="suffixTemplate">
132
+        <input minlength="9" [type]="passwordVisible ? 'text' : 'password'" nz-input placeholder="确认新密码" [(ngModel)]="upModalData.newPwd2" />
133
+      </nz-input-group>
134
+      <ng-template #suffixTemplate>
135
+        <i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'" (click)="passwordVisible = !passwordVisible"></i>
136
+      </ng-template>
137
+    </label>
138
+  </div>
139
+</nz-modal>
140
+
141
+<!-- 修改个人信息 -->
142
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="infoModal">
143
+  <div class="modalBody">
144
+    <div class="title">修改个人信息<i class="icon_transport transport-guanbi" (click)="hideModal()"></i>
145
+    </div>
146
+    <overlay-scrollbars #osComponentRef1 class="content">
147
+      <form nz-form [formGroup]="validateForm" class="addForm" (ngSubmit)="submitForm()">
148
+        <nz-form-item>
149
+          <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="name">姓名</nz-form-label>
150
+          <nz-form-control nzErrorTip="请填写姓名!">
151
+            <nz-input-group>
152
+              <input type="name" nz-input formControlName="name" placeholder="请填写姓名" />
153
+            </nz-input-group>
154
+          </nz-form-control>
155
+        </nz-form-item>
156
+        <nz-form-item>
157
+          <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="account">工号</nz-form-label>
158
+          <nz-form-control nzErrorTip="请填写工号!">
159
+            <nz-input-group>
160
+              <input type="account" nz-input formControlName="account" placeholder="请填写工号" />
161
+            </nz-input-group>
162
+          </nz-form-control>
163
+        </nz-form-item>
164
+
165
+				<nz-form-item>
166
+				  <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="buildingId">楼栋</nz-form-label>
167
+				  <nz-form-control nzErrorTip="请选择楼栋!">
168
+						<nz-select [nzDropdownMatchSelectWidth]="false" type="buildingId" nzAllowClear
169
+						  formControlName="buildingId" nzPlaceHolder="请选择楼栋" (ngModelChange)="buildingChange($event)">
170
+						  <nz-option nzLabel="{{data.buildingName}}" nzValue="{{data.id}}" *ngFor="let data of buildingList">
171
+						  </nz-option>
172
+						</nz-select>
173
+				  </nz-form-control>
174
+				</nz-form-item>
175
+				
176
+				<nz-form-item>
177
+				  <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="floorId">楼层</nz-form-label>
178
+				  <nz-form-control nzErrorTip="请选择楼层!">
179
+				    <nz-select [nzDropdownMatchSelectWidth]="false" type="floorId" nzAllowClear
180
+				      formControlName="floorId" nzPlaceHolder="请选择楼层">
181
+				      <nz-option nzLabel="{{data.floorName}}" nzValue="{{data.id}}" *ngFor="let data of allFloorList">
182
+				      </nz-option>
183
+				    </nz-select>
184
+				  </nz-form-control>
185
+				</nz-form-item>
186
+				
187
+				<nz-form-item>
188
+				  <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="address">详细地址</nz-form-label>
189
+				  <nz-form-control>
190
+				    <nz-input-group>
191
+				      <input type="text" nz-input formControlName="address" placeholder="请填写详细地址" />
192
+				    </nz-input-group>
193
+				  </nz-form-control>
194
+				</nz-form-item>
195
+				
196
+        <nz-form-item>
197
+          <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="phone">联系电话</nz-form-label>
198
+          <nz-form-control>
199
+            <nz-input-group>
200
+              <input type="phone" nz-input formControlName="phone" placeholder="请填写联系电话" />
201
+            </nz-input-group>
202
+          </nz-form-control>
203
+        </nz-form-item>
204
+      </form>
205
+    </overlay-scrollbars>
206
+    <div class="display_flex justify-content_flex-center">
207
+      <button nzType="primary" nz-button (click)="submitForm()" [nzLoading]="btnLoading">确认</button>
208
+      <button class="btn cancel" nz-button nzType="default" (click)="hideModal()">取消</button>
209
+    </div>
210
+  </div>
211
+</div>
212
+
213
+<!-- 查看详情 -->
214
+<div class="pathology-box display_flex align-items_center justify-content_flex-center" *ngIf="detailMoadl">
215
+	<div class="pathology-content">
216
+		<div class="title">查看详情
217
+		<i class="icon_transport transport-guanbi" (click)="closeDetailMoadl()"></i></div>
218
+		<div class="content border">
219
+			<div class="content-item boder-right">
220
+				<div class="form-title-box">
221
+					<div class="form-title"><span class="font-weight-500">是否术中快速:</span>{{detailsData.pathologyFormType==1?'是':'否'}}</div>
222
+					<div class="form-title"><span class="font-weight-500">申请单编号:</span>{{detailsData.applyCode}}</div>
223
+					<div class="form-title"><span class="font-weight-500">状态:</span>{{detailsData.status.name}}</div>
224
+					<div class="form-title"><span class="font-weight-500">科室名称:</span>{{detailsData.patientDTO.department.dept}}</div>
225
+				</div>
226
+				<div class="form-title-box">
227
+					<div class="form-title"><span class="font-weight-500">住院号:</span>{{detailsData.patientDTO.patientCode}}</div>
228
+					<div class="form-title"><span class="font-weight-500">患者信息:</span>{{detailsData.patientDTO.patientName}} ({{detailsData.patientDTO.bedNum}}床)</div>
229
+					<div class="form-title"><span class="font-weight-500">年龄:</span>{{detailsData.patientDTO.age||'-'}}岁</div>
230
+				</div>
231
+				
232
+				<div class="form-title-box">
233
+					<div class="form-title"><span class="font-weight-500">检验项目:</span>{{project||'无'}}</div>
234
+				</div>
235
+				
236
+				<div class="form-list">
237
+					<div class="form-title font-weight-500">诊断:</div>
238
+					<div class="indent">
239
+						{{detailsData.diagnose||'无'}}
240
+					</div>
241
+				</div>
242
+				
243
+				<div class="form-list">
244
+					<div class="form-title font-weight-500">病历摘要:</div>
245
+					<div class="indent">{{detailsData.medicalRecords||'无'}}</div>
246
+				</div>
247
+				<div class="form-list">
248
+					<div class="form-title font-weight-500">手术方案:</div>
249
+					<div class="indent">{{detailsData.surgicalPlan||'无'}}</div>
250
+				</div>
251
+
252
+				<div class="form-title-box">
253
+					<div class="form-title"><span class="font-weight-500">标本类型:</span>{{detailsData.specimenType.name||'无'}}</div>
254
+					<div class="form-title"><span class="font-weight-500">标本数量:</span>{{detailsData.specimenNum||'无'}}</div>
255
+					<div class="form-title"><span class="font-weight-500">部位:</span>{{detailsData.takePart||'无'}}</div>
256
+				</div>
257
+				
258
+				<div class="form-title-box">
259
+					<div class="form-title"><span class="font-weight-500">送检医生:</span>{{detailsData.surgeryDoctorDTO?detailsData.surgeryDoctorDTO.name : '-'}}</div>
260
+					<div class="form-title"><span class="font-weight-500">离体时间:</span>{{detailsData.inVitroTime?(detailsData.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</div>
261
+					<div class="form-title"><span class="font-weight-500">固定时间:</span>{{detailsData.fixationTime?(detailsData.fixationTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</div>
262
+				</div>
263
+				
264
+				<div class="form-list">
265
+					<div class="form-title font-weight-500">标本:</div>
266
+					<div class="form-title specimen-list">
267
+						<div *ngFor="let item of specimenList" class="specimen-item-class form-title cursors" (click)="specimenView(item)">
268
+							<span *ngIf="item.partSource && item.partSource.value!=1">{{item.partSource?item.partSource.name:''}}</span>{{item.specimenName}}({{item.specimenCode}})
269
+						</div>
270
+					</div>
271
+				</div>
272
+
273
+			</div>
274
+			
275
+			<div class="content-item-right">
276
+				<div class="step-title">病理闭环</div>
277
+				<nz-steps [nzCurrent]="stepLength" nzDirection="vertical" nzSize="small">
278
+					<ng-container *ngFor="let item of pathologyLogs; let index = index">
279
+							<nz-step
280
+								[nzDescription]="tpl"
281
+							>
282
+							</nz-step>
283
+							<ng-template #tpl>
284
+								<div *ngIf="index==pathologyLogs.length-1" class="step-size">
285
+									<div style="color: #49B856;">{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
286
+									<div style="color:#333;">{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto?item.operationUserDto.name:''}}</div>
287
+								</div>
288
+								<div *ngIf="index!=pathologyLogs.length-1" class="step-size">
289
+									<div>{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
290
+									<div>{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto?item.operationUserDto.name:''}}</div>
291
+								</div>
292
+							</ng-template>
293
+						</ng-container>
294
+				</nz-steps>
295
+			</div>
296
+		</div>
297
+		<div class="display_flex justify-content_flex-center bottom-btn">
298
+			<button class="btn btn-right" nz-button nzType="primary" (click)="closeDetailMoadl()">知道了</button>
299
+		</div>
300
+	</div>
301
+</div>
302
+
303
+<!-- 操作成功/失败提示框 -->
304
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
305
+  [info]="promptInfo" (closeModel)="closeModel()"></app-prompt-modal>
306
+	
307
+
308
+<div class="mask-style" *ngIf="isSpinning">
309
+	<nz-spin nzSimple class="spin-style"></nz-spin>
310
+</div>
311
+
312
+<router-outlet (deactivate)="getConnectList($event)"></router-outlet>
313
+
314
+<!-- 快速报修 -->
315
+<div class="commonModal display_flex justify-content_flex-center align-items_center" *ngIf="bxModal" (click)="clickExtra($event)">
316
+  <div class="modalBody">
317
+    <div class="title">一键报修<i class="icon_transport transport-guanbi" (click)="hideBxModal()"></i>
318
+    </div>
319
+    <div class="content">
320
+      <form nz-form [formGroup]="validateBxForm" class="bxFormAdd" (ngSubmit)="confirmBx()">
321
+        <nz-form-item>
322
+          <nz-form-label [nzSm]="4" [nzXs]="4" nzRequired nzFor="description">故障描述</nz-form-label>
323
+          <nz-form-control>
324
+            <nz-input-group style="width:442px;">
325
+              <textarea nz-input formControlName="description" rows="4" placeholder="请输入故障描述"></textarea>
326
+            </nz-input-group>
327
+          </nz-form-control>
328
+        </nz-form-item>
329
+				<nz-form-item>
330
+					<nz-form-label [nzSm]="4" [nzXs]="4" nzFor="description">图片上传</nz-form-label>
331
+					<nz-form-control style="display: inline-block;" *ngIf="repairImgs.length === 0">
332
+					  <nz-upload nzListType="picture-card" [(nzFileList)]="fileList"
333
+						[nzShowUploadList]="showUploadList" [nzPreview]="handlePreview"
334
+						nzFileType="image/jpeg,image/png" nzAccept="image/jpeg,image/png"
335
+						[nzShowButton]="fileList.length < 3"
336
+						[nzBeforeUpload]="beforeUpload" [nzAction]="temporarilyUrl"
337
+						[nzSize]="10240">
338
+					    <i nz-icon nzType="plus"></i>
339
+					    <div class="ant-upload-text">上传照片</div>
340
+					  </nz-upload>
341
+					  <nz-modal [nzVisible]="previewVisible" [nzContent]="modalContent" [nzFooter]="null" (nzOnCancel)="previewVisible = false">
342
+					    <ng-template #modalContent>
343
+					      <img [src]="previewImage" [ngStyle]="{ width: '100%' }" />
344
+					    </ng-template>
345
+					  </nz-modal>
346
+					  <div class="tips">只支持.jpg.png.jpg 格式,最多上传3 张图片。</div>
347
+					</nz-form-control>
348
+					<div class="thumbList" *ngIf="repairImgs.length > 0">
349
+					  <div class="thumb" *ngFor="let item of repairImgs;let index = index;" (click)="previewImageHandler(repairImgs, index)"><img [src]="item.thumbFilePath" alt=""></div>
350
+					</div>
351
+				</nz-form-item>
352
+        <nz-form-item>
353
+          <nz-form-label [nzSm]="4" [nzXs]="4" nzRequired nzFor="contacts">联系人</nz-form-label>
354
+          <nz-form-control style="display: inline-block;">
355
+            <nz-input-group>
356
+              <input style="width:168px;" class="mr8" nz-input formControlName="contacts" placeholder="请输入联系人" />
357
+            </nz-input-group>
358
+          </nz-form-control>
359
+
360
+          <nz-form-label nzRequired nzFor="contactsInformation">联系电话</nz-form-label>
361
+          <nz-form-control style="display: inline-block;">
362
+            <nz-input-group>
363
+              <input style="width:185px;" nz-input formControlName="contactsInformation" placeholder="请输入联系电话" />
364
+            </nz-input-group>
365
+          </nz-form-control>
366
+        </nz-form-item>
367
+        <nz-form-item style="display: inline-block;vertical-align:bottom;" class="last">
368
+          <nz-form-label [nzSm]="4" [nzXs]="4" nzRequired nzFor="building">详细地址</nz-form-label>
369
+          <nz-form-control style="display: inline-block;">
370
+            <nz-select [nzDropdownMatchSelectWidth]="false" style="width:120px;" class="mr8" type="building"
371
+              nzShowSearch formControlName="building" nzPlaceHolder="请选择楼栋"
372
+              (ngModelChange)="changeBuilding($event)">
373
+              <nz-option [nzLabel]="data.buildingName" [nzValue]="data.id" *ngFor="let data of buildings">
374
+              </nz-option>
375
+            </nz-select>
376
+          </nz-form-control>
377
+          <nz-form-label [nzSm]="4" [nzXs]="4" nzRequired nzFor="floor" hidden></nz-form-label>
378
+          <nz-form-control style="display: inline-block;">
379
+            <nz-select [nzDropdownMatchSelectWidth]="false" style="width:120px;" class="mr8" type="floor" nzShowSearch
380
+             formControlName="floor" nzPlaceHolder="请选择楼层" [nzLoading]="floorLoading">
381
+              <nz-option [nzLabel]="data.floorName" [nzValue]="data.id" *ngFor="let data of floors"></nz-option>
382
+            </nz-select>
383
+          </nz-form-control>
384
+          <nz-form-label [nzSm]="4" [nzXs]="4" nzRequired nzFor="officeAddress" hidden></nz-form-label>
385
+          <nz-form-control style="display: inline-block;" class="address">
386
+            <nz-input-group>
387
+              <input class="addressFocus" style="width:185px;" nz-input formControlName="officeAddress" placeholder="请输入详细位置" (focus)="focusAddress()" />
388
+              <div class="addressList" *ngIf="isShowAddressList">
389
+                <ng-container *ngIf="!addressLoading && addressList.length">
390
+                  <div class="addressItem ellipsis-oneline" *ngFor="let item of addressList" [title]="item.name" (click)="selectAddress(item.name)">{{item.name}}</div>
391
+                </ng-container>
392
+                <div *ngIf="!addressLoading && !addressList.length" class="w100 h100 padding8 display_flex justify-content_flex-center align-items_center">
393
+                  <nz-empty></nz-empty>
394
+                </div>
395
+                <div *ngIf="addressLoading" class="w100 h100 padding8 display_flex justify-content_flex-center align-items_center">
396
+                  <nz-spin nzSimple></nz-spin>
397
+                </div>
398
+              </div>
399
+            </nz-input-group>
400
+          </nz-form-control>
401
+        </nz-form-item>
402
+      </form>
403
+    </div>
404
+    <div class="display_flex justify-content_flex-center">
405
+      <button nz-button nzType="primary" (click)="confirmBx()">
406
+        确认
407
+      </button>
408
+      <button class="btn cancel" nz-button nzType="default" (click)="hideBxModal()">
409
+        取消
410
+      </button>
411
+    </div>
412
+  </div>
413
+</div>
414
+
415
+<!-- 撤销报修 -->
416
+<app-dialog-delete
417
+  [delModal]="delBxModal"
418
+  (hideDelModalEvent)="hideDelBxModal()"
419
+  [btnLoading]="btnLoading"
420
+  (confirmDelEvent)="confirmDelBx()"
421
+  content="您确认要撤销吗?"
422
+></app-dialog-delete>

文件差异内容过多而无法显示
+ 1843 - 0
src/app/views/web-repairs/web-repairs.component.less


+ 979 - 0
src/app/views/web-repairs/web-repairs.component.ts

@@ -0,0 +1,979 @@
1
+import { Component, OnInit, ViewChild, OnDestroy } from "@angular/core";
2
+import { MainService } from "../../services/main.service";
3
+import { ActivatedRoute, Router } from "@angular/router";
4
+import { OverlayScrollbarsComponent } from "overlayscrollbars-ngx";
5
+import { startOfDay, format, endOfDay } from "date-fns";
6
+import { ToolService } from 'src/app/services/tool.service';
7
+import { NzMessageService, UploadFile } from "ng-zorro-antd";
8
+import { debounceTime, filter } from 'rxjs/operators';
9
+import { Subject } from 'rxjs';
10
+import { DomSanitizer } from '@angular/platform-browser';
11
+import cloneDeep from 'lodash-es/cloneDeep'
12
+import { HttpRequest, HttpResponse, HttpClient } from '@angular/common/http';
13
+import {
14
+  FormBuilder,
15
+  Validators,
16
+  FormGroup,
17
+  FormControl,
18
+} from "@angular/forms";
19
+
20
+@Component({
21
+  selector: "app-web-repairs",
22
+  templateUrl: "./web-repairs.component.html",
23
+  styleUrls: ["./web-repairs.component.less"],
24
+})
25
+export class WebRepairsComponent implements OnInit {
26
+  @ViewChild("osComponentRef1", {
27
+    read: OverlayScrollbarsComponent,
28
+    static: false,
29
+  })
30
+  osComponentRef1: OverlayScrollbarsComponent;
31
+  @ViewChild("osComponentRef2", {
32
+    read: OverlayScrollbarsComponent,
33
+    static: false,
34
+  })
35
+  osComponentRef2: OverlayScrollbarsComponent;
36
+  @ViewChild("osComponentRef3", {
37
+    read: OverlayScrollbarsComponent,
38
+    static: false,
39
+  })
40
+  osComponentRef3: OverlayScrollbarsComponent;
41
+  @ViewChild("osComponentRef4", {
42
+    read: OverlayScrollbarsComponent,
43
+    static: false,
44
+  })
45
+  osComponentRef4: OverlayScrollbarsComponent;
46
+  @ViewChild("osComponentRef5", {
47
+    read: OverlayScrollbarsComponent,
48
+    static: false,
49
+  })
50
+  osComponentRef5: OverlayScrollbarsComponent;
51
+  constructor(
52
+	private mainService: MainService,
53
+	public router: Router,
54
+	private route: ActivatedRoute,
55
+	public tool: ToolService,
56
+	private fb: FormBuilder,
57
+	private message: NzMessageService,
58
+	private sanitizer: DomSanitizer,
59
+	private http: HttpClient,
60
+	
61
+	) {}
62
+  // 今日药单量
63
+  todayTotal: undefined;
64
+  // 今日已完成
65
+  todayComplete: undefined;
66
+  //手术间数据
67
+  printPharmacyList = []; //数据列表
68
+  printPharmacyIdx = 0; //页码
69
+  printPharmacyTotal = 0; //总数
70
+  printPharmacyFlag = false; //是否查看更多
71
+  printPharmacySearchKey = ""; //搜索的内容
72
+  printPharmacyLoad = false; //按钮的loading
73
+  // 标本间列表
74
+  waitPharmacyList = [];
75
+  waitPharmacyIdx = 0;
76
+  waitPharmacyTotal = 0;
77
+  waitPharmacyFlag = false;
78
+  waitPharmacySearchKey = "";
79
+  waitPharmacyLoad = false;
80
+  // 今日离科列表
81
+  pharmacyList = [];
82
+  pharmacyIdx = 0;
83
+  pharmacyTotal = 0;
84
+  pharmacyFlag = false;
85
+  pharmacySearchKey = "";
86
+  pharmacyLoad = false;
87
+  // 配送中列表
88
+  distributionList = [];
89
+  distributionIdx = 0;
90
+  distributionTotal = 0;
91
+  distributionFlag = false;
92
+  distributionSearchKey = "";
93
+  distributionLoad = false;
94
+  // 已完成列表
95
+  completedList = [];
96
+  completedIdx = 0;
97
+  completedTotal = 0;
98
+  completedFlag = false;
99
+  completedSearchKey = "";
100
+  completedLoad = false;
101
+
102
+	barCode:any; //条码搜索
103
+  // other
104
+  loginUser: any = localStorage.getItem("user")
105
+    ? JSON.parse(localStorage.getItem("user")).user
106
+    : null; //登录人信息
107
+
108
+  logTimer = null; //定时器
109
+  logTime = 0; //自动刷新秒数
110
+  logTimeConst = 60; //自动刷新秒数
111
+
112
+  time = new Date().getTime(); // 时间戳
113
+  timer = null; // 时间定时器
114
+	showDropdown:boolean = false;
115
+	relevanceModal:boolean = false //关联标本和手术室
116
+	validateForm: FormGroup; //关联标本和手术室表单
117
+	validateVerificationForm: FormGroup; //核验标本
118
+	validateConnectForm: FormGroup; //核验标本
119
+	specimenData:any = []; //标本间数据
120
+	operationData:any = []; //手术间数据
121
+	fixationModal:boolean = false //标本接收固定
122
+	verificationMoadl:boolean = false //标本核验
123
+	specimenCode:any; //标本条码
124
+	listOneData:any=[];
125
+	listOneLength:any;
126
+	pageOneIndex:any = 1;
127
+	pageSize:any = 10;
128
+	listTwoData:any=[];
129
+	listTwoLength:any;
130
+	pageTwoIndex:any = 1;
131
+	listThreeData:any=[];
132
+	listThreeLength:any;
133
+	pageThreeIndex:any = 1;
134
+	loading1:boolean = false;
135
+	loading2:boolean = false;
136
+	loading3:boolean = false;
137
+	loading4:boolean = false;
138
+	loading5:boolean = false;
139
+	fixativeData:any = []; //固体液类型
140
+	hosId:any;
141
+	userId:any;
142
+	detailsData:any;
143
+	isSpinning:boolean = false; //全屏加载状态
144
+	codeData:any = []; //标本条码数据
145
+	btnInfoLoading :boolean = false; //标本加固加载
146
+	activeIndex:any = 0; //tabs选择状态
147
+	changeInpSubject = new Subject(); //防抖
148
+	changeInpSubjectUser = new Subject(); //防抖
149
+	changeInpSubjectSpecimen = new Subject(); //防抖
150
+	changeInpSubjectDepartment = new Subject(); //防抖
151
+	pathologyFormType:any = null; //术中快速
152
+	status:any; //状态
153
+	incidentsign:any //配送人
154
+	userData:any = []; //患者数据
155
+	statusData:any = []; //状态数据
156
+	isLoading:boolean = false;
157
+	listDetailMoadl:boolean = false; //详情弹框
158
+	department:any = []; //科室数据
159
+	hospital:any = []; //院区数据
160
+	distributionName:any;
161
+	businessType:any = null;
162
+	multiModal:boolean = false;
163
+	specimenMultiCode:any = null;
164
+	codeMultiData:any=[];
165
+	errorMultiMsg:any = null;
166
+	connectModal:boolean = false; //标本交接弹框
167
+	receptionModal:boolean = false; //标本接收弹框
168
+	deptId:any = null;
169
+	detailMoadl:boolean = false;
170
+	rowData:any = null; //table选中数据
171
+	toDayData:any = null;
172
+	toDayTime:any = null;
173
+	backType:any = 'list';
174
+	mainRole:any = false;
175
+	coopBtns:any = {};
176
+	deptName:any = null;
177
+	loginUserDeptId: number = JSON.parse(localStorage.getItem("user")).user.dept
178
+	  .id; //登录人所属科室
179
+	
180
+	buildingData:any = [];
181
+	floorData:any = [];
182
+	userInfo:any;
183
+	currentDept:any;
184
+  ngOnInit() {
185
+		this.coopBtns = this.tool.initCoopBtns(this.route);
186
+		this.hosId = this.tool.getCurrentHospital().id;
187
+		this.userId = this.tool.getCurrentUserId()
188
+		this.deptId = this.tool.getCurrentUserDept().id
189
+		this.deptName = this.tool.getCurrentUserDept().dept
190
+		this.userInfo = this.tool.getCurrentUserInfo();
191
+		this.currentDept = this.tool.getCurrentUserDept();
192
+		if(this.route.snapshot.queryParams && this.route.snapshot.queryParams.type){
193
+			this.backType = this.route.snapshot.queryParams.type
194
+		}
195
+		this.getStatusDic()
196
+  }
197
+	
198
+	// 初始化新增form表单
199
+	initBxForm(content) {
200
+	  this.validateBxForm = this.fb.group({
201
+	    description: [content || null, [Validators.required]],
202
+	    building: [null, [Validators.required]],
203
+	    floor: [null, [Validators.required]],
204
+	    officeAddress: [null, [Validators.required]],
205
+	    contacts: [this.loginUser.name, [Validators.required]],
206
+	    contactsInformation: [this.loginUser.phone, [Validators.required]],
207
+	  });
208
+	  this.getDeptById(this.currentDept.id);
209
+	}
210
+	// 根据科室ID获取详情
211
+	deptDto:any = {};
212
+	getDeptById(id){
213
+	  this.mainService
214
+	    .getFetchDataList("simple/data", "department", {
215
+	      idx: 0,
216
+	      sum: 1,
217
+	      department: {
218
+	        id,
219
+	      }
220
+	    })
221
+	    .subscribe((data:any) => {
222
+	      let list = data.list || [];
223
+	      this.deptDto = list.length > 0 ? list[0] : {};
224
+	      console.log(this.deptDto);
225
+	      this.changeHosp();
226
+	      // 回显楼栋
227
+	      if(this.deptDto.building){
228
+	        this.validateBxForm.controls.building.setValue(this.deptDto.building.id);
229
+	      }
230
+	
231
+	      // 回显楼层
232
+	      if(this.deptDto.floor){
233
+	        this.validateBxForm.controls.floor.setValue(this.deptDto.floor.id);
234
+	      }
235
+	    });
236
+	}
237
+	// 切换院区选项
238
+	buildings: any = []; //楼栋
239
+	changeHosp() {
240
+	  this.validateBxForm.controls.building.setValue(null);
241
+	  this.buildings = [];
242
+	  let data = {
243
+	    idx: 0,
244
+	    sum: 9999,
245
+	    building: {
246
+	      hosId: this.deptDto.hospital.id,
247
+	    }
248
+	  };
249
+	  this.mainService
250
+	    .getFetchDataList("simple/data", "building", data)
251
+	    .subscribe((data:any) => {
252
+	      this.buildings = data.list || [];
253
+	      this.floors = [];
254
+	      this.message.remove(this.maskFlag);
255
+	      this.maskFlag = false;
256
+	    });
257
+	}
258
+	
259
+	// 切换楼栋信息
260
+	floors: Array<any> = []; //楼层
261
+	floorLoading: boolean = false;
262
+	changeBuilding(buildingId) {
263
+	  if(!buildingId){
264
+	    return;
265
+	  }
266
+	  this.validateBxForm.controls.floor.setValue(null);
267
+	  this.validateBxForm.controls.officeAddress.setValue(null);
268
+	  this.floors = [];
269
+	
270
+	  let data = {
271
+	    idx: 0,
272
+	    sum: 9999,
273
+	    floor: {
274
+	      buildId: buildingId,
275
+	    }
276
+	  };
277
+	  this.floorLoading = true;
278
+	  this.mainService
279
+	    .getFetchDataList("simple/data", "floor", data)
280
+	    .subscribe((data:any) => {
281
+	      this.floorLoading = false;
282
+	      this.message.remove(this.maskFlag);
283
+	      this.maskFlag = false;
284
+	      this.floors = data.list || [];
285
+	    });
286
+	}
287
+	
288
+	// 快速报修
289
+	bxModal: boolean = false; //模态框
290
+	loading6 = false;
291
+	coopBx: any; //当前操作列
292
+	maskFlag:any;
293
+	fileList:any = [];
294
+	validateBxForm: FormGroup; //新增/编辑表单
295
+	speediness(data?) {
296
+	  this.maskFlag = this.message.loading("正在加载中..", {
297
+	    nzDuration: 0,
298
+	  }).messageId;
299
+	  this.bxModal = true;
300
+	  this.coopBx = data || {};
301
+		this.fileList = [];
302
+	  this.initBxForm(this.coopBx.content);
303
+	}
304
+	// 隐藏模态框
305
+	hideBxModal() {
306
+	  this.bxModal = false;
307
+		this.fileList = [];
308
+	}
309
+	// 确认
310
+	confirmBx() {
311
+	  for (const i in this.validateBxForm.controls) {
312
+	    this.validateBxForm.controls[i].markAsDirty();
313
+	    this.validateBxForm.controls[i].updateValueAndValidity();
314
+	  }
315
+	  if (this.validateBxForm.invalid){
316
+	    this.message.error('请填写必填字段!');
317
+	    return;
318
+	  };
319
+	  if (!this.deptDto.id){
320
+	    this.message.error('数据异常,无法建单!');
321
+	    return;
322
+	  };
323
+	  this.showReqModal();
324
+	}
325
+	
326
+	// 报修提示框
327
+	reqModal: boolean = false;
328
+	extraData:any = {};
329
+	showReqModal() {
330
+	  this.extraData.floor = this.floors.find(v => v.id == this.validateBxForm.value.floor);
331
+	  // this.reqModal = true;
332
+	  this.confirmBxNext(0);
333
+	}
334
+	
335
+	// 报修
336
+	// type, 1是,0否
337
+	cancenlLoading:boolean = false;
338
+	async confirmBxNext(type){
339
+	  this.maskFlag = this.message.loading("正在加载中..", {
340
+	    nzDuration: 0,
341
+	  }).messageId;
342
+	  if(type == 1){
343
+	    this.btnLoading = true;
344
+	    let loginUser:any = cloneDeep(this.loginUser);
345
+			// loginUser.upType = "changeDept";
346
+	    if(this.deptDto.hospital){
347
+	      loginUser.hospital = { id: this.deptDto.hospital.id };
348
+	    }
349
+	    if(this.deptDto){
350
+	      loginUser.dept = {id: this.deptDto.id};
351
+	    }
352
+	    if(this.validateBxForm.value.contacts){
353
+	      loginUser.name = this.validateBxForm.value.contacts;
354
+	    }
355
+	    // if(this.validateBxForm.value.floor){
356
+	    //   loginUser.place = {id: this.validateBxForm.value.floor, area: { id: this.validateBxForm.value.building }};
357
+	    // }
358
+	    // if(this.validateBxForm.value.officeAddress){
359
+	    //   loginUser.houseNumber = this.validateBxForm.value.officeAddress;
360
+	    // }
361
+	    if(this.validateBxForm.value.contactsInformation){
362
+	      loginUser.phone = this.validateBxForm.value.contactsInformation;
363
+	    }
364
+	    let result:any = await this.mainService.coopData("updData", "user", { user: loginUser }).toPromise();
365
+	    console.log(result);
366
+	    if(result.status != 200){
367
+	      this.hideReqModal();
368
+	      this.btnLoading = false;
369
+	      this.message.remove(this.maskFlag);
370
+	      this.maskFlag = false;
371
+	      this.message.error(result.msg);
372
+	      return;
373
+	    }
374
+	  }else{
375
+	    this.cancenlLoading = true;
376
+	  }
377
+	  this.mainService.getDictionary("list", "incident_source").subscribe((source:any) => {
378
+	    let incidentSourceList = source || [];
379
+	    let pc = incidentSourceList.find(v => v.value === 'pc');
380
+	    this.mainService.getDictionary("list", "repair_incident_type").subscribe((result) => {
381
+	      let repairIncidentTypeList = result || [];
382
+	      let repairIncidentType = repairIncidentTypeList.find(v => v.value === 'public');
383
+	      if (repairIncidentType) {
384
+	        let postData: any = {
385
+	          incident: {
386
+	            repairIncidentType,
387
+	            place: this.validateBxForm.value.floor ? { id: this.validateBxForm.value.floor } : undefined,
388
+	            description: this.validateBxForm.value.description,
389
+	            houseNumber: this.validateBxForm.value.officeAddress,
390
+	            contacts: this.validateBxForm.value.contacts,
391
+	            contactsInformation: this.validateBxForm.value.contactsInformation,
392
+	            hosId: this.deptDto.hospital.id,
393
+	            source: pc,
394
+	            fromWx: true,
395
+	            requester: this.loginUser,
396
+	            acceptUser: this.loginUser,
397
+	            deleteFlag: 0,
398
+	          },
399
+	        };
400
+	        if (this.coopBx.category) {
401
+	          postData.incident.category = this.coopBx.categoryDTO;
402
+	        }
403
+	        this.mainService.flowPost("incident/task/request", postData).subscribe((res) => {
404
+	          this.btnLoading = false;
405
+	          this.cancenlLoading = false;
406
+	          this.message.remove(this.maskFlag);
407
+	          this.maskFlag = false;
408
+	          this.bxModal = false;
409
+	          this.hideReqModal();
410
+	          if ((res as any).state == 200) {
411
+							// 图片上传
412
+							if(this.fileList.length){
413
+								console.log(this.fileList.map(v => v.originFileObj));
414
+								this.fileList.map(v => v.originFileObj).forEach(async file => {
415
+									await this.uploadImages(file, res.data.id);
416
+								})
417
+							}
418
+							this.getConnectList()
419
+	            this.showPromptModal("提交", true, "");
420
+	          } else {
421
+	            this.showPromptModal("提交", false, (res as any).msg);
422
+	          }
423
+	        });
424
+	      } else {
425
+	        this.btnLoading = false;
426
+	        this.showPromptModal("提交", false, "缺少【科室内报修】数据字典");
427
+	      }
428
+	    });
429
+	  })
430
+	}
431
+	
432
+	hideReqModal() {
433
+	  this.reqModal = false;
434
+	}
435
+	
436
+	// 预览图片
437
+	imgs = [];
438
+	isPreview = false;
439
+	initialViewIndex:number = 0;
440
+	previewImageHandler(data = [], index = 0) {
441
+	  this.initialViewIndex = index;
442
+	  console.log(index)
443
+	  this.isPreview = false;
444
+	  data = data || [];
445
+	  this.imgs = data.map((v) => location.origin + '/file' + v.relativeFilePath);
446
+	  setTimeout(() => {
447
+	    this.isPreview = true;
448
+	  }, 0)
449
+	}
450
+	
451
+	// 图片相关
452
+	showUploadList = {
453
+	  showPreviewIcon: true,
454
+	  showRemoveIcon: true,
455
+	  hidePreviewIconInNonImage: true
456
+	};
457
+	previewImage: string | undefined = '';
458
+	previewVisible = false;
459
+	repairImgs:any[] = [];//报修图片
460
+	handlePreview = (file: UploadFile) => {
461
+		console.log('file1:', file)
462
+	  this.previewImage = file.url || file.thumbUrl;
463
+	  this.previewVisible = true;
464
+	};
465
+	
466
+	beforeUpload = (file: UploadFile): boolean => {
467
+		console.log('file2:', file)
468
+	  this.fileList = [...this.fileList, file];
469
+	  setTimeout(async () => {
470
+	    file.url = await this.getBase64(file);
471
+	  }, 0);
472
+	  console.log('this.fileList:', this.fileList)
473
+	  return true;
474
+	};
475
+	
476
+	getBase64(file: any): Promise<any> {
477
+	  return new Promise((resolve, reject) => {
478
+	    const reader = new FileReader();
479
+	    reader.readAsDataURL(file);
480
+	    reader.onload = () => resolve(reader.result);
481
+	    reader.onerror = error => reject(error);
482
+	  });
483
+	}
484
+	
485
+	// 临时上传图片
486
+	temporarilyUrl = this.mainService.returnUploadUrl('wechatRequesterIncident', 0);
487
+	
488
+	// 图片上传
489
+	uploadImages(file, id){
490
+	  const formData = new FormData();
491
+	  formData.append('file', file);
492
+	  formData.append('fileName', file.name);
493
+	  const req = new HttpRequest('Post', this.mainService.returnUploadUrl('wechatRequesterIncident', id), formData, {
494
+	    reportProgress: true
495
+	  });
496
+	  return this.http.request(req).pipe(filter(e => e instanceof HttpResponse)).toPromise();
497
+	}
498
+	
499
+	isAllDisplayDataChecked:any = false;
500
+	isOperating:any  = false;
501
+	isIndeterminate:any = false;
502
+	listOfAllData: any = [];
503
+	mapOfCheckedId: { [key: string]: boolean } = {};
504
+	numberOfChecked = 0;
505
+	selectedData:any = null;
506
+	
507
+	// 获取状态字典
508
+	repairIncidentTypeList:any;
509
+	sourceData:any;
510
+	getStatusDic(){
511
+		this.mainService.getDictionary("list", "incident_status").subscribe((res) => {
512
+			this.statusData = res
513
+		});
514
+		
515
+		this.mainService.getDictionary("list", "incident_source").subscribe((res) => {
516
+			this.sourceData = res.find(i=>i.value == 'pc')
517
+			this.mainService.getDictionary("list", "repair_incident_type").subscribe((res) => {
518
+				this.repairIncidentTypeList = res
519
+				this.getConnectList()
520
+			});
521
+		});
522
+		
523
+	}
524
+
525
+	// 搜索
526
+	search() {
527
+	  this.pageOneIndex = 1;
528
+	  this.getConnectList();
529
+	}
530
+	// 重置
531
+	reset() {
532
+	  this.pageOneIndex = 1;
533
+		this.status = null;
534
+		this.incidentsign = null;
535
+		this.startDate = format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
536
+		this.endDate = format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
537
+		this.acceptTime = [this.startDate,this.endDate];
538
+	  this.getConnectList();
539
+	}
540
+	// 交接本数据
541
+	getConnectList() {
542
+	  var that = this;
543
+	  let data = {
544
+	    idx: that.pageOneIndex - 1,
545
+	    sum: that.pageSize,
546
+	    incident: {
547
+				incidentsign: this.incidentsign || undefined,
548
+				statusId: this.status || undefined,
549
+	      repairIncidentType: { id: this.repairIncidentTypeList.find(v => v.value === 'public').id },
550
+	    	requester: {
551
+					id: this.userId
552
+				},
553
+				source:{
554
+					id: this.sourceData.id
555
+				},
556
+				startDate_start: this.startDate,
557
+				startDate_end: this.endDate
558
+	    }
559
+	  };
560
+	  this.loading1 = true;
561
+	  that.mainService
562
+	    .getFetchDataList("simple/data", "incident", data)
563
+	    .subscribe((data) => {
564
+	      this.loading1 = false;
565
+	      that.listOneData = data.list;
566
+	      that.listOneLength = data.totalNum;
567
+	    });
568
+	}
569
+	
570
+	// 报修撤销模态框
571
+	delBxModal: boolean = false;
572
+	delBxData: any; //删除的data
573
+	delBx(data) {
574
+	  this.delBxData = data;
575
+	  this.delBxModal = true;
576
+	}
577
+	confirmDelBx() {
578
+	  this.btnLoading = true;
579
+	  this.mainService
580
+	    .flowPost("incident/task/cancel", { incident: this.delBxData })
581
+	    .subscribe((result) => {
582
+	      if(result.state == 200){
583
+	        this.delBxModal = false;
584
+	        this.showPromptModal("撤销", true, "");
585
+	        this.getConnectList();
586
+	      }else{
587
+	        this.delBxModal = false;
588
+	        this.showPromptModal("撤销", false, result.msg);
589
+	      }
590
+	    });
591
+	}
592
+	hideDelBxModal() {
593
+	  this.delBxModal = false;
594
+	}
595
+	
596
+	// 查看
597
+	detailBx(data){
598
+	  this.router.navigateByUrl("webRepairs/detailBx/" + data.id);
599
+	}
600
+	
601
+	// 获取院区
602
+	getHospitalData(){
603
+		let arr = this.tool.getHospitalList().filter(i=>i.parent==undefined)
604
+		this.hospital = arr
605
+	}
606
+
607
+	// 选择院区
608
+	hospitalId:any=null;
609
+	changeHospDate(e){
610
+		this.validateForm.controls.department.setValue(null)
611
+		this.hospitalId = e
612
+		this.getDepartmentData('',e)
613
+	}
614
+
615
+	// 获取科室
616
+	isDeptLoading:boolean = false;
617
+	getDepartmentData(e,hospital){
618
+		// this.mainService.getDictionary("list", "dept_type").subscribe((res2) => {
619
+			// let item = res2.find(i=>i.name=='检验科室')
620
+			let data = {
621
+			  idx: 0,
622
+			  sum: 999,
623
+			  department: {
624
+					dept:e,
625
+			    hospital: { id: this.hospitalId || "" },
626
+			    type: {id:null},
627
+			  },
628
+			};
629
+			this.mainService
630
+			  .getFetchDataList("data", "department", data)
631
+			  .subscribe((res) => {
632
+					this.isDeptLoading = false
633
+			    this.department = res.list;
634
+			  });
635
+		// });
636
+	}
637
+
638
+	// 接收时间
639
+	startDate:any = format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
640
+	endDate:any = format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
641
+	acceptTime:any = [this.startDate,this.endDate];
642
+	changeDate(result){
643
+		if(result.length>0){
644
+			this.startDate = format(result[0], 'yyyy-MM-dd' +' '+'00:00:00');
645
+			this.endDate = format(result[1], 'yyyy-MM-dd' +' '+'23:59:59');
646
+			this.acceptTime = [this.startDate,this.endDate]
647
+		}else{
648
+			this.startDate = null;
649
+			this.endDate = null;
650
+			this.acceptTime = []
651
+		}
652
+	}
653
+
654
+	// 获取当前用户信息
655
+	getCurrentUserNow() {
656
+	  this.mainService.getCurrentUser1().subscribe((data:any) => {
657
+	    if (data["status"] == 200) {
658
+				this.userInfo = data.data;
659
+				let user = JSON.parse(localStorage.getItem("user"));
660
+				user.user.name = data["data"].name;
661
+				user.user.account = data["data"].account;
662
+				user.user.floorDTO = data["data"].floorDTO;
663
+				user.user.buildingDTO = data["data"].buildingDTO;
664
+				user.user.phone = data["data"].phone;
665
+				user.user.address = data["data"].address;
666
+				localStorage.setItem("user", JSON.stringify(user));
667
+	    }
668
+	  });
669
+	}
670
+
671
+	// 成功/失败提示框
672
+	closeModel(){
673
+		
674
+	}
675
+
676
+
677
+	pathologyLogs:any=[];
678
+	specimenList:any=[]
679
+	stepLength:any = 0;
680
+	closeDetailMoadl(){
681
+		this.detailMoadl = false
682
+	}
683
+
684
+  // 退出
685
+  logOut(): void {
686
+    // 假退出
687
+    let hospital = this.tool.getCurrentHospital();
688
+    if(hospital){
689
+      this.router.navigate(["login", hospital.id]);
690
+    }else{
691
+      this.router.navigateByUrl("login");
692
+    }
693
+    localStorage.removeItem("user");
694
+    localStorage.removeItem("menu");
695
+    localStorage.removeItem("index");
696
+		localStorage.removeItem("scanCodeData");
697
+		localStorage.removeItem("dataType");
698
+		localStorage.removeItem("pathologyActiveIndex");
699
+    // 假退出
700
+    this.mainService.logOut().subscribe((data) => {
701
+      if (data.status == 200) {
702
+        if(hospital){
703
+          this.router.navigate(["login", hospital.id]);
704
+        }else{
705
+          this.router.navigateByUrl("login");
706
+        }
707
+        localStorage.removeItem("user");
708
+        localStorage.removeItem("menu");
709
+        localStorage.removeItem("index");
710
+				localStorage.removeItem("scanCodeData");
711
+				localStorage.removeItem("dataType");
712
+				localStorage.removeItem("pathologyActiveIndex");
713
+      }
714
+    });
715
+
716
+  }
717
+
718
+  // 右侧菜单
719
+  showLastItems: boolean = false;
720
+  // 下拉
721
+  fixedMenuXiala() {
722
+    this.showLastItems = true;
723
+  }
724
+
725
+  // 上拉
726
+  fixedMenuShangla() {
727
+    this.showLastItems = false;
728
+  }
729
+	
730
+	// 回到系统管理
731
+	toMain() {
732
+	  this.router.navigateByUrl("main");
733
+	}
734
+	
735
+  // 切换右侧菜单Tab
736
+  fixedTab: string = "";
737
+  checkFixedTab(type: string) {
738
+    if (type == "toSystem") {
739
+      this.router.navigateByUrl("main");
740
+    }
741
+    if (this.fixedTab == type) {
742
+      this.fixedTab = "";
743
+    } else {
744
+      this.fixedTab = type;
745
+    }
746
+  }
747
+	
748
+  //科室切换
749
+  changeShow = true;
750
+  closeTime = 3;
751
+  closeTimeFlag = 0;
752
+  hsPromptModalShow: boolean = false; //科室切换提示框是否展示
753
+  timerCloseTime = null;
754
+  deptDisplay = 1; //护士端是否显示可以别名,1是显示科室名称,2是显示科室别名
755
+  // 修改密码
756
+	isPwdVisible:boolean = false
757
+  etitPasswrod() {
758
+    this.isPwdVisible= true;
759
+  }
760
+	
761
+	//打开修改密码弹窗
762
+	pwdAfterOpen(){
763
+	  this.passwordVisible = false;
764
+	  this.pwdIsOkLoading = false;
765
+	  this.enoughRegFlag = true; //弱
766
+	  this.mediumRegFlag = false; //中
767
+	  this.strongRegFlag = false; //强
768
+	  this.upModalData = {
769
+	    userid: "",
770
+	    pwdOld: "",
771
+	    newPwd: "",
772
+	    newPwd2: "",
773
+	  };
774
+	}
775
+	
776
+	// 修改密码
777
+	passwordVisible = false;
778
+	password?: string;
779
+	pwdIsOkLoading = false;
780
+	upModalData = {
781
+	  userid: "",
782
+	  pwdOld: "",
783
+	  newPwd: "",
784
+	  newPwd2: "",
785
+	};
786
+	upPwd(): void {
787
+	  if(this.upModalData.pwdOld.trim() === ''){
788
+	    this.message.error('请填写原始密码!', {
789
+	      nzDuration: 5000,
790
+	    });
791
+	    return;
792
+	  }
793
+	  if(!this.strongRegFlag){
794
+	    this.message.error('新密码不符合要求!', {
795
+	      nzDuration: 5000,
796
+	    });
797
+	    return;
798
+	  }
799
+	  if(this.upModalData.newPwd !== this.upModalData.newPwd2){
800
+	    this.message.error('新密码与确认新密码不一致!', {
801
+	      nzDuration: 5000,
802
+	    });
803
+	    return;
804
+	  }
805
+	
806
+	  this.pwdIsOkLoading = true;
807
+	  let userid = JSON.parse(localStorage.getItem("user")).user.id;
808
+	  this.upModalData.userid = userid;
809
+	  this.mainService.upPwd(this.upModalData).subscribe((data) => {
810
+	    if (data.status == 200) {
811
+	      this.isPwdVisible = false;
812
+	      this.pwdIsOkLoading = false;
813
+	      this.message.success("修改成功!", {
814
+	        nzDuration: 5000,
815
+	      });
816
+	    } else {
817
+	      this.pwdIsOkLoading = false;
818
+	      this.message.error(data.error, {
819
+	        nzDuration: 5000,
820
+	      });
821
+	    }
822
+	  });
823
+	}
824
+	showUpPwd(): void {
825
+	  this.isPwdVisible = true;
826
+	}
827
+	
828
+	pwdHandleOk(): void {
829
+	  this.upPwd();
830
+	}
831
+	
832
+	pwdHandleCancel(): void {
833
+	  this.isPwdVisible = false;
834
+	}
835
+	
836
+	// 新密码失去焦点
837
+	enoughRegFlag = true; //弱
838
+	mediumRegFlag = false; //中
839
+	strongRegFlag = false; //强
840
+	blurNewPwd(){
841
+	  let enoughReg = /^.{0,6}$/;//密码强度-弱
842
+	  let strongReg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\!\@\#\$\%\^\&\*]).{9,}$/;//密码强度-强
843
+	  this.enoughRegFlag = enoughReg.test(this.upModalData.newPwd);
844
+	  this.strongRegFlag = strongReg.test(this.upModalData.newPwd);
845
+	  this.mediumRegFlag = !this.enoughRegFlag && !this.strongRegFlag;
846
+	  console.log(this.enoughRegFlag,this.mediumRegFlag,this.strongRegFlag);
847
+	}
848
+	
849
+	// 修改个人信息
850
+	infoModal:boolean = false
851
+	editInfo() {
852
+		this.initForm();
853
+		this.getBuildingList('edit');
854
+		setTimeout(_=>{
855
+			this.validateForm.controls.name.setValue(this.userInfo.name);
856
+			this.validateForm.controls.account.setValue(this.userInfo.account);
857
+			this.validateForm.controls.phone.setValue(this.userInfo.phone?this.userInfo.phone:null);
858
+			this.validateForm.controls.address.setValue(this.userInfo.address?this.userInfo.address:null);
859
+			this.infoModal= true;
860
+		})
861
+	}
862
+	
863
+	// 楼栋列表
864
+	buildingList:any = [];
865
+	getBuildingList(type:any = '') {
866
+		let postData = {
867
+			idx: 0,
868
+			sum: 9999,
869
+			building: { hosId: this.hosId },
870
+		};
871
+		this.mainService
872
+			.getFetchDataList("simple/data", "building", postData)
873
+			.subscribe((result) => {
874
+				if (result.status == 200) {
875
+					this.buildingList = result.list;
876
+					if(type=='edit'){
877
+						this.validateForm.controls.buildingId.setValue(this.userInfo.buildingDTO?this.userInfo.buildingDTO.id +"":null);
878
+						if(this.validateForm.value.buildingId){
879
+							this.getAllFloor(type)
880
+						}
881
+					}
882
+				}
883
+			});
884
+	}
885
+	
886
+	// 选择楼栋
887
+	buildingChange(e){
888
+		this.validateForm.controls.floorId.setValue(null);
889
+		this.getAllFloor()
890
+	}
891
+	
892
+	// 获取选中楼栋下楼层列表
893
+	allFloorList:any = [];
894
+	getAllFloor(type:any = '') {
895
+		let postData = {
896
+			idx: 0,
897
+			sum: 9999,
898
+			floor: { hosId: this.hosId, buildId: this.validateForm.value.buildingId },
899
+		};
900
+		this.mainService
901
+			.getFetchDataList("simple/data", "floor", postData)
902
+			.subscribe((result) => {
903
+				if (result.status == 200) {
904
+					this.allFloorList = result.list;
905
+					if(type=='edit'){
906
+						this.validateForm.controls.floorId.setValue(this.userInfo.floorDTO?this.userInfo.floorDTO.id+"":null);
907
+					}
908
+				}
909
+			});
910
+	}
911
+	
912
+	// 表单提交
913
+	btnLoading:boolean = false;
914
+	submitForm(): void {
915
+	  var that = this;
916
+	  for (const i in that.validateForm.controls) {
917
+	    that.validateForm.controls[i].markAsDirty({ onlySelf: true });
918
+	    that.validateForm.controls[i].updateValueAndValidity();
919
+	  }
920
+	  if (that.validateForm.invalid) return;
921
+	  that.btnLoading = true;
922
+	  let data = {
923
+	    user: {
924
+	      name: that.validateForm.value.name,
925
+	      account: that.validateForm.value.account,
926
+	      phone: that.validateForm.value.phone,
927
+				buildingId: that.validateForm.value.buildingId,
928
+				floorId: that.validateForm.value.floorId,
929
+				address: that.validateForm.value.address,
930
+				id: that.userId
931
+	    },
932
+	  };
933
+	  that.mainService
934
+	    .coopData("updData", "user", data)
935
+	    .subscribe((data) => {
936
+	      that.btnLoading = false;
937
+	      that.hideModal();
938
+	      that.initForm();
939
+	      if (data.status == 200) {
940
+	        that.showPromptModal("修改", true, "");
941
+					this.getCurrentUserNow();
942
+	      } else{
943
+					that.showPromptModal("修改", false, data.msg);
944
+				}
945
+	    });
946
+	}
947
+	
948
+	hideModal() {
949
+	  this.infoModal = false;
950
+	}
951
+	
952
+	// 初始化新增form表单
953
+	initForm() {
954
+	  this.validateForm = this.fb.group({
955
+	    name: [null, [Validators.required]],
956
+	    account: [null, [Validators.required]],
957
+			buildingId: [null],
958
+			floorId: [null],
959
+			address: [null],
960
+	    phone: [null],
961
+	  });
962
+	}
963
+	
964
+	promptModalShow:boolean = false;
965
+	promptContent:any = null;
966
+	ifSuccess:any = null;
967
+	promptInfo:any = null;
968
+	// 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
969
+	showPromptModal(con, success, promptInfo?) {
970
+	  this.promptModalShow = false;
971
+	  this.promptContent = con;
972
+	  this.ifSuccess = success;
973
+	  this.promptInfo = promptInfo;
974
+	  setTimeout(() => {
975
+	    this.promptModalShow = true;
976
+	  }, 100);
977
+	}
978
+}
979
+

+ 18 - 0
src/app/views/web-repairs/web-repairs.module.ts

@@ -0,0 +1,18 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { WebRepairsRoutingModule } from './web-repairs-routing.module';
5
+import { ShareModule } from 'src/app/share/share.module';
6
+import { WebRepairsComponent } from './web-repairs.component';
7
+import { DragModule } from 'src/app/directives/drag/drag.module';
8
+
9
+@NgModule({
10
+  declarations: [WebRepairsComponent],
11
+  imports: [
12
+		DragModule,
13
+    CommonModule,
14
+    WebRepairsRoutingModule,
15
+    ShareModule
16
+  ]
17
+})
18
+export class WebRepairsModule { }

+ 95 - 26
src/assets/iconfont/demo_index.html

@@ -55,6 +55,30 @@
55 55
           <ul class="icon_lists dib-box">
56 56
           
57 57
             <li class="dib">
58
+              <span class="icon icon_transport">&#xe688;</span>
59
+                <div class="name">任务管理</div>
60
+                <div class="code-name">&amp;#xe688;</div>
61
+              </li>
62
+          
63
+            <li class="dib">
64
+              <span class="icon icon_transport">&#xe672;</span>
65
+                <div class="name">新增</div>
66
+                <div class="code-name">&amp;#xe672;</div>
67
+              </li>
68
+          
69
+            <li class="dib">
70
+              <span class="icon icon_transport">&#xea41;</span>
71
+                <div class="name">文档管理</div>
72
+                <div class="code-name">&amp;#xea41;</div>
73
+              </li>
74
+          
75
+            <li class="dib">
76
+              <span class="icon icon_transport">&#xe617;</span>
77
+                <div class="name">消息</div>
78
+                <div class="code-name">&amp;#xe617;</div>
79
+              </li>
80
+          
81
+            <li class="dib">
58 82
               <span class="icon icon_transport">&#xe671;</span>
59 83
                 <div class="name">bg-add</div>
60 84
                 <div class="code-name">&amp;#xe671;</div>
@@ -601,12 +625,6 @@
601 625
               </li>
602 626
           
603 627
             <li class="dib">
604
-              <span class="icon icon_transport">&#xe617;</span>
605
-                <div class="name">消息</div>
606
-                <div class="code-name">&amp;#xe617;</div>
607
-              </li>
608
-          
609
-            <li class="dib">
610 628
               <span class="icon icon_transport">&#xe673;</span>
611 629
                 <div class="name">向左</div>
612 630
                 <div class="code-name">&amp;#xe673;</div>
@@ -1086,9 +1104,9 @@
1086 1104
 <pre><code class="language-css"
1087 1105
 >@font-face {
1088 1106
   font-family: 'icon_transport';
1089
-  src: url('iconfont.woff2?t=1747898804538') format('woff2'),
1090
-       url('iconfont.woff?t=1747898804538') format('woff'),
1091
-       url('iconfont.ttf?t=1747898804538') format('truetype');
1107
+  src: url('iconfont.woff2?t=1748055150475') format('woff2'),
1108
+       url('iconfont.woff?t=1748055150475') format('woff'),
1109
+       url('iconfont.ttf?t=1748055150475') format('truetype');
1092 1110
 }
1093 1111
 </code></pre>
1094 1112
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -1115,6 +1133,42 @@
1115 1133
         <ul class="icon_lists dib-box">
1116 1134
           
1117 1135
           <li class="dib">
1136
+            <span class="icon icon_transport transport-renwuguanli"></span>
1137
+            <div class="name">
1138
+              任务管理
1139
+            </div>
1140
+            <div class="code-name">.transport-renwuguanli
1141
+            </div>
1142
+          </li>
1143
+          
1144
+          <li class="dib">
1145
+            <span class="icon icon_transport transport-xinzeng"></span>
1146
+            <div class="name">
1147
+              新增
1148
+            </div>
1149
+            <div class="code-name">.transport-xinzeng
1150
+            </div>
1151
+          </li>
1152
+          
1153
+          <li class="dib">
1154
+            <span class="icon icon_transport transport-wendangguanli"></span>
1155
+            <div class="name">
1156
+              文档管理
1157
+            </div>
1158
+            <div class="code-name">.transport-wendangguanli
1159
+            </div>
1160
+          </li>
1161
+          
1162
+          <li class="dib">
1163
+            <span class="icon icon_transport transport-xiaoxi"></span>
1164
+            <div class="name">
1165
+              消息
1166
+            </div>
1167
+            <div class="code-name">.transport-xiaoxi
1168
+            </div>
1169
+          </li>
1170
+          
1171
+          <li class="dib">
1118 1172
             <span class="icon icon_transport transport-bg-add"></span>
1119 1173
             <div class="name">
1120 1174
               bg-add
@@ -1934,15 +1988,6 @@
1934 1988
           </li>
1935 1989
           
1936 1990
           <li class="dib">
1937
-            <span class="icon icon_transport transport-xiaoxi"></span>
1938
-            <div class="name">
1939
-              消息
1940
-            </div>
1941
-            <div class="code-name">.transport-xiaoxi
1942
-            </div>
1943
-          </li>
1944
-          
1945
-          <li class="dib">
1946 1991
             <span class="icon icon_transport transport-xiangzuo1"></span>
1947 1992
             <div class="name">
1948 1993
               向左
@@ -2664,6 +2709,38 @@
2664 2709
           
2665 2710
             <li class="dib">
2666 2711
                 <svg class="icon svg-icon" aria-hidden="true">
2712
+                  <use xlink:href="#transport-renwuguanli"></use>
2713
+                </svg>
2714
+                <div class="name">任务管理</div>
2715
+                <div class="code-name">#transport-renwuguanli</div>
2716
+            </li>
2717
+          
2718
+            <li class="dib">
2719
+                <svg class="icon svg-icon" aria-hidden="true">
2720
+                  <use xlink:href="#transport-xinzeng"></use>
2721
+                </svg>
2722
+                <div class="name">新增</div>
2723
+                <div class="code-name">#transport-xinzeng</div>
2724
+            </li>
2725
+          
2726
+            <li class="dib">
2727
+                <svg class="icon svg-icon" aria-hidden="true">
2728
+                  <use xlink:href="#transport-wendangguanli"></use>
2729
+                </svg>
2730
+                <div class="name">文档管理</div>
2731
+                <div class="code-name">#transport-wendangguanli</div>
2732
+            </li>
2733
+          
2734
+            <li class="dib">
2735
+                <svg class="icon svg-icon" aria-hidden="true">
2736
+                  <use xlink:href="#transport-xiaoxi"></use>
2737
+                </svg>
2738
+                <div class="name">消息</div>
2739
+                <div class="code-name">#transport-xiaoxi</div>
2740
+            </li>
2741
+          
2742
+            <li class="dib">
2743
+                <svg class="icon svg-icon" aria-hidden="true">
2667 2744
                   <use xlink:href="#transport-bg-add"></use>
2668 2745
                 </svg>
2669 2746
                 <div class="name">bg-add</div>
@@ -3392,14 +3469,6 @@
3392 3469
           
3393 3470
             <li class="dib">
3394 3471
                 <svg class="icon svg-icon" aria-hidden="true">
3395
-                  <use xlink:href="#transport-xiaoxi"></use>
3396
-                </svg>
3397
-                <div class="name">消息</div>
3398
-                <div class="code-name">#transport-xiaoxi</div>
3399
-            </li>
3400
-          
3401
-            <li class="dib">
3402
-                <svg class="icon svg-icon" aria-hidden="true">
3403 3472
                   <use xlink:href="#transport-xiangzuo1"></use>
3404 3473
                 </svg>
3405 3474
                 <div class="name">向左</div>

+ 19 - 7
src/assets/iconfont/iconfont.css

@@ -1,8 +1,8 @@
1 1
 @font-face {
2 2
   font-family: "icon_transport"; /* Project id 4543613 */
3
-  src: url('iconfont.woff2?t=1747898804538') format('woff2'),
4
-       url('iconfont.woff?t=1747898804538') format('woff'),
5
-       url('iconfont.ttf?t=1747898804538') format('truetype');
3
+  src: url('iconfont.woff2?t=1748055150475') format('woff2'),
4
+       url('iconfont.woff?t=1748055150475') format('woff'),
5
+       url('iconfont.ttf?t=1748055150475') format('truetype');
6 6
 }
7 7
 
8 8
 .icon_transport {
@@ -13,6 +13,22 @@
13 13
   -moz-osx-font-smoothing: grayscale;
14 14
 }
15 15
 
16
+.transport-renwuguanli:before {
17
+  content: "\e688";
18
+}
19
+
20
+.transport-xinzeng:before {
21
+  content: "\e672";
22
+}
23
+
24
+.transport-wendangguanli:before {
25
+  content: "\ea41";
26
+}
27
+
28
+.transport-xiaoxi:before {
29
+  content: "\e617";
30
+}
31
+
16 32
 .transport-bg-add:before {
17 33
   content: "\e671";
18 34
 }
@@ -377,10 +393,6 @@
377 393
   content: "\e628";
378 394
 }
379 395
 
380
-.transport-xiaoxi:before {
381
-  content: "\e617";
382
-}
383
-
384 396
 .transport-xiangzuo1:before {
385 397
   content: "\e673";
386 398
 }

文件差异内容过多而无法显示
+ 1 - 1
src/assets/iconfont/iconfont.js


+ 28 - 7
src/assets/iconfont/iconfont.json

@@ -6,6 +6,34 @@
6 6
   "description": "",
7 7
   "glyphs": [
8 8
     {
9
+      "icon_id": "6899011",
10
+      "name": "任务管理",
11
+      "font_class": "renwuguanli",
12
+      "unicode": "e688",
13
+      "unicode_decimal": 59016
14
+    },
15
+    {
16
+      "icon_id": "7366981",
17
+      "name": "新增",
18
+      "font_class": "xinzeng",
19
+      "unicode": "e672",
20
+      "unicode_decimal": 58994
21
+    },
22
+    {
23
+      "icon_id": "26851705",
24
+      "name": "文档管理",
25
+      "font_class": "wendangguanli",
26
+      "unicode": "ea41",
27
+      "unicode_decimal": 59969
28
+    },
29
+    {
30
+      "icon_id": "3315133",
31
+      "name": "消息",
32
+      "font_class": "xiaoxi",
33
+      "unicode": "e617",
34
+      "unicode_decimal": 58903
35
+    },
36
+    {
9 37
       "icon_id": "11882929",
10 38
       "name": "bg-add",
11 39
       "font_class": "bg-add",
@@ -643,13 +671,6 @@
643 671
       "unicode_decimal": 58920
644 672
     },
645 673
     {
646
-      "icon_id": "3315133",
647
-      "name": "消息",
648
-      "font_class": "xiaoxi",
649
-      "unicode": "e617",
650
-      "unicode_decimal": 58903
651
-    },
652
-    {
653 674
       "icon_id": "3292558",
654 675
       "name": "向左",
655 676
       "font_class": "xiangzuo1",

二进制
src/assets/iconfont/iconfont.ttf


二进制
src/assets/iconfont/iconfont.woff


二进制
src/assets/iconfont/iconfont.woff2