Browse Source

Merge branch 'master' into develop

seimin 4 days ago
parent
commit
1c5449a2c0

+ 24 - 1
src/app/components/configurationCenter/configuration-message/configuration-message.component.ts

@@ -172,7 +172,7 @@ export class ConfigurationMessageComponent implements OnInit {
172 172
 				  "[$起点科室$]",
173 173
 				  "[$终点科室$]",
174 174
 				];
175
-			}else if(data.noticeCode === 'work_order_remind' || data.noticeCode ==='work_order_remind_freedom'){
175
+			}else if(data.noticeCode === 'work_order_remind' || data.noticeCode ==='work_order_remind_freedom' || data.noticeCode === 'work_order_dispatch_reminder'){
176 176
 				this.varArr = [
177 177
 				  "[$任务类型$]",
178 178
 				  "[$工单单号$]",
@@ -377,6 +377,29 @@ export class ConfigurationMessageComponent implements OnInit {
377 377
       .subscribe((data) => {
378 378
         this.loading1 = false;
379 379
         if (data.status == 200) {
380
+					// let arr = [
381
+					// 	{
382
+					// 		noticeNode: '复诊时间',
383
+					// 		noticeDetails: '患者',
384
+					// 		shortMessageFlag: '1',
385
+					// 		flag: '1'
386
+					// 	},
387
+					// 	{
388
+					// 		noticeNode: '用药提醒',
389
+					// 		noticeDetails: '患者',
390
+					// 		shortMessageFlag: '1',
391
+					// 		flag: '1'
392
+					// 	},
393
+					// 	{
394
+					// 		noticeNode: '注意事项',
395
+					// 		noticeDetails: '患者',
396
+					// 		shortMessageFlag: '1',
397
+					// 		flag: '1'
398
+					// 	}
399
+					// ]
400
+					// for(let i of arr){
401
+					// 	data.list.unshift(i)
402
+					// }
380 403
           this.messageList = data.list || [];
381 404
         }else{
382 405
           this.message.error(data.msg || "请求数据失败");

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

@@ -147,7 +147,6 @@
147 147
             <th >患者姓名</th>
148 148
             <th >标本编码</th>
149 149
             <th >检验项目</th>
150
-						<th >核收信息</th>
151 150
             <th >标本类型</th>
152 151
             <th >状态</th>
153 152
             <th >收取时间</th>
@@ -155,6 +154,7 @@
155 154
             <th >中转时间</th>
156 155
             <th >送达时间</th>
157 156
             <th >送达人</th>
157
+						<th >核收信息</th>
158 158
             <th >终点科室</th>
159 159
           </tr>
160 160
         </thead>
@@ -167,10 +167,6 @@
167 167
             <td>{{ data.patientName}}<span *ngIf="data.bedNum">({{data.bedNum}})</span><br>{{data.residenceNo || data.patientNo}}</td>
168 168
             <td class="underline" (click)="viewSpecimenHistory(data)">{{ data.scode || "-" }}</td>
169 169
             <td>{{ data.specimenDesc || "-" }}</td>
170
-						<td>
171
-							<div>{{ data.checkCollectUserDTO ? data.checkCollectUserDTO.name : "" }}</div>
172
-							<div>{{ data.checkCollectTime|date:'yyyy-MM-dd HH:mm:ss' || "" }}</div>
173
-						</td>
174 170
             <td>{{ data.stype ? data.stype.name : "-" }}<span *ngIf="data.tubeType">,</span>{{data.tubeType && data.tubeType.name}}</td>
175 171
             <td>{{ data.speState ? data.speState.name : "-" }}</td>
176 172
             <td>{{ data.arriveTime || "-" }}</td>
@@ -178,6 +174,10 @@
178 174
             <td>{{ data.transTime || '-' }}</td>
179 175
             <td>{{ data.sendTime || '-' }}</td>
180 176
             <td>{{ data.delivererName || "-" }}</td>
177
+						<td>
178
+							<div>{{ data.checkCollectUserDTO ? data.checkCollectUserDTO.name : "" }}</div>
179
+							<div>{{ data.checkCollectTime|date:'yyyy-MM-dd HH:mm:ss' || "" }}</div>
180
+						</td>
181 181
             <td>
182 182
               {{ data.checkDept ? data.checkDept.dept : "-" }}
183 183
               <img *ngIf="data.urgent == 1" src="../../assets/images/icon_ji.png" alt="" class="ji" />

+ 14 - 0
src/app/views/call-log/call-log.component.ts

@@ -89,6 +89,20 @@ export class CallLogComponent implements OnInit {
89 89
         this.loading1 = false;
90 90
         if (result["status"] == 200) {
91 91
           this.listOfData = result["list"];
92
+					// this.listOfData[0].callDept = '王茹'
93
+					// this.listOfData[1].callDept = '李丽'
94
+					// this.listOfData[1].path = '2222'
95
+					// this.listOfData[2].callDept = '何冲'
96
+					// this.listOfData[2].path = '2222'
97
+					// this.listOfData[3].callDept = '宋佳'
98
+					// this.listOfData[3].path = '2222'
99
+					// this.listOfData[4].callDept = '李招娣'
100
+					// this.listOfData[4].path = '2222'
101
+					// this.listOfData[5].callDept = '吴存福'
102
+					// this.listOfData[5].path = '2222'
103
+					// this.listOfData[6].callDept = '王春芳'
104
+					// this.listOfData[6].path = '2222'
105
+					// this.listOfData[7].callDept = '王林'
92 106
           this.listLength = result["totalNum"];
93 107
         }
94 108
       });

+ 35 - 0
src/app/views/fuwutai/fuwutai.component.html

@@ -895,6 +895,28 @@
895 895
             </button>
896 896
           </div>
897 897
         </div>
898
+				<!-- 演示用 -->
899
+<!-- 				<div class="fixedMenu">
900
+				  <div class="menuItems">
901
+				    <div class="item itemLink ellipsis-oneline cursorDefault w100" nz-tooltip>
902
+				      通话保持
903
+				    </div>
904
+				  </div>
905
+				</div>
906
+				<div class="fixedMenu" (click)="openYsModal(1)">
907
+				  <div class="menuItems">
908
+				    <div class="item itemLink ellipsis-oneline cursorDefault w100" nz-tooltip>
909
+				      转接
910
+				    </div>
911
+				  </div>
912
+				</div>
913
+				<div class="fixedMenu" (click)="openYsModal(2)">
914
+				  <div class="menuItems">
915
+				    <div class="item itemLink ellipsis-oneline cursorDefault w100" nz-tooltip>
916
+				      三方通话
917
+				    </div>
918
+				  </div>
919
+				</div> -->
898 920
       </div>
899 921
     </div>
900 922
   </div>
@@ -2167,3 +2189,16 @@
2167 2189
 		<input nz-input type="text" placeholder="请输入删除原因" [(ngModel)]="delReason" />
2168 2190
 	</div>
2169 2191
 </nz-modal>
2192
+
2193
+<!-- 演示用 -->
2194
+<nz-modal
2195
+	[(nzVisible)]="ysModal"
2196
+	[nzTitle]="textTitle"
2197
+	(nzOnCancel)="ysOrderModal()"
2198
+	(nzOnOk)="confirmTestOk()"
2199
+	[nzOkLoading]="btnLoading"
2200
+	>
2201
+	<div class="del-modal">
2202
+		<input nz-input type="text" [placeholder]="textPlaceholder" [(ngModel)]="testContent" />
2203
+	</div>
2204
+</nz-modal>

+ 36 - 0
src/app/views/fuwutai/fuwutai.component.ts

@@ -186,6 +186,42 @@ export class FuwutaiComponent implements OnInit {
186 186
   coopBtns: any = {};
187 187
 	validateZwForm: FormGroup; //新增政务值班表单
188 188
 	
189
+	/*  演示open start */
190
+	ysModal:boolean = false;
191
+	testContent:any = '';
192
+	textPlaceholder:any;
193
+	textTitle:any;
194
+	openYsModal(type){
195
+		if(type==1){
196
+			this.textTitle = '转接'
197
+			this.textPlaceholder = '请输入转接电话'
198
+		}else{
199
+			this.textTitle = '三方通话'
200
+			this.textPlaceholder = '请输入第三方号码'
201
+		}
202
+		this.ysModal = true
203
+	}
204
+	
205
+	// 确认
206
+	confirmTestOk() {
207
+		if(this.testContent==''){
208
+			this.msg.error('电话号码不能为空')
209
+			return
210
+		}
211
+	  this.btnLoading = true;
212
+		setTimeout(_=>{
213
+			this.ysOrderModal();
214
+			this.showPromptModal("操作", true, "");
215
+		}, 1500)
216
+	}
217
+	
218
+	// 关闭模态框
219
+	ysOrderModal() {
220
+	  this.ysModal = false;
221
+	}
222
+	
223
+	/*  演示open end */
224
+	
189 225
 	// 一键派单
190 226
 	sendModal:boolean = false;
191 227
 	allSendOrders(){

+ 6 - 2
src/app/views/main/main-routing.module.ts

@@ -682,8 +682,12 @@ const routes: Routes = [
682 682
 			{
683 683
 			  path: "workLog",
684 684
 			  loadChildren: () => import("../work-log/work-log.module").then((m) => m.WorkLogModule),
685
-			}
686
-			
685
+			},
686
+			// 个人知识库
687
+			{
688
+			  path: "personageRepository",
689
+			  loadChildren: () => import("../personage-repository/personage-repository.module").then((m) => m.PersonageRepositoryModule),
690
+			},
687 691
     ],
688 692
   },
689 693
 ];

+ 42 - 0
src/app/views/main/main.component.html

@@ -30,6 +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-xiaoxi green" (click)="toMessage()" nz-tooltip nzTooltipTitle="个人消息通知"></i> -->
33 34
           <div class="dropdown">
34 35
             <i class="icon_transport transport-tianjiahover green" (mouseenter)="showFastDropdown = true" (mouseleave)="showFastDropdown = false"></i>
35 36
             <div class="dropdown-content ct" [hidden]="!showFastDropdown" (mouseenter)="showFastDropdown = true" (mouseleave)="showFastDropdown = false">
@@ -654,3 +655,44 @@
654 655
   [back]="back"
655 656
   (closeModel)="closeModel($event)"
656 657
 ></app-prompt-modal>
658
+
659
+  <!-- 演示查看消息 -->
660
+  <div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="ysMessageMoadl">
661
+    <div class="modalBody">
662
+      <div class="title">个人消息通知<i class="icon_transport transport-guanbi" (click)="hideModal()"></i>
663
+      </div>
664
+      <overlay-scrollbars #osComponentRef1 class="content">
665
+        <div class="list-template__bottom">
666
+        	<nz-table class="list-template__nzTable" [nzData]="ysData" nzSize="middle" [nzShowPagination]="false"
667
+        		[nzLoading]="grossLoading">
668
+        		<thead>
669
+        			<tr class="thead">
670
+        				<th>消息内容</th>
671
+        				<th nzWidth="15%">发送时间</th>
672
+								<th nzWidth="12%">发送方</th>
673
+								<th nzWidth="12%">是否已读</th>
674
+        				<th nzWidth="20%">操作</th>
675
+        			</tr>
676
+        		</thead>
677
+        		<tbody>
678
+        			<tr *ngFor="let data of ysData">
679
+								<td>{{data.content}}</td>
680
+        				<td>{{ data.time}}</td>
681
+								<td>{{ data.takePart}}</td>
682
+								<td>{{ data.specimenNum}}</td>
683
+        				<td>
684
+        				  <div class="coop">
685
+        				    <span>查看消息</span>
686
+										<span>标为已读</span>
687
+        				  </div>
688
+        				</td>
689
+        			</tr>
690
+        		</tbody>
691
+        	</nz-table>
692
+        </div>
693
+      </overlay-scrollbars>
694
+      <div class="display_flex justify-content_flex-center">
695
+        <button class="btn" nz-button nzType="primary" (click)="hideModal()">知道了</button>
696
+      </div>
697
+    </div>
698
+  </div>

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

@@ -1197,3 +1197,210 @@ nz-header.ant-layout-header {
1197 1197
 	  font-size: 12px;
1198 1198
 	  color: @primary-color;
1199 1199
 	}
1200
+
1201
+.save {
1202
+  position: fixed;
1203
+  left: 0;
1204
+  top: 0;
1205
+  width: 100%;
1206
+  height: 100%;
1207
+  background: rgba(0, 0, 0, 0.4);
1208
+  z-index: 99;
1209
+
1210
+  .modalBody {
1211
+    width: 350px;
1212
+    background: #fff;
1213
+    border-radius: 5px;
1214
+    padding: 10px 20px;
1215
+    color: #333;
1216
+
1217
+    .title {
1218
+      width: 100%;
1219
+      text-align: center;
1220
+      font-size: 18px;
1221
+      position: relative;
1222
+
1223
+      i {
1224
+        position: absolute;
1225
+        right: 0;
1226
+        top: 0;
1227
+        font-size: 20px;
1228
+        color: #666;
1229
+        cursor: pointer;
1230
+        padding: 0 5px;
1231
+      }
1232
+    }
1233
+
1234
+    .content {
1235
+      width: 100%;
1236
+      height: 117px;
1237
+      background: #f9fafb;
1238
+      border: 1px solid #e5e9ed;
1239
+      border-radius: 5px;
1240
+      overflow: hidden;
1241
+      margin-top: 12px;
1242
+
1243
+      div {
1244
+        text-align: center;
1245
+        margin: 0;
1246
+
1247
+        &.icon {
1248
+          margin-top: 17px;
1249
+
1250
+          i {
1251
+            color: #34b349;
1252
+            font-size: 30px !important;
1253
+
1254
+            &.transport-wenhao {
1255
+              color: #f5a523;
1256
+            }
1257
+
1258
+            &.transport-shibai {
1259
+              color: #ff3a52;
1260
+            }
1261
+          }
1262
+        }
1263
+
1264
+        &.defeat {
1265
+          color: #333;
1266
+          font-size: 18px;
1267
+        }
1268
+
1269
+        &:nth-child(3) {
1270
+          font-size: 14px;
1271
+          color: #666;
1272
+        }
1273
+      }
1274
+    }
1275
+
1276
+    button {
1277
+      margin-top: 10px;
1278
+
1279
+      &.btn {
1280
+        margin-left: 8px;
1281
+      }
1282
+    }
1283
+  }
1284
+
1285
+  // 新增
1286
+  &.add {
1287
+    .modalBody {
1288
+      width: 80%;
1289
+      height: auto;
1290
+
1291
+      .content {
1292
+        width: 100%;
1293
+        height: auto;
1294
+        padding: 19px 14px 0 14px;
1295
+        max-height: 500px;
1296
+        overflow-y: auto;
1297
+				
1298
+				.list-template__bottom {
1299
+				  background: #f9fafb;
1300
+				  border: 1px solid #e5e9ed;
1301
+				  border-radius: 8px;
1302
+				  padding-bottom: 56px;
1303
+				  position: relative;
1304
+				  .list-template__nzTable {
1305
+				    padding: 16px 16px 0;
1306
+				
1307
+				    .thead {
1308
+				      background-image: linear-gradient(to right, @bg-start, @bg-end);
1309
+				
1310
+				      th {
1311
+				        background: transparent;
1312
+				        color: #fff;
1313
+				        text-align: center;
1314
+				      }
1315
+				    }
1316
+				
1317
+				    .ant-table-body {
1318
+				      border-bottom: 1px solid #e5e9ed;
1319
+				    }
1320
+				
1321
+				    .ant-table-tbody {
1322
+				      tr {
1323
+				        text-align: center;
1324
+				        color: #333;
1325
+				
1326
+				        td {
1327
+				          border: none;
1328
+				
1329
+				          &.tab_hover:hover{
1330
+				            text-decoration: underline;
1331
+				            cursor: pointer;
1332
+				          }
1333
+				
1334
+				          .coop {
1335
+				            button{
1336
+				              color: #333;
1337
+				            }
1338
+				            span,button {
1339
+				              display: inline-block;
1340
+				              padding: 0 8px;
1341
+				              cursor: pointer;
1342
+				              position: relative;
1343
+				
1344
+				              &::after {
1345
+				                content: "|";
1346
+				                position: absolute;
1347
+				                top: 0;
1348
+				                right: 0;
1349
+				              }
1350
+				
1351
+				              &:hover,
1352
+				              &:active {
1353
+				                color: @primary-color;
1354
+				              }
1355
+				
1356
+				              &:nth-last-child(1) {
1357
+				                &::after {
1358
+				                  content: "";
1359
+				                }
1360
+				              }
1361
+				            }
1362
+				          }
1363
+				        }
1364
+				      }
1365
+				    }
1366
+				  }
1367
+				  .list-template__pagination {
1368
+				    height: 56px;
1369
+				    display: flex;
1370
+				    align-items: center;
1371
+				    position: absolute;
1372
+				    right: 8px;
1373
+				  }
1374
+				}
1375
+				
1376
+        .addForm {
1377
+          .ant-form-item {
1378
+            margin-bottom: 14px;
1379
+
1380
+            .ant-form-item-label {
1381
+              line-height: 14px;
1382
+              text-align: left;
1383
+            }
1384
+          }
1385
+        }
1386
+
1387
+        .editForm {
1388
+          .ant-form-item {
1389
+            margin-bottom: 14px;
1390
+
1391
+            .ant-form-item-label {
1392
+              line-height: 0;
1393
+              text-align: left;
1394
+            }
1395
+          }
1396
+        }
1397
+      }
1398
+
1399
+      button {
1400
+        &:nth-child(1) {
1401
+          margin-right: 20px;
1402
+        }
1403
+      }
1404
+    }
1405
+  }
1406
+}

+ 37 - 1
src/app/views/main/main.component.ts

@@ -120,7 +120,43 @@ export class MainComponent implements OnInit, OnDestroy {
120 120
 			// this.eventSubscription.unsubscribe();
121 121
 		// }
122 122
   }
123
-
123
+	
124
+	// 演示用
125
+	ysMessageMoadl:boolean = false;
126
+	ysData:any = [
127
+		{
128
+			content:'系统将于2025年8月11日 18:00 - 20:00进行升级,届时系统无法登录使用,请知悉。',
129
+			time:'2025-08-11 10:25:00',
130
+			takePart:'管理员',
131
+			specimenNum:'是'
132
+		},
133
+		{
134
+			content:'系统将于2025年8月13日 12:00 - 14:00进行系统维护,届时系统无法登录使用,请知悉。',
135
+			time:'2025-08-13 09:20:00',
136
+			takePart:'管理员',
137
+			specimenNum:'否'
138
+		},
139
+		{
140
+			content:'根据电梯维保计划,维保单位将于2025年8月15日对院区电梯进行维护保养,保养期间需逐栋停梯。',
141
+			time:'2025-08-15 12:00:00',
142
+			takePart:'管理员',
143
+			specimenNum:'否'
144
+		},
145
+		{
146
+			content:'为了广大住户的健康,给您提供干净的生活用水,根据服务中心供水水箱年度清洗计划,将于2025年8月18日9:00-18:00对生活水箱进行清洗,一期二期的所有楼栋二楼及以上楼层将会暂时停水,请您提前做好蓄水准备',
147
+			time:'2025-08-18 11:00:00',
148
+			takePart:'管理员',
149
+			specimenNum:'是'
150
+		},
151
+	]
152
+	toMessage(){
153
+		this.ysMessageMoadl = true
154
+	}
155
+	
156
+	hideModal(){
157
+		this.ysMessageMoadl = false
158
+	}
159
+	
124 160
   // 菜单图标名称是否包含transport-
125 161
   isTransportIcon(icon:any) {
126 162
     if(icon){

+ 16 - 0
src/app/views/personage-repository/personage-repository-routing.module.ts

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

+ 204 - 0
src/app/views/personage-repository/personage-repository.component.html

@@ -0,0 +1,204 @@
1
+<div class="list-template">
2
+  <div class="list-template__content">
3
+    <div class="list-template__top" nz-row>
4
+      <div nz-col nzLg='18' class="list-template__searchBox">
5
+				<div class="list-template__searchItem" *ngIf="coopBtns.strideLook">
6
+				  <span class="label">维修科室</span>:
7
+				  <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch
8
+				     nzAllowClear nzPlaceHolder="请选择维修科室" [(ngModel)]="maintainDepartment">
9
+				    <ng-container *ngFor="let option of maintainDept">
10
+				      <nz-option [nzLabel]="option.hosName" [nzValue]="option.id"></nz-option>
11
+				    </ng-container>
12
+				  </nz-select>
13
+				</div>
14
+
15
+        <div class="list-template__searchItem">
16
+          <span class="label">标题:</span>
17
+          <input nz-input class="formItem" [(ngModel)]="title" placeholder="请输入标题" nzSize="default" />
18
+        </div>
19
+        <div class="list-template__searchItem">
20
+          <span class="label">编号:</span>
21
+          <input nz-input class="formItem" [(ngModel)]="solutionNumber" placeholder="请输入编号" nzSize="default" />
22
+        </div>
23
+        <div class="list-template__searchItem">
24
+          <span class="label">创建人</span>:
25
+          <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch
26
+            (nzOnSearch)="changeUser($event)" nzAllowClear nzPlaceHolder="请选择创建人" [(ngModel)]="createUserId">
27
+            <ng-container *ngFor="let option of createUserList">
28
+              <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
29
+            </ng-container>
30
+            <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
31
+              <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
32
+            </nz-option>
33
+          </nz-select>
34
+        </div>
35
+      </div>
36
+      <div nz-col nzLg="6" class="list-template__btns">
37
+        <button class="btn default" (click)='search()'>搜索</button>
38
+        <button class="btn default ml8" (click)='reset()'>重置</button>
39
+				<button *ngIf="coopBtns.add" class="btn default ml8" (click)='addForm()'>新增</button>
40
+      </div>
41
+    </div>
42
+    <div class="list-template__bottom">
43
+      <nz-table class="list-template__nzTable" [nzData]="listOfData" nzSize="middle" [nzShowPagination]="false"
44
+        [nzLoading]="loading1">
45
+        <thead>
46
+          <tr class="thead">
47
+            <th nzWidth="5%">序号</th>
48
+						<th nzWidth="10%">知识库编号</th>
49
+            <th nzWidth="25%">标题</th>
50
+            <th nzWidth="15%">版本号 | 分类</th>
51
+            <th nzWidth="15%">日期</th>
52
+						<th nzWidth="10%">状态</th>
53
+            <th nzWidth="20%">操作</th>
54
+          </tr>
55
+        </thead>
56
+        <tbody>
57
+          <tr *ngFor="let data of listOfData let index=index;" (click)="selectedListData(data.id)">
58
+            <td>{{index+(pageIndex-1) * pageSize + 1}}</td>
59
+						<td>{{ data.solutionNumber }}</td>
60
+						<td>{{ data.title }}</td>
61
+						<td>
62
+							<div>V{{ data.versionNumber }}</div>
63
+							<div>{{ data.type ? data.type.name : '-' }}</div>
64
+						</td>
65
+						<td>
66
+							{{ data.createTime|date:'yyyy-MM-dd HH:mm' }}
67
+						</td>
68
+						<td>{{ data.status ? data.status.name : '-' }}</td>
69
+            <td>
70
+              <div class="coop">
71
+								<span *ngIf="coopBtns.edit && (data.status.name=='暂存' || data.status.name=='待整改')" (click)="edit($event,data)">编辑</span>
72
+								<span *ngIf="coopBtns.look" (click)="look($event,data)">查看</span>
73
+								<span *ngIf="coopBtns.upgrade && data.status.name=='已发布'" (click)="upgrade($event,data)">升级</span>
74
+								<span *ngIf="coopBtns.audit && data.status.name=='待审核'" (click)="audit($event,data)">审核</span>
75
+								<span *ngIf="coopBtns.pause && data.status.name=='已发布'" (click)="pause($event,data)">停用</span>
76
+								<span *ngIf="coopBtns.renew && data.status.name=='已停用'" (click)="renew($event,data)">恢复</span>
77
+								<span *ngIf="coopBtns.del" (click)="showDelModal($event,data.id)">删除</span>
78
+              </div>
79
+            </td>
80
+          </tr>
81
+        </tbody>
82
+      </nz-table>
83
+      <div class="list-template__pagination">
84
+        <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="listLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
85
+          (nzPageIndexChange)="getList()" (nzPageSizeChange)="getList()">
86
+        </nz-pagination>
87
+      </div>
88
+    </div>
89
+  </div>
90
+
91
+  <!-- 新增/编辑模态框 -->
92
+  <div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="modal">
93
+    <div class="modalBody">
94
+      <div class="title">{{optType=='audit'?'审核':'查看'}}</div>
95
+      <!-- <overlay-scrollbars #osComponentRef1 class="content"> -->
96
+       <div class="view-box">
97
+				 <div class="view-item left-box">
98
+					 <div class="item-left-list"
99
+					 [ngClass]="{'activeClass': index == vIndex}"
100
+					 *ngFor="let item of detailData let index=index;" (click)="versionsClick(item, index)">V{{item.versionNumber}}</div>
101
+				 </div>
102
+				 <div class="view-item center-box" *ngIf="lookData&&lookData.title">
103
+					 <div class="title">{{lookData.title}}</div>
104
+					 <div class="title-sign">
105
+						 <div class="width-180">知识分类:{{lookData.type.name}}</div>
106
+						 <div>报修可见:{{lookData.repairVisible=='1'?'是':'否'}}</div>
107
+						 <div>版本号:V{{lookData.versionNumber || ''}}</div>
108
+					 </div>
109
+					 <div class="title-sign">
110
+						 <div class="width-180" *ngIf="lookData.type.name=='故障现象'">关联故障:{{lookData.incidentCategory?lookData.incidentCategory.mutiCategory: ''}}</div>
111
+						 <div class="width-180" *ngIf="lookData.type.name=='日常巡检'">关联巡检:{{lookData.inspectionForm?lookData.inspectionForm.name: ''}}</div>
112
+						 <div>关联产品:{{lookData.assetProduct?lookData.assetProduct.name:''}}</div>
113
+					 </div>
114
+					 <div class="content-class" *ngIf="richText" [innerHTML]="richText"></div>
115
+					 <div class="file-box" *ngIf="fileData.length>0">
116
+						 <div>附件列表:</div>
117
+						 <div>
118
+							 <div class="file-class" *ngFor="let item of fileData" (click)="fileClick(item)">
119
+								 {{item.name}}
120
+								<span nz-icon nzType="download" nzTheme="outline" class="download-icon"></span>
121
+							 </div>
122
+						 </div>
123
+					 </div>
124
+				 </div>
125
+				 <div class="view-item right-box" *ngIf="solutionLogs">
126
+					 <nz-steps [nzCurrent]="stepLength" nzDirection="vertical" nzSize="small">
127
+						<ng-container *ngFor="let item of solutionLogs; let index = index">
128
+						    <nz-step
129
+						      [nzDescription]="tpl"
130
+						    >
131
+						    </nz-step>
132
+						    <ng-template #tpl>
133
+									<div *ngIf="index==solutionLogs.length-1" class="step-size">
134
+										<div>
135
+											<span style="color: #49B856;">{{item.operationStatus.name}}</span>
136
+											&nbsp;&nbsp;&nbsp;
137
+											<span style="color:#333;">{{item.operationUser.name}}</span>
138
+										</div>
139
+										<div style="color:#333;">{{ item.time }}</div>
140
+										<div class="back-class" nz-tooltip [nzTooltipTitle]="item.rejectedReason" *ngIf="item.operationStatus.name=='审核驳回'">(驳回原因)</div>
141
+									</div>
142
+									<div *ngIf="index!=solutionLogs.length-1" class="step-size">
143
+										<div>
144
+											<span>{{item.operationStatus.name}}</span>
145
+											&nbsp;&nbsp;&nbsp;
146
+											<span>{{item.operationUser.name}}</span>
147
+										</div>
148
+										<div>{{ item.time }}</div>
149
+										<div class="back-class" nz-tooltip [nzTooltipTitle]="item.rejectedReason" *ngIf="item.operationStatus.name=='审核驳回'">(驳回原因)</div>
150
+									</div>
151
+						    </ng-template>
152
+						  </ng-container>
153
+					 </nz-steps>
154
+				 </div>
155
+			 </div>
156
+      <!-- </overlay-scrollbars> -->
157
+      <div class="display_flex justify-content_flex-center">
158
+        <button class="btn" *ngIf="optType=='audit' && vIndex==0" nz-button nzType="primary" (click)="submitForm(1)" [nzLoading]="btnLoading1">通过</button>
159
+				<button class="btn" *ngIf="optType=='audit' && vIndex==0" nz-button nzType="primary" (click)="submitForm(2)" [nzLoading]="btnLoading2">驳回</button>
160
+				<button class="btn cancel" *ngIf="optType=='audit'" nz-button nzType="default" (click)="hideModal()">取消</button>
161
+				<button class="btn" *ngIf="optType=='look'" nz-button nzType="primary" (click)="hideModal()">知道了</button>
162
+
163
+			</div>
164
+			<div class="mask-style" *ngIf="isSpinning">
165
+				<nz-spin nzSimple class="spin-style"></nz-spin>
166
+			</div>
167
+    </div>
168
+  </div>
169
+  <!-- 删除模态框 -->
170
+  <app-dialog-delete [delModal]="delModal" (hideDelModalEvent)="hideDelModal()" [btnLoading]="btnLoading"
171
+    (confirmDelEvent)="confirmDel()" content="您确认要删除此知识库吗?"></app-dialog-delete>
172
+
173
+	<!-- 停用模态框 -->
174
+	<app-dialog-delete [delModal]="pauseModal" (hideDelModalEvent)="hideDelModal2()" [btnLoading]="btnLoading"
175
+	  (confirmDelEvent)="confirmDel2()" content="您确认要停用此知识库吗?"></app-dialog-delete>
176
+
177
+	<!-- 恢复模态框 -->
178
+	<app-dialog-delete [delModal]="renewModal" (hideDelModalEvent)="hideDelModal3()" [btnLoading]="btnLoading"
179
+		(confirmDelEvent)="confirmDel3()" content="您确认要恢复此知识库吗?"></app-dialog-delete>
180
+
181
+	<!-- 审核通过模态框 -->
182
+	<app-dialog-delete [delModal]="auditModal" (hideDelModalEvent)="hideDelModal4()" [btnLoading]="btnLoading"
183
+		(confirmDelEvent)="confirmDel4()" content="您确认通过此知识库的审核吗?"></app-dialog-delete>
184
+
185
+	<!-- 审核驳回模态框 -->
186
+	<nz-modal [(nzVisible)]="rejectModal" nzTitle="您确认驳回此知识库吗?" (nzOnCancel)="rejectCancel()" (nzOnOk)="rejectOk()">
187
+		<textarea
188
+			nz-input
189
+			[(ngModel)]="rejectData"
190
+			placeholder="请输入整改意见"
191
+			[nzAutosize]="{ minRows: 2, maxRows: 6 }"
192
+
193
+		></textarea>
194
+	</nz-modal>
195
+
196
+  <!-- 编辑模态框 -->
197
+  <app-dialog-delete [delModal]="editModal" (hideDelModalEvent)="hideDelModal1()" [btnLoading]="saveLoading"
198
+    (confirmDelEvent)="confirmDel1()" [content]="'保存后会重置您的发药科室的药品信息,您确认吗?'"></app-dialog-delete>
199
+
200
+</div>
201
+<!-- 操作成功/失败提示框 -->
202
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
203
+  [info]="promptInfo" (closeModel)="closeModel()"></app-prompt-modal>
204
+

+ 343 - 0
src/app/views/personage-repository/personage-repository.component.less

@@ -0,0 +1,343 @@
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: 70%;
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
+			margin-bottom: 10px;
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
+    .content {
60
+      width: 100%;
61
+      height: 117px;
62
+      background: #f9fafb;
63
+      border: 1px solid #e5e9ed;
64
+      border-radius: 5px;
65
+      overflow: hidden;
66
+      margin-top: 12px;
67
+
68
+      div {
69
+        text-align: center;
70
+        margin: 0;
71
+
72
+        &.icon {
73
+          margin-top: 17px;
74
+
75
+          i {
76
+            color: #34b349;
77
+            font-size: 30px !important;
78
+
79
+            &.transport-wenhao {
80
+              color: #f5a523;
81
+            }
82
+
83
+            &.transport-shibai {
84
+              color: #ff3a52;
85
+            }
86
+          }
87
+        }
88
+
89
+        &.defeat {
90
+          color: #333;
91
+          font-size: 18px;
92
+        }
93
+
94
+        &:nth-child(3) {
95
+          font-size: 14px;
96
+          color: #666;
97
+        }
98
+      }
99
+    }
100
+
101
+    button {
102
+      margin-top: 10px;
103
+
104
+      &.btn {
105
+        margin-left: 8px;
106
+      }
107
+    }
108
+  }
109
+
110
+  // 查看/审核
111
+  &.add {
112
+    .modalBody {
113
+      width: 70%;
114
+      height: auto;
115
+				.mask-style{
116
+					width: 100%;
117
+					height: 100%;
118
+					position: fixed;
119
+					top: 0;
120
+					left: 0;
121
+					z-index: 999;
122
+					display: flex;
123
+					background: rgba(0,0,0,0.2);
124
+					align-items: center;
125
+					justify-content: center;
126
+				}
127
+				.spin-style{
128
+					z-index:9999;
129
+				}
130
+			.view-box{
131
+				height: 400px;
132
+				display: flex;
133
+				border: 1px solid #eee;
134
+				.left-box{
135
+					flex: 1;
136
+					font-size: 14px;
137
+					border-right: 1px solid #E9E9E9;
138
+					overflow-y: auto;
139
+					.item-left-list{
140
+						display: flex;
141
+						align-items: center;
142
+						height: 35px;
143
+						padding-left: 10px;
144
+						cursor: pointer;
145
+					}
146
+				}
147
+				.center-box{
148
+					flex: 6;
149
+					padding: 0 20px 20px 20px;
150
+					border-right: 1px solid #E9E9E9;
151
+					height: auto;
152
+					overflow-y: auto;
153
+					.title{
154
+						margin: 10px 0 10px 0;
155
+						font-weight: bold;
156
+						font-size: 20px;
157
+						color: #000000;
158
+						font-style: normal;
159
+						text-transform: none;
160
+					}
161
+					.title-sign{
162
+						display: flex;
163
+						font-weight: 400;
164
+						font-size: 12px;
165
+						color: #555555;
166
+						margin-bottom: 5px;
167
+						.width-180{
168
+							width: 160px;
169
+						}
170
+						div{
171
+							margin-right: 60px;
172
+						}
173
+					}
174
+					.content-class{
175
+						margin-top: 20px;
176
+					}
177
+					.file-box{
178
+						margin-top: 30px;
179
+						font-size: 14px;
180
+						.file-class{
181
+							color: #1890FF;
182
+							text-decoration: underline;
183
+							margin-left: 10px;
184
+							cursor: pointer;
185
+						}
186
+						.download-icon{
187
+							margin-left: 8px;
188
+						}
189
+					}
190
+				}
191
+				.right-box{
192
+					flex: 1.6;
193
+					padding: 10px;
194
+					font-size: 14px;
195
+					overflow-y: auto;
196
+					.back-class{
197
+						color: red;
198
+						cursor: pointer;
199
+					}
200
+				}
201
+			}
202
+      .content {
203
+        width: 100%;
204
+        height: auto;
205
+        padding: 19px 14px 0 14px;
206
+        max-height: 500px;
207
+        overflow-y: auto;
208
+				
209
+				.ant-select{
210
+					width: 100%;
211
+				}
212
+				.ant-calendar-picker{
213
+					width: 100% !important;
214
+				}
215
+				.list-template__bottom {
216
+				  background: #f9fafb;
217
+				  border: 1px solid #e5e9ed;
218
+				  border-radius: 8px;
219
+				  padding-bottom: 56px;
220
+				  position: relative;
221
+				  .list-template__nzTable {
222
+				    padding: 16px 16px 0;
223
+				
224
+				    .thead {
225
+				      background-image: linear-gradient(to right, @bg-start, @bg-end);
226
+				
227
+				      th {
228
+				        background: transparent;
229
+				        color: #fff;
230
+				        text-align: center;
231
+				      }
232
+				    }
233
+				
234
+				    .ant-table-body {
235
+				      border-bottom: 1px solid #e5e9ed;
236
+				    }
237
+				
238
+				    .ant-table-tbody {
239
+				      tr {
240
+				        text-align: center;
241
+				        color: #333;
242
+				
243
+				        td {
244
+				          border: none;
245
+				
246
+				          &.tab_hover:hover{
247
+				            text-decoration: underline;
248
+				            cursor: pointer;
249
+				          }
250
+				
251
+				          .coop {
252
+				            button{
253
+				              color: #333;
254
+				            }
255
+				            span,button {
256
+				              display: inline-block;
257
+				              padding: 0 8px;
258
+				              cursor: pointer;
259
+				              position: relative;
260
+				
261
+				              &::after {
262
+				                content: "|";
263
+				                position: absolute;
264
+				                top: 0;
265
+				                right: 0;
266
+				              }
267
+				
268
+				              &:hover,
269
+				              &:active {
270
+				                color: @primary-color;
271
+				              }
272
+				
273
+				              &:nth-last-child(1) {
274
+				                &::after {
275
+				                  content: "";
276
+				                }
277
+				              }
278
+				            }
279
+				          }
280
+				        }
281
+				      }
282
+				    }
283
+				  }
284
+				  .list-template__pagination {
285
+				    height: 56px;
286
+				    display: flex;
287
+				    align-items: center;
288
+				    position: absolute;
289
+				    right: 8px;
290
+				  }
291
+				}
292
+				
293
+        .addForm {
294
+          .ant-form-item {
295
+            margin-bottom: 14px;
296
+
297
+            .ant-form-item-label {
298
+              line-height: 14px;
299
+              text-align: left;
300
+            }
301
+          }
302
+        }
303
+
304
+        .editForm {
305
+          .ant-form-item {
306
+            margin-bottom: 14px;
307
+
308
+            .ant-form-item-label {
309
+              line-height: 0;
310
+              text-align: left;
311
+            }
312
+          }
313
+        }
314
+      }
315
+    }
316
+  }
317
+}
318
+
319
+.activeClass{
320
+	background: #F0F6ED;
321
+}
322
+
323
+.monad{
324
+	margin-top: 20px;
325
+	.monad-list{
326
+		border: 1px solid #e7e7e7;
327
+		border-radius: 5px;
328
+		margin-bottom: 40px;
329
+		padding: 20px;
330
+	}
331
+	.monad-title{
332
+		text-align: center;
333
+		font-weight: 700;
334
+		font-size: 16px;
335
+	}
336
+	.monad-sign{
337
+		display: flex;
338
+		line-height: 30px;
339
+		div{
340
+			margin-right: 15px;
341
+		}
342
+	}
343
+}

+ 578 - 0
src/app/views/personage-repository/personage-repository.component.ts

@@ -0,0 +1,578 @@
1
+import { Component, OnInit, ViewChild } from "@angular/core";
2
+import { ActivatedRoute, Router } from "@angular/router";
3
+import { DomSanitizer } from '@angular/platform-browser';
4
+import {
5
+  FormBuilder,
6
+  Validators,
7
+  FormGroup,
8
+  FormControl,
9
+} from "@angular/forms";
10
+
11
+import { MainService } from "../../services/main.service";
12
+import { OverlayScrollbarsComponent } from "overlayscrollbars-ngx";
13
+import { ToolService } from "../../services/tool.service";
14
+import { format, startOfDay, endOfDay, subDays} from "date-fns";
15
+import { NzMessageService } from "ng-zorro-antd";
16
+import { Subject } from "rxjs";
17
+import { debounceTime, filter } from "rxjs/operators";
18
+import host from "../../../assets/js/http";
19
+import { HttpRequest, HttpResponse, HttpClient } from '@angular/common/http';
20
+
21
+@Component({
22
+  selector: "app-personage-repository",
23
+  templateUrl: "./personage-repository.component.html",
24
+  styleUrls: ["./personage-repository.component.less"],
25
+})
26
+export class PersonageRepositoryComponent implements OnInit {
27
+  @ViewChild("osComponentRef1", {
28
+    read: OverlayScrollbarsComponent,
29
+    static: false,
30
+  })
31
+  osComponentRef1: OverlayScrollbarsComponent;
32
+  constructor(
33
+    private message: NzMessageService,
34
+    private fb: FormBuilder,
35
+    private route: ActivatedRoute,
36
+    private router: Router,
37
+    private mainService: MainService,
38
+    private tool: ToolService,
39
+    private http: HttpClient,
40
+		private sanitizer: DomSanitizer
41
+  ) {}
42
+  searchTimerSubject = new Subject();
43
+  ngOnInit() {
44
+    this.searchParentDeptSubject.pipe(debounceTime(500)).subscribe((e) => {
45
+
46
+    });
47
+    this.searchTimerSubject.pipe(debounceTime(500)).subscribe((v) => {
48
+      let fun = v[0];
49
+      fun.call(this, v[1], v[2]);
50
+    });
51
+		this.hosId = this.tool.getCurrentHospital().id;
52
+    this.coopBtns = this.tool.initCoopBtns(this.route);
53
+		this.maintainDept = this.tool.getUserInfoPermission().dutyList
54
+		if(this.coopBtns.strideLook){
55
+			this.defaDept()
56
+		}
57
+		this.getList();
58
+    this.getUsers();
59
+  }
60
+  createUserList: any = []; //创建人列表
61
+	maintainDept:any = []; //维修科室
62
+	maintainDepartment:any;
63
+	hosIds:any; //当前院区
64
+	richText:any;
65
+  listOfData: any[] = []; //表格数据
66
+  promptContent: string; //操作提示框提示信息
67
+  ifSuccess: boolean; //操作成功/失败
68
+  promptInfo: string; //操作结果提示信息
69
+  promptModalShow: boolean; //操作提示框是否展示
70
+  modal: boolean = false; //新增/编辑模态框
71
+  add: boolean; //true:新增;false:编辑
72
+  validateForm: FormGroup; //新增/编辑表单
73
+  coopId: number; //表格中执行操作的id
74
+  department: number; //所属科室
75
+	hosId: number;
76
+	loadAllConsumeDept: boolean = true;//是否加载所有消耗科室
77
+  solutionNumber; //编号
78
+  createUserId; //创建人
79
+	title; //标题
80
+  num; //编码
81
+  deptalias; //别名
82
+  type; //类型
83
+  deptHandoverType; //类型
84
+	vIndex:number = 0;//版本号下标
85
+	stepLength: number = 0; //步骤条
86
+  pageIndex: number = 1; //页码
87
+  listLength: number = 10; //总条数
88
+  pageSize: number = 10; //每页条数
89
+  btnLoading: boolean = false; //确认按钮loading状态
90
+	btnLoading1: boolean = false; //审核通过按钮loading状态
91
+	btnLoading2: boolean = false; //审核驳回按钮loading状态
92
+  printLoading: boolean = false; //批量打印按钮loading状态
93
+  deptPhones: any = []; //新添加的科室电话列表
94
+  isAddDeptsPhone = true; //添加新的科室电话是否禁用
95
+  deptsPhoneId = 1; //科室电话自增id
96
+  allParentdepart: any = []; //所有的父级科室列表
97
+  hospitals1: any = []; //科室列表(搜索)
98
+	rowData: object = {}; //打印选择列表
99
+	editModal:boolean = false; //编辑时弹框
100
+	isSpinning: boolean = false; //页面loading状态
101
+	detailData:any;
102
+	solutionLogs:any;
103
+	lookData:any;
104
+	versionsData: any = []; //审核版本数据
105
+	fileData: any = []; //上传的附件数据
106
+  searchParentDeptSubject = new Subject();
107
+  // 初始化增删改按钮
108
+  coopBtns: any = {};
109
+	saveLoading:boolean = false;
110
+	taskTypeData:{id:''};
111
+	rejectModal:boolean = false;
112
+	rejectData:null;
113
+	optType:string = '';
114
+  // 导入---end
115
+  //搜索父级科室
116
+	isDeptLoading = false;
117
+  changeInp(e) {
118
+    this.searchParentDeptSubject.next(e);
119
+  }
120
+  // 配送建单
121
+  coopData:any = {};
122
+  addDateModal(data) {
123
+    this.coopData = data;
124
+    this.showDelModal1();
125
+  }
126
+
127
+	// 默认科室
128
+	defaDept(){
129
+		let itemDept = this.maintainDept.find(i=>i.id == this.hosId)
130
+		if(itemDept){
131
+			this.maintainDepartment = itemDept.id
132
+		}
133
+	}
134
+
135
+  showDelModal1() {
136
+    this.editModal = true;
137
+  }
138
+  hideDelModal1() {
139
+    this.editModal = false;
140
+  }
141
+
142
+  // 编辑保存
143
+  confirmDel1() {
144
+    var that = this;
145
+		for (const i in that.validateForm.controls) {
146
+		  that.validateForm.controls[i].markAsDirty();
147
+		  that.validateForm.controls[i].updateValueAndValidity();
148
+		}
149
+		if (that.validateForm.invalid) return;
150
+    let data: any = {
151
+			hosId:this.hosId,
152
+			pharmacy:this.validateForm.value.department,
153
+			id:that.coopId,
154
+			loadAllConsumeDept:this.validateForm.value.loadAllConsumeDept?1:0
155
+    };
156
+		that.saveLoading = true;
157
+		that.mainService
158
+		  .simplePost("addData", "drugsBatch", data)
159
+		  .subscribe((data) => {
160
+		    that.saveLoading = false;
161
+		    that.hideModal();
162
+		    if (data.status == 200) {
163
+					this.editModal = false;
164
+		      that.showPromptModal("编辑", true, "");
165
+		    } else {
166
+		      that.showPromptModal("编辑", false, data.msg);
167
+		    }
168
+		  });
169
+  }
170
+
171
+  // 搜索
172
+  search() {
173
+    this.pageIndex = 1;
174
+    this.getList();
175
+  }
176
+  // 重置
177
+  reset() {
178
+    this.pageIndex = 1;
179
+		this.solutionNumber = null;
180
+		this.title = null;
181
+    this.createUserId = undefined;
182
+		if(this.coopBtns.strideLook){
183
+			this.defaDept()
184
+		}
185
+    this.getList();
186
+  }
187
+  // 表格数据
188
+  loading1 = false;
189
+  getList() {
190
+    var that = this;
191
+    let data = {
192
+      idx: that.pageIndex - 1,
193
+      sum: that.pageSize,
194
+      solution: {
195
+    		title:this.title,
196
+				solutionNumber:this.solutionNumber,
197
+        createUserId: this.createUserId || undefined,
198
+    		hosId: this.hosId,
199
+      },
200
+    };
201
+		if(this.maintainDepartment){
202
+			data.solution.hosId = this.maintainDepartment;
203
+		}
204
+    this.loading1 = true;
205
+    that.mainService
206
+      .getFetchDataList("data", "solution", data)
207
+      .subscribe((data) => {
208
+        this.loading1 = false;
209
+        that.listOfData = data.list;
210
+        that.listLength = data.totalNum;
211
+      });
212
+  }
213
+
214
+	// 版本号点击
215
+	versionsClick(data, index){
216
+		this.vIndex = index
217
+		this.lookData = data
218
+		let content = data.content
219
+		if(content){
220
+			this.richText = this.sanitizer.bypassSecurityTrustHtml(content);
221
+		}else{
222
+			this.richText = ''
223
+		}
224
+	}
225
+
226
+	// 点击附件
227
+	fileClick(data){
228
+		console.log(222,data)
229
+		let a: any = document.createElement('a') // 创建一个元素
230
+		a.style = 'display: none' // 不能在页面中被看到,把他隐藏起来
231
+		a.style.height = '0px' // 给个0高度,避免影响页面布局
232
+		a.download = data.name;
233
+		a.href = data.url // 文件url地址
234
+		document.body.appendChild(a)  //  将其绑定在body上才能发挥作用
235
+		a.click() // 触发a标签的click事件
236
+		document.body.removeChild(a) // 删除该元素
237
+	}
238
+
239
+  hideModal() {
240
+    this.modal = false;
241
+  }
242
+
243
+	// 审核通过
244
+	confirmDel4() {
245
+		let data: any = {
246
+			id:this.rowId,
247
+			operationType: 'approve'
248
+		};
249
+		this.btnLoading1 = true;
250
+		this.mainService
251
+			.simplePost("updData", "solution", data)
252
+			.subscribe((data) => {
253
+				this.btnLoading1 = false;
254
+				this.hideDelModal4()
255
+				if (data.status == 200) {
256
+					this.showPromptModal("审核", true, "");
257
+				} else {
258
+					this.showPromptModal("审核", false, data.msg);
259
+				}
260
+			});
261
+	}
262
+
263
+	hideDelModal4() {
264
+	  this.auditModal = false;
265
+	}
266
+
267
+	// 审核驳回
268
+	rejectCancel(){
269
+		this.rejectModal = false
270
+	}
271
+
272
+	// 审核驳回
273
+	rejectOk(){
274
+		if(this.rejectData==null){
275
+			this.message.error('请输入整改意见')
276
+			return
277
+		}
278
+		let data: any = {
279
+			id:this.rowId,
280
+			operationType: 'approve',
281
+			rejectReason:this.rejectData
282
+		};
283
+		this.btnLoading2 = true;
284
+		this.mainService
285
+			.simplePost("updData", "solution", data)
286
+			.subscribe((data) => {
287
+				this.btnLoading2 = false;
288
+				this.rejectCancel()
289
+				if (data.status == 200) {
290
+					this.showPromptModal("驳回", true, "");
291
+				} else {
292
+					this.showPromptModal("驳回", false, data.msg);
293
+				}
294
+			});
295
+	}
296
+
297
+	closeModel(){
298
+		this.hideModal()
299
+	}
300
+
301
+  // 表单提交
302
+	auditModal = false;
303
+  submitForm(type): void {
304
+    var that = this;
305
+		if(type==1){
306
+			this.auditModal = true
307
+		}else{
308
+			this.rejectData = null
309
+			this.rejectModal = true
310
+		}
311
+  }
312
+
313
+	// 升级
314
+	upgrade(e, data){
315
+		e.stopPropagation();
316
+		this.router.navigateByUrl(`/repositoryManageAdd/${data.id}?type=upgrade`);
317
+	}
318
+
319
+	// 新增
320
+	addForm(){
321
+		this.router.navigateByUrl(`/repositoryManageAdd/0?type=personage`);
322
+	}
323
+
324
+	// 查看
325
+	look(e, data){
326
+		e.stopPropagation();
327
+		this.optType = 'look'
328
+		this.rowId = data.id
329
+		this.vIndex = 0
330
+		this.modal = true
331
+		var that = this;
332
+		let query = {
333
+			idx: 0,
334
+			sum: 9999,
335
+			solution: {
336
+				hosId: this.hosId,
337
+				operationType:'lookOver',
338
+				solutionNumber:data.solutionNumber
339
+			}
340
+		};
341
+		this.isSpinning = true
342
+		that.mainService
343
+			.getFetchDataList("data", "solution", query)
344
+			.subscribe((res) => {
345
+				this.getFile()
346
+				let data = res.list
347
+				this.detailData = data
348
+				let content = data[0].content
349
+				if(content){
350
+					this.richText = this.sanitizer.bypassSecurityTrustHtml(content);
351
+				}else{
352
+					this.richText = ''
353
+				}
354
+				for(let i of data){
355
+					if(i.solutionLogs.length>0){
356
+						for(let t of i.solutionLogs){
357
+							t.time = format(t.operationTime, 'yyyy-MM-dd HH:mm')
358
+						}
359
+					}
360
+				}
361
+				this.lookData = data[0]
362
+				this.solutionLogs = data[0].solutionLogs
363
+				this.stepLength = this.solutionLogs.length
364
+				this.isSpinning = false
365
+			});
366
+	}
367
+
368
+	getFile(){
369
+		this.mainService
370
+			.getPreviewImage('solution', this.rowId)
371
+			.subscribe((res:any)=> {
372
+				this.fileData = res.data.map((v) =>{
373
+					return{
374
+						name: v.name,
375
+						url: location.origin + '/file' + v.relativeFilePath
376
+					}
377
+				});
378
+			});
379
+	}
380
+
381
+	// 审核
382
+	rowId=null;
383
+	audit(e, data){
384
+		e.stopPropagation();
385
+		this.rowId = data.id
386
+		this.vIndex = 0
387
+		this.optType = 'audit'
388
+		this.modal = true
389
+		var that = this;
390
+		let query = {
391
+			idx: 0,
392
+			sum: 9999,
393
+			solution: {
394
+				hosId: this.hosId,
395
+				operationType:'lookOver',
396
+				solutionNumber:data.solutionNumber
397
+			}
398
+		};
399
+		this.isSpinning = true
400
+		that.mainService
401
+			.getFetchDataList("data", "solution", query)
402
+			.subscribe((res) => {
403
+				this.getFile()
404
+				let data = res.list
405
+				this.detailData = data
406
+				this.richText = this.sanitizer.bypassSecurityTrustHtml(data[0].content);
407
+				for(let i of data[0].solutionLogs){
408
+					i.time = format(i.operationTime, 'yyyy-MM-dd HH:mm')
409
+				}
410
+				this.lookData = data[0]
411
+				this.solutionLogs = data[0].solutionLogs
412
+				this.stepLength = this.solutionLogs.length
413
+				this.isSpinning = false
414
+			});
415
+
416
+	}
417
+
418
+	// 编辑
419
+	edit(e, data) {
420
+	  e.stopPropagation();
421
+	  this.router.navigateByUrl(`/repositoryManageAdd/${data.id}?type=edit`);
422
+	}
423
+
424
+	// 停用
425
+	pauseModal = false;
426
+	pause(e, data){
427
+		e.stopPropagation();
428
+		this.pauseModal = true;
429
+		this.coopId = data.id;
430
+	}
431
+
432
+	// 确认停用
433
+	confirmDel2() {
434
+	  var that = this;
435
+	  that.btnLoading = true;
436
+		let data: any = {
437
+			id:this.coopId,
438
+			operationType: 'deactivate'
439
+		};
440
+		this.mainService
441
+			.simplePost("updData", "solution", data)
442
+			.subscribe((data) => {
443
+				that.btnLoading = false;
444
+				that.pauseModal = false;
445
+				if (data.status == 200) {
446
+					this.showPromptModal("停用", true, "");
447
+				} else {
448
+					this.showPromptModal("停用", false, data.msg);
449
+				}
450
+			});
451
+	}
452
+
453
+	hideDelModal2() {
454
+	  this.pauseModal = false;
455
+	}
456
+
457
+
458
+	// 恢复
459
+	renewModal = false;
460
+	renew(e, data){
461
+		e.stopPropagation();
462
+		this.renewModal = true;
463
+		this.coopId = data.id;
464
+	}
465
+
466
+	// 确认恢复
467
+	confirmDel3() {
468
+	  var that = this;
469
+		that.btnLoading = true;
470
+		let data: any = {
471
+			id:this.coopId,
472
+			operationType: 'recover'
473
+		};
474
+		this.mainService
475
+			.simplePost("updData", "solution", data)
476
+			.subscribe((data) => {
477
+				that.btnLoading = false;
478
+				that.renewModal = false;
479
+				if (data.status == 200) {
480
+					this.showPromptModal("恢复", true, "");
481
+				} else {
482
+					this.showPromptModal("恢复", false, data.msg);
483
+				}
484
+			});
485
+	}
486
+
487
+	hideDelModal3() {
488
+	  this.renewModal = false;
489
+	}
490
+
491
+
492
+  // 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
493
+  showPromptModal(con, success, promptInfo?) {
494
+    this.promptModalShow = false;
495
+    this.promptContent = con;
496
+    this.ifSuccess = success;
497
+    this.promptInfo = promptInfo;
498
+    setTimeout(() => {
499
+      this.promptModalShow = true;
500
+    }, 100);
501
+    this.getList();
502
+  }
503
+
504
+  delModal: boolean = false; //删除模态框
505
+  coopIds: any;
506
+  coopFlag: any = false;
507
+  /**
508
+   *
509
+   * @param e 事件对象
510
+   * @param id
511
+   */
512
+  showDelModal(e, id) {
513
+    e.stopPropagation();
514
+    this.delModal = true;
515
+    this.coopId = id;
516
+  }
517
+  hideDelModal() {
518
+    this.delModal = false;
519
+  }
520
+  // 确认删除
521
+  confirmDel() {
522
+    var that = this;
523
+    that.btnLoading = true;
524
+    that.mainService
525
+      .coopTypeConfig(
526
+        "rmvData",
527
+        "solution",
528
+         [that.coopId]
529
+      )
530
+      .subscribe((data) => {
531
+        that.btnLoading = false;
532
+        that.delModal = false;
533
+        if (data.status==200) {
534
+          that.showPromptModal("删除", true, "");
535
+        } else {
536
+          that.showPromptModal("删除", false, data.data[0].msg);
537
+        }
538
+      });
539
+  }
540
+
541
+  detail(e, data) {
542
+    e.stopPropagation();
543
+		this.router.navigateByUrl(`/dispensingDetail/${data.id}`);
544
+  }
545
+
546
+  // 人员边输边搜节流阀
547
+  changeUser(e) {
548
+    this.searchTimer(this.getUsers, e);
549
+  }
550
+
551
+  // 边输入边搜索节流阀
552
+  searchTimer(fun, e) {
553
+    this.isLoading = true;
554
+    this.searchTimerSubject.next([fun, e]);
555
+  }
556
+
557
+  // 获取创建人
558
+  isLoading:boolean = false;
559
+  getUsers(e?) {
560
+    let postData = {
561
+      user: {
562
+        name: e,
563
+        hospital: { id: this.hosId },
564
+        simpleQuery: true,
565
+      },
566
+      idx: 0,
567
+      sum: 20,
568
+    };
569
+    this.isLoading = true;
570
+    this.mainService
571
+      .getFetchDataList("data", "user", postData)
572
+      .subscribe((data) => {
573
+        this.isLoading = false;
574
+        this.createUserList = data.list;
575
+      });
576
+  }
577
+
578
+}

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

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

+ 11 - 0
src/app/views/repository-manage-add/repository-manage-add.component.html

@@ -46,6 +46,17 @@
46 46
 					</nz-form-control>
47 47
 				</nz-form-item>
48 48
 				
49
+				<nz-form-item class="form-item" *ngIf="optType=='personage'">
50
+				  <nz-form-label nzRequired nzFor="scopes" [nzSm]="6" [nzXs]="24">可见范围</nz-form-label>
51
+					<nz-form-control nzErrorTip="请选择!" [nzSm]="16" [nzXs]="24">
52
+						<nz-radio-group formControlName="scopes">
53
+						  <label nz-radio nzValue="1">个人知识</label>
54
+						  <label nz-radio nzValue="2">部门知识</label>
55
+							<label nz-radio nzValue="3">公开知识</label>
56
+						</nz-radio-group>
57
+					</nz-form-control>
58
+				</nz-form-item>
59
+				
49 60
 				<nz-form-item class="form-item" *ngIf="classItem==2">
50 61
 				  <nz-form-label nzRequired nzFor="polling" [nzSm]="6" [nzXs]="24">关联巡检表</nz-form-label>
51 62
 				  <nz-form-control nzErrorTip="请选择关联巡检表!" [nzSm]="16" [nzXs]="24">

+ 14 - 1
src/app/views/repository-manage-add/repository-manage-add.component.ts

@@ -425,7 +425,11 @@ export class RepositoryManageAddComponent implements OnInit {
425 425
   }
426 426
 	// 返回
427 427
 	back(){
428
-		this.router.navigateByUrl(`/main/repositoryManage`);
428
+		if(this.optType == 'personage'){
429
+			this.router.navigateByUrl(`/main/personageRepository`);
430
+		}else{
431
+			this.router.navigateByUrl(`/main/repositoryManage`);
432
+		}
429 433
 	}
430 434
 
431 435
   hideModal() {
@@ -443,7 +447,16 @@ export class RepositoryManageAddComponent implements OnInit {
443 447
 			knowledgeClass: [null, [Validators.required]],
444 448
 			polling: [null,],
445 449
 			malfunction:[null,],
450
+			scopes:[null, [Validators.required]]
446 451
 		});
452
+		if(this.optType=='personage'){
453
+			this.validateForm.addControl(
454
+				'scopes',
455
+				new FormControl(null, Validators.required)
456
+			);
457
+		}else{
458
+			this.validateForm.removeControl('scopes')
459
+		}
447 460
   }
448 461
 
449 462
 	beforeUpload = (file: UploadFile) => {

+ 11 - 11
src/app/views/specimen-search/specimen-search.component.html

@@ -167,13 +167,13 @@
167 167
             <th>科室信息</th>
168 168
             <th nzWidth="7%">患者信息</th>
169 169
             <th>标本信息</th>
170
-            <th>采集信息</th>
171
-						<th>核收信息</th>
172 170
             <th nzWidth="8%">标本类型</th>
173 171
             <th nzWidth="7%">状态</th>
172
+						<th>采集信息</th>
174 173
             <th nzShowSort nzSortKey="arrive_time" [(nzSort)]="sortCurrent.arrive_time">收取信息</th>
175 174
             <th nzWidth="8%">中转时间</th>
176 175
             <th>送达信息</th>
176
+						<th>核收信息</th>
177 177
             <th nzWidth="12%">操作</th>
178 178
           </tr>
179 179
         </thead>
@@ -194,17 +194,13 @@
194 194
 							<div><span *ngIf="data.urgent == 1" class="red">急&nbsp;</span>{{ data.scode }}</div>
195 195
 							<div>{{ data.specimenDesc || "-" }}</div>
196 196
 						</td>
197
-						<td>
198
-							<div>{{ data.collectNurseName || "-" }}</div>
199
-							<div>{{ data.printDate || "-" }}</div>
200
-						</td>
201
-						<td> 
202
-							<div>{{ data.checkCollectUserDTO ? data.checkCollectUserDTO.name : "" }}</div>
203
-							<div>{{ data.checkCollectTime|date:'yyyy-MM-dd HH:mm:ss' || "" }}</div>
204
-						</td>
205 197
             <td>{{ data.stype ? data.stype.name : "-" }}<span *ngIf="data.tubeType">,</span>{{data.tubeType && data.tubeType.name}}</td>
206 198
             <td>{{ data.speState ? data.speState.name : "-" }}</td>
207
-            <td>
199
+					 <td>
200
+					 	<div>{{ data.collectNurseName || "-" }}</div>
201
+					 	<div>{{ data.printDate || "-" }}</div>
202
+					 </td>
203
+						<td>
208 204
 							<div>{{ data.receiverName }}<ng-container *ngIf="data.packageId">-<span class="underline" (click)="viewSpe(data.packageId)">包</span></ng-container></div>
209 205
 							<div>{{ data.arriveTime || "-" }}</div>
210 206
 						</td>
@@ -213,6 +209,10 @@
213 209
 							<div>{{ data.delivererName || "-" }}</div>
214 210
 							<div>{{ data.sendTime || '-' }}</div>
215 211
 						</td>
212
+						<td>
213
+							<div>{{ data.checkCollectUserDTO ? data.checkCollectUserDTO.name : "" }}</div>
214
+							<div>{{ data.checkCollectTime|date:'yyyy-MM-dd HH:mm:ss' || "" }}</div>
215
+						</td>
216 216
             <td>
217 217
 							<!-- <button (click)="viewSpecimenHistory(data)">查看</button> -->
218 218
 							<div class="coop">