Explorar el Código

Merge branch 'develop' of http://git.dashitech.com/seimin/zy-pc

maotao hace 5 meses
padre
commit
fab2e56aa3

+ 114 - 0
src/app/components/configurationCenter/configuration-drug/configuration-drug.component.html

@@ -0,0 +1,114 @@
1
+<div class="content drugPage" id="dictionary">
2
+  <div class="contentInner">
3
+    <div class="address">
4
+      <overlay-scrollbars #osComponentRef1 class="contentBody">
5
+        <div class="contentItem" [title]="item.name" [ngClass]="{ active: item.value === activeDictionary.value }" (click)="clickDictionaryKey(item)" *ngFor="let item of dictionaryKeyList">{{ item.name }}</div>
6
+      </overlay-scrollbars>
7
+    </div>
8
+    <div class="addressAssign">
9
+      <div class="contentBody2">
10
+        <div class="TaskTypeManagement">
11
+          <div class="taskTypeInfo">
12
+            <div class="top">
13
+              <div class="item" (click)="tabModal('characteristics')" [ngClass]="{'items':tabModalName=='characteristics'}">
14
+                特性配置
15
+              </div>
16
+              <div class="item" (click)="tabModal('automaticOrderCreation')" [ngClass]="{'items':tabModalName=='automaticOrderCreation'}">
17
+                自动建单配置
18
+              </div>
19
+            </div>
20
+            <ng-container *ngFor="let item of dictionaryKeyList">
21
+              <div class="list" *ngIf="!loading && activeDictionary.value === item.value">
22
+                <!-- 特性配置 -->
23
+                <div *ngIf="tabModalName=='characteristics'">
24
+                  <!-- 工单模式 -->
25
+                  <div class="display_flex align-items_center mb8">
26
+                    <nz-form-label class="label" nzRequired>工单模式</nz-form-label>
27
+                    <nz-radio-group [(ngModel)]="item.postData.drugsModel">
28
+                      <label nz-radio [nzValue]="item.value" *ngFor="let item of drugsModelList">{{ item.label }}</label>
29
+                    </nz-radio-group>
30
+                  </div>
31
+                  <!-- 支持建单并签到 -->
32
+                  <div class="display_flex align-items_center mb8">
33
+                    <nz-form-label class="label">支持建单并签到</nz-form-label>
34
+                    <nz-checkbox-group [(ngModel)]="item.postData.drugsCreateSign"></nz-checkbox-group>
35
+                  </div>
36
+                  <!-- 支持接单并签到 -->
37
+                  <div class="display_flex align-items_center mb8">
38
+                    <nz-form-label class="label">支持接单并签到</nz-form-label>
39
+                    <nz-checkbox-group [(ngModel)]="item.postData.drugsReceiveSign"></nz-checkbox-group>
40
+                  </div>
41
+
42
+                  <!-- 起点科室支持核对 -->
43
+                  <div class="display_flex align-items_center mb8">
44
+                    <nz-form-label class="label">起点科室支持核对</nz-form-label>
45
+                    <nz-checkbox-group [(ngModel)]="item.postData.drugsStartCheck" (ngModelChange)="changeDrugsStartCheck($event)"></nz-checkbox-group>
46
+                  </div>
47
+                  <ng-container *ngIf="item.postData.drugsStartCheck[0].checked">
48
+                    <!-- 核对方式 -->
49
+                    <div class="display_flex align-items_center mb8">
50
+                      <nz-form-label class="label" nzRequired>核对方式</nz-form-label>
51
+                      <nz-checkbox-group [(ngModel)]="item.postData.drugsStartCheckScanIds"></nz-checkbox-group>
52
+                    </div>
53
+                    <!-- 手动填写 -->
54
+                    <div class="display_flex align-items_center mb8">
55
+                      <nz-form-label class="label">手动填写</nz-form-label>
56
+                      <nz-select class="w320px" nzPlaceHolder="请选择手动填写" [(ngModel)]="item.postData.drugsStartManual" nzAllowClear>
57
+                        <nz-option *ngFor="let item of drugsManualList" [nzLabel]="item.label" [nzValue]="item.value"></nz-option>
58
+                      </nz-select>
59
+                    </div>
60
+                    <!-- 支持拍照留存 -->
61
+                    <div class="display_flex align-items_center mb8">
62
+                      <nz-form-label class="label">支持拍照留存</nz-form-label>
63
+                      <nz-checkbox-group [(ngModel)]="item.postData.drugsStartPhoto"></nz-checkbox-group>
64
+                    </div>
65
+                  </ng-container>
66
+
67
+                  <!-- 终点科室支持核对 -->
68
+                  <div class="display_flex align-items_center mb8">
69
+                    <nz-form-label class="label">终点科室支持核对</nz-form-label>
70
+                    <nz-checkbox-group [(ngModel)]="item.postData.drugsEndCheck" (ngModelChange)="changeDrugsEndCheck($event)"></nz-checkbox-group>
71
+                  </div>
72
+                  <ng-container *ngIf="item.postData.drugsEndCheck[0].checked">
73
+                    <!-- 核对方式 -->
74
+                    <div class="display_flex align-items_center mb8">
75
+                      <nz-form-label class="label" nzRequired>核对方式</nz-form-label>
76
+                      <nz-checkbox-group [(ngModel)]="item.postData.drugsEndCheckScanIds"></nz-checkbox-group>
77
+                    </div>
78
+                    <!-- 手动填写 -->
79
+                    <div class="display_flex align-items_center mb8">
80
+                      <nz-form-label class="label">手动填写</nz-form-label>
81
+                      <nz-select class="w320px" nzPlaceHolder="请选择手动填写" [(ngModel)]="item.postData.drugsEndManual" nzAllowClear>
82
+                        <nz-option *ngFor="let item of drugsManualList" [nzLabel]="item.label" [nzValue]="item.value"></nz-option>
83
+                      </nz-select>
84
+                    </div>
85
+                    <!-- 支持拍照留存 -->
86
+                    <div class="display_flex align-items_center mb8">
87
+                      <nz-form-label class="label">支持拍照留存</nz-form-label>
88
+                      <nz-checkbox-group [(ngModel)]="item.postData.drugsEndPhoto"></nz-checkbox-group>
89
+                    </div>
90
+                  </ng-container>
91
+                </div>
92
+                <!-- 自动建单配置 -->
93
+                <div *ngIf="tabModalName=='automaticOrderCreation'">
94
+                  <!-- 自动建单 -->
95
+                </div>
96
+                <div class="bottom">
97
+                  <button class="login-form-button" nzType="primary" [nzLoading]="btnLoading" nz-button (click)="submitForm()">保存</button>
98
+                </div>
99
+              </div>
100
+            </ng-container>
101
+            <div class="list" *ngIf="loading">
102
+              <div class="loadingFull display_flex justify-content_flex-center align-items_center">
103
+                <div class="loadingFullInner">
104
+                  <img src="../../../assets/images/loading.gif" alt="">
105
+                  <div>加载中...</div>
106
+                </div>
107
+              </div>
108
+            </div>
109
+          </div>
110
+        </div>
111
+      </div>
112
+    </div>
113
+  </div>
114
+</div>

+ 858 - 0
src/app/components/configurationCenter/configuration-drug/configuration-drug.component.less

@@ -0,0 +1,858 @@
1
+@import "../../../../../src/theme.less";
2
+:host {
3
+  height: 100%;
4
+  display: flex;
5
+  flex-direction: column;
6
+  justify-content: space-between;
7
+  background-color: #F0F2F5;
8
+  .list-template__nzTable,
9
+  .list-template__bottom{
10
+    padding: 0!important;
11
+    border: none!important;
12
+    background: #fff!important;
13
+  }
14
+  .list-template{
15
+    width: 100%!important;
16
+    height: 100%!important;
17
+  }
18
+  #dictionary{
19
+    margin: 24px 16px;
20
+    .addressAssign{
21
+      flex: 7;
22
+    }
23
+    .contentItem{
24
+      margin: 0 16px;
25
+      padding: 8px;
26
+      text-align: center;
27
+      &.active{
28
+        background-color: @primary-color;
29
+        color: #fff;
30
+        border-radius: 4px;
31
+      }
32
+    }
33
+    .contentBody{
34
+      padding: 16px;
35
+      min-height: 0;
36
+      display: flex;
37
+      flex-direction: column;
38
+    }
39
+    .contentBody2{
40
+      flex: 1;
41
+    }
42
+    ::ng-deep .ant-form-item{
43
+      margin-bottom: 0;
44
+    }
45
+    .dictionaryRow{
46
+      display: flex;
47
+      align-items: center;
48
+      justify-content: center;
49
+      gap: 16px;
50
+      .orders{
51
+        flex: 1;
52
+        display: flex;
53
+        justify-content: flex-end;
54
+        align-items: center;
55
+      }
56
+      .name{
57
+        width: 100px;
58
+        display: flex;
59
+        justify-content: flex-end;
60
+        align-items: center;
61
+      }
62
+      .value{
63
+        flex: 3;
64
+        display: flex;
65
+        align-items: center;
66
+        .valueInput{
67
+          width: 600px;
68
+        }
69
+        .icon_transport{
70
+          font-size: 20px;
71
+          color: #8a8a8a;
72
+          cursor: pointer;
73
+        }
74
+      }
75
+
76
+    }
77
+  }
78
+  .content{
79
+    flex: 1;
80
+    min-height: 0;
81
+    display: flex;
82
+    flex-direction: column;
83
+    justify-content: space-between;
84
+    border: 1px solid #EEF3F9;
85
+    &.priority{
86
+      margin: 24px 118px 0;
87
+      background-color: #fff;
88
+      .contentInner{
89
+        padding: 48px 206px;
90
+        border: 1px solid #E8EBEF;
91
+      }
92
+    }
93
+    .contentItem{
94
+      padding: 4px 16px;
95
+      cursor: pointer;
96
+      overflow: hidden;
97
+      text-overflow: ellipsis;
98
+      white-space: nowrap;
99
+      &.active{
100
+        color: @primary-color;
101
+        background-color: #F0F6ED;
102
+        border-radius: 4px;
103
+      }
104
+    }
105
+    .contentInner{
106
+      flex: 1;
107
+      display: flex;
108
+      justify-content: space-between;
109
+      align-items: center;
110
+      padding: 0 16px;
111
+      gap: 16px;
112
+      .contentHead{
113
+        height: 45px;
114
+        display: flex;
115
+        justify-content: space-between;
116
+        align-items: center;
117
+        gap: 16px;
118
+        padding: 0 16px;
119
+        font-size: 16px;
120
+        font-weight: bold;
121
+        border-bottom: 1px solid #D9D9D9;
122
+        .title{
123
+          overflow: hidden;
124
+          text-overflow: ellipsis;
125
+          white-space: nowrap;
126
+        }
127
+        .btns{
128
+          flex-shrink: 0;
129
+        }
130
+      }
131
+      .contentBody{
132
+        padding: 0 8px;
133
+        margin: 4px 0;
134
+        flex: 1;
135
+      }
136
+      .address{
137
+        flex: 1;
138
+        height: 100%;
139
+        background: #FFFFFF;
140
+        border: 1px solid #E8EBEF;
141
+        display: flex;
142
+        flex-direction: column;
143
+        width: 0;
144
+      }
145
+      .addressAssign{
146
+        flex: 3;
147
+        height: 100%;
148
+        background: #FFFFFF;
149
+        border: 1px solid #E8EBEF;
150
+        display: flex;
151
+        flex-direction: column;
152
+        width: 0;
153
+      }
154
+      .list-template__searchItem {
155
+        margin-bottom: 16px;
156
+        .label {
157
+          color: #333;
158
+          display: inline-block;
159
+          width: 70px;
160
+          text-align-last: justify;
161
+          text-align: justify;
162
+          &.label--big {
163
+            width: 100px;
164
+          }
165
+        }
166
+        .formItem {
167
+          width: 135px;
168
+        }
169
+      }
170
+    }
171
+    .contentBtns{
172
+      margin-bottom: 16px;
173
+      display: flex;
174
+      justify-content: center;
175
+      align-items: center;
176
+    }
177
+  }
178
+  .TaskTypeManagement {
179
+    height: calc(100vh - 136px);
180
+    background: #f9fafb;
181
+    overflow: hidden;
182
+    padding: 16px 20px;
183
+
184
+    .pagination {
185
+      margin-top: 14px;
186
+      margin-bottom: 14px;
187
+      bottom: 12px;
188
+      right: 5px;
189
+    }
190
+
191
+    .taskType {
192
+      float: left;
193
+      width: 24%;
194
+      height: 100%;
195
+      border: 1px solid #e5e9ed;
196
+      background: #fff;
197
+      color: #333;
198
+      font-size: 14px;
199
+      position: relative;
200
+      overflow: hidden;
201
+
202
+      .title {
203
+        width: 100%;
204
+        height: 40px;
205
+        line-height: 40px;
206
+        padding-left: 16px;
207
+        border-bottom: 1px solid #e5e9ed;
208
+        position: relative;
209
+        background: #fff;
210
+        z-index: 2;
211
+      }
212
+
213
+      .operate {
214
+        width: 100%;
215
+        border-bottom: 1px solid #e5e9ed;
216
+        position: relative;
217
+        background: #fff;
218
+        z-index: 2;
219
+        display: flex;
220
+
221
+        .item {
222
+          flex: 1;
223
+          height: 34px;
224
+          line-height: 34px;
225
+          border-right: 1px solid #e5e9ed;
226
+          text-align: center;
227
+          color: #666; // cursor: default;
228
+          cursor: pointer;
229
+
230
+          &:hover {
231
+            color: @primary-color;
232
+            background: #f0f6ed;
233
+          }
234
+
235
+          &:nth-last-child(1) {
236
+            border: none;
237
+          }
238
+        }
239
+      }
240
+
241
+      .taskTypes {
242
+        // width: 110%;
243
+        width: 100%;
244
+        height: 92%;
245
+        // padding-right: 10%;
246
+        overflow-y: auto;
247
+        z-index: 1;
248
+        padding-bottom: 30px;
249
+
250
+        .itemChoice {
251
+          color: @primary-color;
252
+          background: #f0f6ed;
253
+        }
254
+
255
+        .item {
256
+          width: 100%;
257
+          height: 34px;
258
+          line-height: 34px;
259
+          text-align: center;
260
+          cursor: pointer;
261
+          overflow: hidden;
262
+          text-overflow: ellipsis;
263
+          white-space: nowrap;
264
+
265
+          &:hover {
266
+            color: @primary-color;
267
+            background: #f0f6ed;
268
+          }
269
+
270
+          &.checked {
271
+            color: @primary-color;
272
+            background: #f0f6ed;
273
+          }
274
+        }
275
+      }
276
+    }
277
+
278
+    //任务类型管理-主体
279
+    .taskTypeInfo {
280
+      height: 100%;
281
+      border: 1px solid #e5e9ed;
282
+      background: #fff;
283
+      color: #333;
284
+      position: relative;
285
+
286
+      .top {
287
+        height: 61px;
288
+        line-height: 60px;
289
+        display: flex;
290
+        align-items: center;
291
+        border-bottom: 1px solid #e5e9ed;
292
+        position: relative;
293
+        z-index: 2;
294
+
295
+        .items {
296
+          background: #f0f6ed;
297
+        }
298
+
299
+        & > div {
300
+          border-right: 1px solid #e5e9ed;
301
+          width: 30%;
302
+          text-align: center; // display: flex;
303
+          // align-items: center;
304
+          cursor: pointer;
305
+
306
+          &:hover {
307
+            background: #f0f6ed;
308
+          }
309
+        }
310
+
311
+        &:nth-last-child(4) {
312
+          border: none;
313
+        }
314
+      }
315
+
316
+      .list {
317
+        width: 100%; // height: 100%;
318
+        padding: 16px; // position: absolute;
319
+        // top: 0;
320
+        // padding-top: 90px;
321
+        background: #fff;
322
+        height: 89%;
323
+        overflow: auto;
324
+
325
+        nz-form-label {
326
+          margin-left: 0px !important;
327
+        }
328
+
329
+        & > div {
330
+          background: #f9fafb;
331
+          border: 1px solid #e5e9ed;
332
+          border-radius: 10px 10px 0px 0px;
333
+          padding: 24px 120px;
334
+
335
+          .label {
336
+            margin-left: 16px;
337
+            font-size: 14px;
338
+            color: #333;
339
+          }
340
+        }
341
+
342
+        // 规则信息
343
+        .ruleList {
344
+          padding: 15px 15px 0px 15px;
345
+          background: #fff;
346
+
347
+          .table {
348
+            width: 100%;
349
+            height: 100%;
350
+
351
+            .box {
352
+              // background: #f9fafb;
353
+              // border: 1px solid #e5e9ed;
354
+              border-radius: 5px;
355
+              position: relative;
356
+
357
+              .table_title {
358
+                font-size: 18px;
359
+                margin: 14px 0px;
360
+                text-align: center;
361
+              }
362
+
363
+              .thead {
364
+                background-image: linear-gradient(to right, @bg-start, @bg-end);
365
+
366
+                th {
367
+                  background: transparent;
368
+                  color: #fff;
369
+                  text-align: center;
370
+                  font-size: 14px;
371
+                }
372
+              }
373
+
374
+              .ant-table-body {
375
+                border-bottom: 1px solid #e5e9ed;
376
+                background: #f9fafb;
377
+              }
378
+
379
+              .ant-table-tbody {
380
+                background: #f9fafb;
381
+                border: 1px solid #e5e9ed;
382
+
383
+                .zzBontton {
384
+                  & > td {
385
+                    border-bottom: 1px solid #e5e9ed;
386
+                  }
387
+                }
388
+
389
+                tr {
390
+                  text-align: center;
391
+                  font-size: 14px;
392
+                  border: none;
393
+                  color: #333;
394
+                  overflow: hidden;
395
+
396
+                  .lin {
397
+                    width: 68.2%;
398
+                    height: 2rem;
399
+                    border-bottom: 0.1rem solid #e5e9ed;
400
+                    position: absolute;
401
+                    text-align: center;
402
+                    margin-left: 0%;
403
+                    margin-top: -0.8%;
404
+                    transform: rotate(6.5deg);
405
+                  }
406
+
407
+                  td {
408
+                    border: none;
409
+
410
+                    nz-input-number {
411
+                      width: 50px;
412
+                    }
413
+
414
+                    .coop {
415
+                      .line {
416
+                        margin: 10px;
417
+                      }
418
+
419
+                      span:nth-child(2n-1) {
420
+                        cursor: pointer;
421
+
422
+                        &:hover {
423
+                          color: @primary-color;
424
+                        }
425
+
426
+                        &:active {
427
+                          color: @primary-color;
428
+                        }
429
+                      }
430
+                    }
431
+                  }
432
+                }
433
+
434
+                tr:nth-child(even) {
435
+                  background: #fff;
436
+                }
437
+              }
438
+            }
439
+          }
440
+        }
441
+
442
+        //运送过程
443
+        .ysgcItem {
444
+          padding: 0px 0px 0px 0px; // background: #fff;
445
+
446
+          .ysgc_top {
447
+            height: 88px;
448
+            background: #fff;
449
+            border-radius: 10px 10px 0px 0px;
450
+            padding: 15px 22px 0px 22px;
451
+
452
+            .title {
453
+              span {
454
+                font-size: 18px;
455
+              }
456
+            }
457
+
458
+            .carrItems {
459
+              color: @primary-color;
460
+              border-color: @primary-color !important;
461
+            }
462
+
463
+            .process {
464
+              width: 80%;
465
+              display: flex;
466
+              justify-content: center;
467
+              align-items: center;
468
+              margin: 5px auto;
469
+              font-size: 14px;
470
+
471
+              .carrItem {
472
+                height: 40px;
473
+                line-height: 28px;
474
+                cursor: pointer;
475
+                display: flex;
476
+                justify-content: center;
477
+                align-items: center;
478
+
479
+                .carrItem_icon {
480
+                  width: 35px;
481
+                  height: 35px;
482
+                  border: 1px solid #e5e9ed;
483
+                  border-radius: 50%;
484
+                  text-align: center;
485
+                  line-height: 35px;
486
+                  margin-right: 10px;
487
+
488
+                  i {
489
+                    font-size: 18px;
490
+                  }
491
+                }
492
+              }
493
+
494
+              .carrItem1 {
495
+                float: left;
496
+                width: 45%;
497
+                height: 40px;
498
+                line-height: 28px;
499
+                padding-left: 10%;
500
+                cursor: pointer;
501
+
502
+                .carrItem_icon {
503
+                  width: 35px;
504
+                  height: 35px;
505
+                  border: 1px solid #e5e9ed;
506
+                  border-radius: 50%;
507
+                  text-align: center;
508
+                  line-height: 35px;
509
+                  float: left;
510
+                  margin-right: 10px;
511
+
512
+                  i {
513
+                    font-size: 18px;
514
+                  }
515
+                }
516
+              }
517
+            }
518
+          }
519
+
520
+          .ysgc_cont {
521
+            padding: 0px 240px 24px 240px;
522
+
523
+            textarea {
524
+              padding-right: 10%;
525
+            }
526
+
527
+            .icon_btn {
528
+              cursor: pointer;
529
+              font-size: 18px;
530
+            }
531
+
532
+            .icon_text {
533
+              display: block;
534
+              cursor: pointer;
535
+              position: relative;
536
+              right: 5px;
537
+            }
538
+
539
+            .item_type_cont {
540
+              height: 70px;
541
+              padding-top: 4px;
542
+
543
+              & > div {
544
+                height: 65px;
545
+                border: 1px solid #e5e9ed;
546
+                border-radius: 5px;
547
+                background: #fff;
548
+
549
+                .item_type_cont_L {
550
+                  height: 100%;
551
+                  width: 90%;
552
+                  float: left;
553
+                  padding: 2px 12px;
554
+                  overflow: auto;
555
+
556
+                  .item_yq {
557
+                    width: 24%;
558
+                    height: 28px;
559
+                    display: inline-block;
560
+                    border: 1px solid #e5e9ed;
561
+                    border-radius: 20px;
562
+                    text-align: center;
563
+                    line-height: 26px;
564
+                    background: #f9fafb;
565
+                    margin-right: 1%;
566
+                    margin-bottom: 2px;
567
+                    font-size: 12px;
568
+                    padding-left: 8px;
569
+
570
+                    span {
571
+                      width: 75%;
572
+                      float: left;
573
+                      overflow: hidden;
574
+                      text-overflow: ellipsis;
575
+                      white-space: nowrap;
576
+                    }
577
+
578
+                    i {
579
+                      font-size: 14px;
580
+                      color: #999;
581
+                      cursor: pointer;
582
+                    }
583
+                  }
584
+                }
585
+
586
+                .item_type_cont_R {
587
+                  height: 100%;
588
+                  width: 10%;
589
+                  float: right;
590
+                  text-align: center;
591
+                  padding-top: 15px;
592
+                  border-left: 1px solid #e5e9ed;
593
+                  cursor: pointer;
594
+
595
+                  i {
596
+                    display: block;
597
+                    font-size: 16px;
598
+                  }
599
+
600
+                  i:hover {
601
+                    color: @primary-color;
602
+                  }
603
+
604
+                  .icon_text {
605
+                    right: 1px;
606
+                  }
607
+                }
608
+              }
609
+            }
610
+          }
611
+        }
612
+
613
+        //关联信息
614
+        .glxxItem {
615
+          padding: 10px 15px 0px 15px;
616
+          background: #fff;
617
+
618
+          .tab_btn {
619
+            cursor: pointer;
620
+          }
621
+
622
+          .tab_btn:hover {
623
+            color: @primary-color;
624
+          }
625
+
626
+          .table_title {
627
+            font-size: 18px;
628
+            margin: 14px 0px;
629
+            text-align: center;
630
+          }
631
+
632
+          .thead {
633
+            background-image: linear-gradient(to right, @bg-start, @bg-end);
634
+
635
+            th {
636
+              background: transparent;
637
+              color: #fff;
638
+              text-align: center;
639
+              font-size: 14px;
640
+            }
641
+          }
642
+
643
+          .ant-table-body {
644
+            // border-bottom: 1px solid #e5e9ed;
645
+            background: #f9fafb;
646
+          }
647
+
648
+          .ant-table-tbody {
649
+            background: #f9fafb;
650
+            border: 1px solid #e5e9ed;
651
+
652
+            tr {
653
+              text-align: center;
654
+              font-size: 14px;
655
+              border: none;
656
+              color: #333;
657
+
658
+              td {
659
+                border: none; // font-size: 14px;
660
+
661
+                nz-input-number {
662
+                  width: 40px;
663
+                }
664
+
665
+                .coop {
666
+                  .line {
667
+                    margin: 10px;
668
+                  }
669
+
670
+                  span:nth-child(2n-1) {
671
+                    cursor: pointer;
672
+
673
+                    &:hover {
674
+                      color: @primary-color;
675
+                    }
676
+
677
+                    &:active {
678
+                      color: @primary-color;
679
+                    }
680
+                  }
681
+                }
682
+              }
683
+            }
684
+
685
+            tr:nth-child(even) {
686
+              background: #fff;
687
+            }
688
+          }
689
+        }
690
+
691
+        // 开通科室
692
+        .ktksItem {
693
+          padding: 0px 0px 0px 0px;
694
+          background: #fff;
695
+
696
+          .top {
697
+            width: 100%; // padding-bottom: 7px;
698
+            // border-bottom: 1px solid #e5e9ed;
699
+            position: relative;
700
+            overflow: hidden;
701
+            z-index: 2;
702
+            display: flex;
703
+            align-items: center;
704
+            justify-content: space-between;
705
+
706
+            .top_L {
707
+              width: 70%;
708
+              text-align: left;
709
+              display: flex;
710
+              flex-wrap: wrap;
711
+              align-items: center;
712
+              padding: 0 4px;
713
+              .top_L_item {
714
+                margin-left: 4px;
715
+              }
716
+
717
+              .label {
718
+                font-size: 14px;
719
+                color: #333;
720
+                margin-left: 0;
721
+              }
722
+
723
+              nz-select {
724
+                font-size: 12px;
725
+                width: 100px;
726
+              }
727
+
728
+              input {
729
+                font-size: 12px;
730
+                width: 100px;
731
+              }
732
+            }
733
+
734
+            .top_R {
735
+              border: 0px;
736
+
737
+              .btn {
738
+                margin-left: 10px;
739
+              }
740
+            }
741
+          }
742
+
743
+          .ktksItemList {
744
+            padding: 10px 15px 0px 15px;
745
+            .table {
746
+              min-height: 528px;
747
+            }
748
+
749
+            .operate {
750
+              float: right;
751
+              margin-bottom: 5px;
752
+
753
+              span {
754
+                font-size: 14px;
755
+              }
756
+
757
+              .num {
758
+                font-size: 18px;
759
+                color: @primary-color;
760
+              }
761
+            }
762
+
763
+            .thead {
764
+              background-image: linear-gradient(to right, @bg-start, @bg-end);
765
+
766
+              th {
767
+                background: transparent;
768
+                color: #fff;
769
+                text-align: center;
770
+                font-size: 14px;
771
+              }
772
+            }
773
+
774
+            .ant-table-body {
775
+              border-bottom: 1px solid #e5e9ed;
776
+              background: #f9fafb;
777
+            }
778
+
779
+            .ant-table-tbody {
780
+              background: #f9fafb;
781
+              border: 1px solid #e5e9ed;
782
+
783
+              .zzBontton {
784
+                & > td {
785
+                  border-bottom: 1px solid #e5e9ed;
786
+                }
787
+              }
788
+
789
+              tr {
790
+                text-align: center;
791
+                font-size: 14px;
792
+                border: none;
793
+                color: #333;
794
+
795
+                td {
796
+                  border: none; // font-size: 14px;
797
+
798
+                  nz-input-number {
799
+                    width: 40px;
800
+                  }
801
+
802
+                  .coop {
803
+                    .line {
804
+                      margin: 10px;
805
+                    }
806
+
807
+                    span:nth-child(2n-1) {
808
+                      cursor: pointer;
809
+
810
+                      &:hover {
811
+                        color: @primary-color;
812
+                      }
813
+
814
+                      &:active {
815
+                        color: @primary-color;
816
+                      }
817
+                    }
818
+                  }
819
+                }
820
+              }
821
+
822
+              tr:nth-child(even) {
823
+                background: #fff;
824
+              }
825
+            }
826
+          }
827
+
828
+          .pagination {
829
+            margin-top: 25px;
830
+            margin-bottom: 14px;
831
+            bottom: 12px;
832
+            right: 5px;
833
+            position: relative;
834
+            height: 30px;
835
+            .page {
836
+              position: absolute;
837
+              right: 5px;
838
+            }
839
+          }
840
+        }
841
+
842
+        .bottom {
843
+          height: 60px;
844
+          border-radius: 0px 0px 10px 10px;
845
+          padding: 10px 240px 0px 240px;
846
+          border-top: 0px;
847
+
848
+          button {
849
+            width: 80px;
850
+            height: 34px;
851
+            display: block;
852
+            margin: 0 auto;
853
+          }
854
+        }
855
+      }
856
+    }
857
+  }
858
+}

+ 300 - 0
src/app/components/configurationCenter/configuration-drug/configuration-drug.component.ts

@@ -0,0 +1,300 @@
1
+import { Component, OnInit, ViewChild } from "@angular/core";
2
+import { MainService } from "../../../services/main.service";
3
+import { ToolService } from 'src/app/services/tool.service';
4
+import { NzMessageService } from 'ng-zorro-antd';
5
+import { Subject, forkJoin } from 'rxjs';
6
+import { debounceTime } from 'rxjs/operators';
7
+import { OverlayScrollbarsComponent } from 'overlayscrollbars-ngx';
8
+
9
+@Component({
10
+  selector: "app-configuration-drug",
11
+  templateUrl: "./configuration-drug.component.html",
12
+  styleUrls: ["./configuration-drug.component.less"],
13
+})
14
+export class ConfigurationDrugComponent implements OnInit {
15
+  @ViewChild("osComponentRef1", {
16
+    read: OverlayScrollbarsComponent,
17
+    static: false,
18
+  })
19
+  osComponentRef1: OverlayScrollbarsComponent;
20
+
21
+  loading:boolean = false; //页面加载的loading
22
+  btnLoading:boolean = false; //提交按钮的loading
23
+  tabModalName:string = 'characteristics'; //当前选中的tab
24
+  hosId = this.tool.getCurrentHospital().id; //当前院区
25
+
26
+  // 配置
27
+  configs:any = {};
28
+  // 任务类型
29
+  tasktype:any = {};
30
+  constructor(private mainService: MainService,private tool: ToolService,private msg: NzMessageService) {}
31
+
32
+  ngOnInit():void {
33
+    this.activeDictionary = this.dictionaryKeyList[0];
34
+    this.init();
35
+  }
36
+
37
+  // 工单模式
38
+  drugsModelList:any[] = [
39
+    { label: '一单一码', value: 1 },
40
+    { label: '一单多码', value: 2 },
41
+  ];
42
+
43
+  // 手动填写
44
+  drugsManualList:any[] = [];
45
+
46
+  // 数据字典key列表
47
+  dictionaryKeyList: any[] = [
48
+    {
49
+      name: '静配',
50
+      value: 'drugsJpbag',
51
+      postData: {
52
+        drugsModel: undefined,//工单模式
53
+        drugsCreateSign: [{ label:'是否开启', value: 0 }],//支持建单并签到
54
+        drugsReceiveSign: [{ label:'是否开启', value: 0 }],//支持接单并签到
55
+        drugsStartCheck: [{ label:'是否开启', value: 0 }],//起点科室支持核对
56
+        drugsStartCheckScanIds: [],//起点核对方式
57
+        drugsStartManual: undefined,//起点科室手动填写
58
+        drugsStartPhoto: [{ label:'是否开启', value: 0 }],//起点科室支持拍照留存
59
+        drugsEndCheck: [{ label:'是否开启', value: 0 }],//终点科室支持核对
60
+        drugsEndCheckScanIds: [],//终点核对方式
61
+        drugsEndManual: undefined,//终点科室手动填写
62
+        drugsEndPhoto: [{ label:'是否开启', value: 0 }],//终点科室支持拍照留存
63
+      }
64
+    },
65
+    {
66
+      name: '西药',
67
+      value: 'drugsWestern',
68
+      postData: {
69
+        drugsModel: undefined,//工单模式
70
+        drugsCreateSign: [{ label:'是否开启', value: 0 }],//支持建单并签到
71
+        drugsReceiveSign: [{ label:'是否开启', value: 0 }],//支持接单并签到
72
+        drugsStartCheck: [{ label:'是否开启', value: 0 }],//起点科室支持核对
73
+        drugsStartCheckScanIds: [],//起点核对方式
74
+        drugsStartManual: undefined,//起点科室手动填写
75
+        drugsStartPhoto: [{ label:'是否开启', value: 0 }],//起点科室支持拍照留存
76
+        drugsEndCheck: [{ label:'是否开启', value: 0 }],//终点科室支持核对
77
+        drugsEndCheckScanIds: [],//终点核对方式
78
+        drugsEndManual: undefined,//终点科室手动填写
79
+        drugsEndPhoto: [{ label:'是否开启', value: 0 }],//终点科室支持拍照留存
80
+      }
81
+    },
82
+    {
83
+      name: '退药',
84
+      value: 'drugsReturn',
85
+      postData: {
86
+        drugsModel: undefined,//工单模式
87
+        drugsCreateSign: [{ label:'是否开启', value: 0 }],//支持建单并签到
88
+        drugsReceiveSign: [{ label:'是否开启', value: 0 }],//支持接单并签到
89
+        drugsStartCheck: [{ label:'是否开启', value: 0 }],//起点科室支持核对
90
+        drugsStartCheckScanIds: [],//起点核对方式
91
+        drugsStartManual: undefined,//起点科室手动填写
92
+        drugsStartPhoto: [{ label:'是否开启', value: 0 }],//起点科室支持拍照留存
93
+        drugsEndCheck: [{ label:'是否开启', value: 0 }],//终点科室支持核对
94
+        drugsEndCheckScanIds: [],//终点核对方式
95
+        drugsEndManual: undefined,//终点科室手动填写
96
+        drugsEndPhoto: [{ label:'是否开启', value: 0 }],//终点科室支持拍照留存
97
+      }
98
+    },
99
+    {
100
+      name: '毒麻',
101
+      value: 'drugsPoison',
102
+      postData: {
103
+        drugsModel: undefined,//工单模式
104
+        drugsCreateSign: [{ label:'是否开启', value: 0 }],//支持建单并签到
105
+        drugsReceiveSign: [{ label:'是否开启', value: 0 }],//支持接单并签到
106
+        drugsStartCheck: [{ label:'是否开启', value: 0 }],//起点科室支持核对
107
+        drugsStartCheckScanIds: [],//起点核对方式
108
+        drugsStartManual: undefined,//起点科室手动填写
109
+        drugsStartPhoto: [{ label:'是否开启', value: 0 }],//起点科室支持拍照留存
110
+        drugsEndCheck: [{ label:'是否开启', value: 0 }],//终点科室支持核对
111
+        drugsEndCheckScanIds: [],//终点核对方式
112
+        drugsEndManual: undefined,//终点科室手动填写
113
+        drugsEndPhoto: [{ label:'是否开启', value: 0 }],//终点科室支持拍照留存
114
+      }
115
+    },
116
+    {
117
+      name: '中草药',
118
+      value: 'drugsHerbal',
119
+      postData: {
120
+        drugsModel: undefined,//工单模式
121
+        drugsCreateSign: [{ label:'是否开启', value: 0 }],//支持建单并签到
122
+        drugsReceiveSign: [{ label:'是否开启', value: 0 }],//支持接单并签到
123
+        drugsStartCheck: [{ label:'是否开启', value: 0 }],//起点科室支持核对
124
+        drugsStartCheckScanIds: [],//起点核对方式
125
+        drugsStartManual: undefined,//起点科室手动填写
126
+        drugsStartPhoto: [{ label:'是否开启', value: 0 }],//起点科室支持拍照留存
127
+        drugsEndCheck: [{ label:'是否开启', value: 0 }],//终点科室支持核对
128
+        drugsEndCheckScanIds: [],//终点核对方式
129
+        drugsEndManual: undefined,//终点科室手动填写
130
+        drugsEndPhoto: [{ label:'是否开启', value: 0 }],//终点科室支持拍照留存
131
+      }
132
+    },
133
+  ];
134
+
135
+  // 点击数据字典key
136
+  activeDictionary:any;
137
+  clickDictionaryKey(item){
138
+    this.activeDictionary = item;
139
+    this.init();
140
+  }
141
+
142
+  // 修改起点科室支持核对
143
+  changeDrugsStartCheck(e){
144
+    console.log(e);
145
+    if(!e[0].checked){
146
+      this.activeDictionary.postData.drugsStartCheckScanIds = this.activeDictionary.postData.drugsStartCheckScanIds.map(v => ({...v, checked: false}));
147
+      this.activeDictionary.postData.drugsStartManual = undefined;
148
+      this.activeDictionary.postData.drugsStartPhoto[0].checked = false;
149
+    }
150
+  }
151
+
152
+  // 修改终点科室支持核对
153
+  changeDrugsEndCheck(e){
154
+    console.log(e);
155
+    if(!e[0].checked){
156
+      this.activeDictionary.postData.drugsEndCheckScanIds = this.activeDictionary.postData.drugsEndCheckScanIds.map(v => ({...v, checked: false}));;
157
+      this.activeDictionary.postData.drugsEndManual = undefined;
158
+      this.activeDictionary.postData.drugsEndPhoto[0].checked = false;
159
+    }
160
+  }
161
+
162
+  // 切换tab
163
+  tabModal(tabModalName:string){
164
+    this.tabModalName = tabModalName;
165
+  }
166
+  // 保存
167
+  submitForm() {
168
+    if(!this.tasktype.id){
169
+      this.msg.create("warning", "请先配置任务类型!");
170
+      return;
171
+    }
172
+
173
+    if(!this.activeDictionary.postData.drugsModel){
174
+      this.msg.create("warning", "请选择工单模式!");
175
+      return;
176
+    }
177
+
178
+    if(this.activeDictionary.postData.drugsStartCheck[0].checked && !this.activeDictionary.postData.drugsStartCheckScanIds.length){
179
+      this.msg.create("warning", "请选择起点科室的核对方式!");
180
+      return;
181
+    }
182
+
183
+    if(this.activeDictionary.postData.drugsEndCheck[0].checked && !this.activeDictionary.postData.drugsEndCheckScanIds.length){
184
+      this.msg.create("warning", "请选择终点科室的核对方式!");
185
+      return;
186
+    }
187
+
188
+    let postData:any = {
189
+      id: this.configs.id,
190
+      taskType: this.tasktype.id,
191
+      hosId: this.hosId,
192
+      drugsModel: this.activeDictionary.postData.drugsModel || undefined,
193
+      drugsCreateSign: this.activeDictionary.postData.drugsCreateSign[0].checked ? 1 : 0,
194
+      drugsReceiveSign: this.activeDictionary.postData.drugsReceiveSign[0].checked ? 1 : 0,
195
+      drugsStartCheck: this.activeDictionary.postData.drugsStartCheck[0].checked ? 1 : 0,
196
+      drugsStartCheckScanIds: this.activeDictionary.postData.drugsStartCheckScanIds.filter(v => v.checked).map(v => v.value).toString() || undefined,
197
+      drugsStartManual: this.activeDictionary.postData.drugsStartManual ? { id: this.activeDictionary.postData.drugsStartManual } : undefined,
198
+      drugsStartPhoto: this.activeDictionary.postData.drugsStartPhoto[0].checked ? 1 : 0,
199
+      drugsEndCheck: this.activeDictionary.postData.drugsEndCheck[0].checked ? 1 : 0,
200
+      drugsEndCheckScanIds: this.activeDictionary.postData.drugsEndCheckScanIds.filter(v => v.checked).map(v => v.value).toString() || undefined,
201
+      drugsEndManual: this.activeDictionary.postData.drugsEndManual ? { id: this.activeDictionary.postData.drugsEndManual } : undefined,
202
+      drugsEndPhoto: this.activeDictionary.postData.drugsEndPhoto[0].checked ? 1 : 0,
203
+    };
204
+    this.btnLoading = true;
205
+    this.mainService
206
+      .simplePost("addData", "taskTypeConfig", postData)
207
+      .subscribe((result) => {
208
+        this.btnLoading = false;
209
+        if (result.status == 200) {
210
+          this.getConfig();
211
+        }
212
+      });
213
+  }
214
+
215
+  //初始化
216
+  init() {
217
+    this.loading = true;
218
+    let drugs_bag_check_scan_type$ = this.mainService.getDictionary('list', 'drugs_bag_check_scan_type', true);
219
+    let drugs_bag_manual_type$ = this.mainService.getDictionary('list', 'drugs_bag_manual_type', true);
220
+    forkJoin(drugs_bag_check_scan_type$, drugs_bag_manual_type$).subscribe((data:any[]) => {
221
+      let drugs_bag_check_scan_type = data[0] || [];
222
+      let drugs_bag_manual_type = data[1] || [];
223
+
224
+      this.activeDictionary.postData.drugsStartCheckScanIds = drugs_bag_check_scan_type.map(v => ({ label:v.name, value: v.id }));
225
+      this.activeDictionary.postData.drugsEndCheckScanIds = drugs_bag_check_scan_type.map(v => ({ label:v.name, value: v.id }));
226
+      this.drugsManualList = drugs_bag_manual_type.map(v => ({ label:v.name, value: v.id }));
227
+
228
+      this.getTaskType();
229
+    })
230
+  }
231
+
232
+  //获取任务类型
233
+  getTaskType() {
234
+    this.loading = true;
235
+    let postData = {
236
+      idx: 0,
237
+      sum: 1,
238
+      taskType: {
239
+        simpleQuery: true,
240
+        hosId: {
241
+          id: this.hosId
242
+        },
243
+        ordinaryField: {
244
+          key: 'ordinary_field',
245
+          value: this.activeDictionary.value,
246
+        }
247
+      }
248
+    };
249
+    this.mainService
250
+      .getFetchDataList("simple/data", "taskType", postData)
251
+      .subscribe((result) => {
252
+        this.loading = false;
253
+        if (result.status == 200) {
254
+          this.tasktype = result.list[0] || {};
255
+          this.getConfig();
256
+        }
257
+      });
258
+  }
259
+
260
+  // 获取配置
261
+  getConfig() {
262
+    this.loading = true;
263
+    let postData = {
264
+      idx: 0,
265
+      sum: 1,
266
+      taskTypeConfig: {
267
+        taskTypeDTO: {
268
+          hosId: {
269
+            id: this.hosId
270
+          },
271
+          ordinaryField: {
272
+            key: 'ordinary_field',
273
+            value: this.activeDictionary.value,
274
+          }
275
+        }
276
+      }
277
+    };
278
+    this.mainService
279
+      .getFetchDataList("simple/data", "taskTypeConfig", postData)
280
+      .subscribe((result) => {
281
+        this.loading = false;
282
+        if (result.status == 200) {
283
+          this.configs = result.list[0] || {};
284
+          this.activeDictionary.postData.drugsModel = this.configs.drugsModel || undefined;
285
+          this.activeDictionary.postData.drugsCreateSign[0].checked = this.configs.drugsCreateSign == 1;
286
+          this.activeDictionary.postData.drugsReceiveSign[0].checked = this.configs.drugsReceiveSign == 1;
287
+
288
+          this.activeDictionary.postData.drugsStartCheck[0].checked = this.configs.drugsStartCheck == 1;
289
+          this.activeDictionary.postData.drugsStartCheckScanIds = this.activeDictionary.postData.drugsStartCheckScanIds.map(v => ({...v, checked: (this.configs.drugsStartCheckScanIds || '').split(',').includes(v.value.toString())}));
290
+          this.activeDictionary.postData.drugsStartManual = this.configs.drugsStartManual ? this.configs.drugsStartManual.id : undefined;
291
+          this.activeDictionary.postData.drugsStartPhoto[0].checked = this.configs.drugsStartPhoto == 1;
292
+
293
+          this.activeDictionary.postData.drugsEndCheck[0].checked = this.configs.drugsEndCheck == 1;
294
+          this.activeDictionary.postData.drugsEndCheckScanIds = this.activeDictionary.postData.drugsEndCheckScanIds.map(v => ({...v, checked: (this.configs.drugsEndCheckScanIds || '').split(',').includes(v.value.toString())}));
295
+          this.activeDictionary.postData.drugsEndManual = this.configs.drugsEndManual ? this.configs.drugsEndManual.id : undefined;
296
+          this.activeDictionary.postData.drugsEndPhoto[0].checked = this.configs.drugsEndPhoto == 1;
297
+        }
298
+      });
299
+  }
300
+}

+ 2 - 0
src/app/components/configurationCenter/configuration-specimen/configuration-specimen.component.ts

@@ -216,6 +216,7 @@ export class ConfigurationSpecimenComponent implements OnInit {
216 216
 
217 217
   //获取任务类型
218 218
   getTaskType() {
219
+    this.loading = true;
219 220
     let postData = {
220 221
       idx: 0,
221 222
       sum: 10,
@@ -233,6 +234,7 @@ export class ConfigurationSpecimenComponent implements OnInit {
233 234
     this.mainService
234 235
       .getFetchDataList("simple/data", "taskType", postData)
235 236
       .subscribe((result) => {
237
+        this.loading = false;
236 238
         if (result.status == 200) {
237 239
           this.tasktype = result.list[0] || {};
238 240
           this.getConfig();

+ 1 - 1
src/app/components/order-scope/order-scope.component.ts

@@ -131,7 +131,7 @@ export class OrderScopeComponent implements OnInit {
131 131
       this.hosList = hospitals.filter(v => !this.tool.isDuty(v));
132 132
       this.taskTypes = this.user.infoPermission.taskTypes || [];
133 133
       let userGroups = this.user.infoPermission.groups || [];
134
-      this.userGroups = this.user.infoPermission.groups.filter(v => v.type !== 3);
134
+      this.userGroups = userGroups.filter(v => v.type !== 3);
135 135
       this.hosList.forEach((e) => {
136 136
         let arrT = [],
137 137
           arrG = [];

+ 46 - 0
src/app/share/businessData-detail-info-modal/businessData-detail-info-modal.component.html

@@ -0,0 +1,46 @@
1
+<div class="modal display_flex justify-content_flex-center align-items_center" *ngIf="show">
2
+  <div class="modalBody" style="width: 1200px;">
3
+    <div class="title" *ngIf="(type === 'drugsJpbag' || type === 'drugsWestern' || type === 'drugsReturn' || type === 'drugsPoison' || type === 'drugsHerbal');else elseTpl">药品详情<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4
+    <ng-template #elseTpl>
5
+      <div class="title">业务数据查看<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
6
+    </ng-template>
7
+    <div class="drugsBag" *ngIf="type === 'drugsJpbag' || type === 'drugsWestern' || type === 'drugsReturn' || type === 'drugsPoison' || type === 'drugsHerbal'">
8
+      <div>单号:{{drugsBag.batchNo}}</div>
9
+      <div>申请科室:{{drugsBag.target ? drugsBag.target.dept : ''}}</div>
10
+      <div>发药科室:{{drugsBag.launch ? drugsBag.launch.dept : ''}}</div>
11
+    </div>
12
+    <div class="content">
13
+      <ng-container *ngIf="type === 'drugsJpbag' || type === 'drugsWestern' || type === 'drugsReturn' || type === 'drugsPoison' || type === 'drugsHerbal'">
14
+        <!-- 新药品 -->
15
+        <nz-table class="hospitalTable" [nzData]="drugsBugSingleList" nzSize="middle" [nzShowPagination]="false"
16
+          [nzLoading]="hsLoading" [nzScroll]="{ y: '500px' }">
17
+          <thead>
18
+            <tr class="thead">
19
+              <th nzWidth="5%">序号</th>
20
+              <th nzWidth="85%">药品名称+规格</th>
21
+              <th nzWidth="10%">数量</th>
22
+            </tr>
23
+          </thead>
24
+          <tbody>
25
+            <tr *ngFor="let data of drugsBugSingleList;let i = index;">
26
+              <td>{{i+1}}</td>
27
+              <td>{{ data.drugsInfo }} {{ data.model }}</td>
28
+              <td>{{ data.drugsNum }}</td>
29
+            </tr>
30
+          </tbody>
31
+        </nz-table>
32
+      </ng-container>
33
+
34
+      <div class="pagination" *ngIf="type !== 'drugsJpbag' && type !== 'drugsWestern' && type !== 'drugsReturn' && type !== 'drugsPoison' && type !== 'drugsHerbal'">
35
+        <ng-template #totalTemplate let-total> 共 {{ total }} 条 </ng-template>
36
+        <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="total"
37
+          [(nzPageSize)]="pageSize" (nzPageIndexChange)="getList()"
38
+          (nzPageSizeChange)="getList()" [nzShowTotal]="totalTemplate">
39
+        </nz-pagination>
40
+      </div>
41
+    </div>
42
+    <div class="display_flex justify-content_flex-center">
43
+      <button class="btn know" nz-button nzType="primary" (click)="hideModal()">知道了</button>
44
+    </div>
45
+  </div>
46
+</div>

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

@@ -0,0 +1,211 @@
1
+@import "../../../../src/theme.less";
2
+.modal {
3
+  position: fixed;
4
+  left: 0;
5
+  top: 0;
6
+  width: 100%;
7
+  height: 100%;
8
+  background: rgba(0, 0, 0, 0.4);
9
+  z-index: 999;
10
+  .drugsBag{
11
+    display: flex;
12
+    align-items: center;
13
+    font-size: 16px;
14
+    gap: 40px;
15
+    padding: 16px 24px 0;
16
+    border-top: 1px solid #E8EBEF;
17
+  }
18
+  .hospitalTable {
19
+    width: 100%;
20
+    td {
21
+      text-align: center !important;
22
+      position: relative;
23
+      word-break: break-all;
24
+    }
25
+    .thead {
26
+      background-image: linear-gradient(to right, @bg-start, @bg-end);
27
+      th {
28
+        text-align: center !important;
29
+        color: #fff;
30
+        background: transparent;
31
+      }
32
+    }
33
+  }
34
+
35
+  .ji {
36
+    position: absolute;
37
+    right: 0px;
38
+    top: -3px;
39
+    width: 30px;
40
+  }
41
+
42
+  .list-template__top{
43
+    div{
44
+      text-align: left!important;
45
+    }
46
+  }
47
+
48
+  .tab {
49
+    width: 100%;
50
+    height: 60px;
51
+    border-bottom: 1px solid #e5e9ed;
52
+    background-color: #fff;
53
+
54
+    .item {
55
+      text-align: center;
56
+      line-height: 60px;
57
+      height: 100%;
58
+      border-right: 1px solid #e5e9ed;
59
+
60
+      &:nth-last-child(1) {
61
+        border: none;
62
+      }
63
+
64
+      &.checked {
65
+        background: #f0f6ed;
66
+      }
67
+    }
68
+  }
69
+
70
+  .modalBody {
71
+    width: 700px;
72
+    background: #fff;
73
+    border-radius: 5px;
74
+    color: #333;
75
+    &.modalBody-search {
76
+      width: 480px;
77
+      min-height: 250px;
78
+    }
79
+
80
+    .title {
81
+      width: 100%;
82
+      height: 53px;
83
+      line-height: 53px;
84
+      border-bottom: 1px solid #E8EBEF;
85
+      padding: 0 28px;
86
+      text-align: center;
87
+      font-size: 18px;
88
+      position: relative;
89
+
90
+      i {
91
+        position: absolute;
92
+        right: 28px;
93
+        top: 0;
94
+        font-size: 20px;
95
+        color: #666;
96
+        cursor: pointer;
97
+        padding: 0 5px;
98
+      }
99
+    }
100
+
101
+    .content {
102
+      background: #f9fafb;
103
+      border: 1px solid #e5e9ed;
104
+      border-radius: 5px;
105
+      overflow: hidden;
106
+      margin: 16px 24px 0;
107
+      display: flex;
108
+      flex-direction: column;
109
+      justify-content: center;
110
+      align-items: center;
111
+      &.content-search {
112
+        min-height: 147px;
113
+        justify-content: start;
114
+        .defeat-search {
115
+          width: 100%;
116
+          height: 52px;
117
+          display: flex;
118
+          justify-content: center;
119
+          align-items: center;
120
+          border-bottom: solid 1px #e5e9ed;
121
+          em {
122
+            color: #666;
123
+            font-style: normal;
124
+          }
125
+        }
126
+        .form {
127
+          width: 100%;
128
+          padding: 0 16px;
129
+          .ant-form-item-label,
130
+          .ant-form-explain {
131
+            text-align: left !important;
132
+          }
133
+        }
134
+      }
135
+
136
+      div {
137
+        text-align: center;
138
+        margin: 0;
139
+
140
+        &.defeat {
141
+          color: #333;
142
+          font-size: 28px;
143
+        }
144
+        &.countDown {
145
+          font-size: 14px;
146
+          color: 666;
147
+          em {
148
+            font-style: normal;
149
+            color: @primary-color;
150
+          }
151
+        }
152
+
153
+        &.pagination {
154
+          font-size: 14px;
155
+          color: #666;
156
+          padding-top: 16px;
157
+          padding-bottom: 16px;
158
+        }
159
+      }
160
+    }
161
+
162
+    button {
163
+      margin-top: 10px;
164
+      margin-bottom: 10px;
165
+
166
+      &.btn {
167
+        margin-left: 8px;
168
+      }
169
+    }
170
+  }
171
+
172
+  // 新增
173
+  &.add {
174
+    .modalBody {
175
+      width: 480px;
176
+      height: auto;
177
+
178
+      .content {
179
+        width: 100%;
180
+        height: auto;
181
+        padding: 18px 14px 0 14px;
182
+
183
+        .addForm {
184
+          .ant-form-item {
185
+            margin-bottom: 15px;
186
+
187
+            .ant-form-item-label {
188
+              line-height: 0;
189
+            }
190
+          }
191
+        }
192
+
193
+        .editForm {
194
+          .ant-form-item {
195
+            margin-bottom: 15px;
196
+
197
+            .ant-form-item-label {
198
+              line-height: 0;
199
+            }
200
+          }
201
+        }
202
+      }
203
+
204
+      button {
205
+        &:nth-child(1) {
206
+          margin-right: 20px;
207
+        }
208
+      }
209
+    }
210
+  }
211
+}

+ 137 - 0
src/app/share/businessData-detail-info-modal/businessData-detail-info-modal.component.ts

@@ -0,0 +1,137 @@
1
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2
+import { MainService } from '../../services/main.service';
3
+import { ToolService } from 'src/app/services/tool.service';
4
+@Component({
5
+  selector: 'app-businessData-detail-info-modal',
6
+  templateUrl: './businessData-detail-info-modal.component.html',
7
+  styleUrls: ['./businessData-detail-info-modal.component.less']
8
+})
9
+export class BusinessDataDetailInfoModalComponent implements OnInit {
10
+  // 切换科室,切换弹窗
11
+  hosId;
12
+  hsLoading = false;
13
+  pageIndex: number = 1;//表格当前页码
14
+  pageSize: number = 10;//表格每页展示条数
15
+  total: number = 0;//表格总数据量
16
+  searchCriteria:any = {
17
+    stype: 0,
18
+    specimenDesc: 0,
19
+  }
20
+  @Input() show: Boolean;
21
+  @Input() infoId: String;
22
+  @Input() type: String = '';
23
+  @Input() dataInfo: any;
24
+
25
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
26
+
27
+  constructor(private mainService: MainService, private tool: ToolService) { }
28
+
29
+  ngOnInit() {
30
+    this.hosId = this.tool.getCurrentHospital().id;
31
+    switch(this.type){
32
+      case 'drugsJpbag':
33
+        this.getNewDrugConfig(1);
34
+        break;
35
+      case 'drugsWestern':
36
+        this.getNewDrugConfig(1);
37
+        break;
38
+      case 'drugsReturn':
39
+        this.getNewDrugConfig(1);
40
+        break;
41
+      case 'drugsPoison':
42
+        this.getNewDrugConfig(1);
43
+        break;
44
+      case 'drugsHerbal':
45
+        this.getNewDrugConfig(1);
46
+        break;
47
+
48
+    }
49
+  }
50
+  // 关闭弹窗
51
+  hideModal() {
52
+    this.closeModelHs.emit(JSON.stringify({ show: false }));//emits(向上弹射)事件
53
+  }
54
+
55
+  // 分页获取数据
56
+  getList(){
57
+    switch(this.type){
58
+      case 'drugsJpbag':
59
+        this.getDrugsBugList(1);
60
+        break;
61
+      case 'drugsWestern':
62
+        this.getDrugsBugList(1);
63
+        break;
64
+      case 'drugsReturn':
65
+        this.getDrugsBugList(1);
66
+        break;
67
+      case 'drugsPoison':
68
+        this.getDrugsBugList(1);
69
+        break;
70
+      case 'drugsHerbal':
71
+        this.getDrugsBugList(1);
72
+        break;
73
+    }
74
+  }
75
+
76
+  // 获取新药品一单一码列表
77
+  drugsBugSingleList: any = [];// 药品列表
78
+  drugsBag:any = {};// 药包
79
+  getDrugsBugSingle(drugsBagId) {
80
+    let postData = {
81
+      type: this.type,
82
+      extraType: 'drugsInfo',
83
+      drugsBagId,
84
+    }
85
+    this.hsLoading = true;
86
+    this.mainService.transflow(postData, 'extra').subscribe(res => {
87
+      this.hsLoading = false;
88
+      if(res.state == 200){
89
+        if(res.data){
90
+          this.drugsBugSingleList = res.data.drugsList || [];
91
+          this.drugsBag = res.data.drugsBag || {};
92
+        }
93
+      }
94
+    })
95
+  }
96
+
97
+  // 获取新药品列表
98
+  getDrugsBugList(idx?){
99
+    this.getDrugsBugSingle(this.infoId);
100
+  }
101
+
102
+  // 获取新药品配置
103
+  configs:any = {};
104
+  getNewDrugConfig(idx?) {
105
+    this.hsLoading = true;
106
+    let postData = {
107
+      idx: 0,
108
+      sum: 1,
109
+      taskTypeConfig: {
110
+        taskTypeDTO: {
111
+          hosId: {
112
+            id: this.hosId
113
+          },
114
+          ordinaryField: {
115
+            key: 'ordinary_field',
116
+            value: this.type,
117
+          }
118
+        }
119
+      }
120
+    };
121
+    this.mainService
122
+      .getFetchDataList("simple/data", "taskTypeConfig", postData)
123
+      .subscribe((result) => {
124
+        if (result.status == 200) {
125
+          let list = result.list || [];
126
+          this.configs = list[0] || {};
127
+          this.getDrugsBugList(idx);
128
+        }else{
129
+          this.hsLoading = false;
130
+        }
131
+      });
132
+  }
133
+
134
+}
135
+
136
+
137
+

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

@@ -1,6 +1,14 @@
1 1
 <div class="modal display_flex justify-content_flex-center align-items_center" *ngIf="show">
2 2
   <div class="modalBody" style="width: 1200px;">
3
-    <div class="title">业务数据查看<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
3
+    <div class="title" *ngIf="(type === 'drugsJpbag' || type === 'drugsWestern' || type === 'drugsReturn' || type === 'drugsPoison' || type === 'drugsHerbal');else elseTpl">药品详情<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4
+    <ng-template #elseTpl>
5
+      <div class="title">业务数据查看<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
6
+    </ng-template>
7
+    <div class="drugsBag" *ngIf="configs.drugsModel === 1 && (type === 'drugsJpbag' || type === 'drugsWestern' || type === 'drugsReturn' || type === 'drugsPoison' || type === 'drugsHerbal')">
8
+      <div>单号:{{drugsBag.batchNo}}</div>
9
+      <div>申请科室:{{drugsBag.target ? drugsBag.target.dept : ''}}</div>
10
+      <div>发药科室:{{drugsBag.launch ? drugsBag.launch.dept : ''}}</div>
11
+    </div>
4 12
     <div class="content">
5 13
       <!-- 血制品 -->
6 14
       <nz-table *ngIf="type === 'blood'" class="hospitalTable" [nzData]="bloodList" nzSize="middle" [nzShowPagination]="false"
@@ -32,6 +40,56 @@
32 40
           </tr>
33 41
         </tbody>
34 42
       </nz-table>
43
+      <!-- 新药品-一单一码 -->
44
+      <nz-table *ngIf="configs.drugsModel === 1 && (type === 'drugsJpbag' || type === 'drugsWestern' || type === 'drugsReturn' || type === 'drugsPoison' || type === 'drugsHerbal')" class="hospitalTable" [nzData]="drugsBugSingleList" nzSize="middle" [nzShowPagination]="false"
45
+        [nzLoading]="hsLoading" [nzScroll]="{ y: '500px' }">
46
+        <thead>
47
+          <tr class="thead">
48
+            <th nzWidth="5%">序号</th>
49
+            <th nzWidth="85%">药品名称+规格</th>
50
+            <th nzWidth="10%">数量</th>
51
+          </tr>
52
+        </thead>
53
+        <tbody>
54
+          <tr *ngFor="let data of drugsBugSingleList;let i = index;">
55
+            <td>{{i+1}}</td>
56
+            <td>{{ data.drugsInfo }} {{ data.model }}</td>
57
+            <td>{{ data.drugsNum }}</td>
58
+          </tr>
59
+        </tbody>
60
+      </nz-table>
61
+      <!-- 新药品-一单多码 -->
62
+      <nz-table *ngIf="configs.drugsModel === 2 && (type === 'drugsJpbag' || type === 'drugsWestern' || type === 'drugsReturn' || type === 'drugsPoison' || type === 'drugsHerbal')" class="hospitalTable" [nzData]="drugsBugMultipleList" nzSize="middle" [nzShowPagination]="false"
63
+        [nzLoading]="hsLoading" [nzScroll]="{ y: '500px' }">
64
+        <thead>
65
+          <tr class="thead">
66
+            <th nzWidth="5%">序号</th>
67
+            <th nzWidth="11%">单号</th>
68
+            <th nzWidth="8%">种类数</th>
69
+            <th nzWidth="8%">总数</th>
70
+            <th nzWidth="10%">收取人</th>
71
+            <th nzWidth="10%">收取交接人</th>
72
+            <th nzWidth="14%">收取时间</th>
73
+            <th nzWidth="10%">送达人</th>
74
+            <th nzWidth="14%">送达交接人</th>
75
+            <th nzWidth="10%">送达时间</th>
76
+          </tr>
77
+        </thead>
78
+        <tbody>
79
+          <tr *ngFor="let data of drugsBugMultipleList;let i = index;" (click)="viewDetail(type, data.id)">
80
+            <td>{{i+1}}</td>
81
+            <td>{{ data.batchNo }}</td>
82
+            <td>{{ data.drugsTypeCount }}</td>
83
+            <td>{{ data.drugsCount }}</td>
84
+            <td><ng-container *ngIf="handoverStartObj">{{handoverStartObj.username}}</ng-container></td>
85
+            <td><ng-container *ngIf="handoverStartObj && handoverStartObj.handoverUserid">{{handoverStartObj.handoverUserid.name}}</ng-container></td>
86
+            <td><ng-container *ngIf="handoverStartObj">{{handoverStartObj.operationTime}}</ng-container></td>
87
+            <td><ng-container *ngIf="handoverEndObj">{{handoverEndObj.username}}</ng-container></td>
88
+            <td><ng-container *ngIf="handoverEndObj && handoverEndObj.handoverUserid">{{handoverEndObj.handoverUserid.name}}</ng-container></td>
89
+            <td><ng-container *ngIf="handoverEndObj">{{handoverEndObj.operationTime}}</ng-container></td>
90
+          </tr>
91
+        </tbody>
92
+      </nz-table>
35 93
       <!-- 标本 -->
36 94
       <div class="list-template w100" *ngIf="type === 'specimen'">
37 95
         <div class="list-template__content">
@@ -155,7 +213,7 @@
155 213
         </tbody>
156 214
       </nz-table>
157 215
 
158
-      <div class="pagination" *ngIf="type !== 'blood'">
216
+      <div class="pagination" *ngIf="type !== 'blood' && type !== 'drugsJpbag' && type !== 'drugsWestern' && type !== 'drugsReturn' && type !== 'drugsPoison' && type !== 'drugsHerbal'">
159 217
         <ng-template #totalTemplate let-total> 共 {{ total }} 条 </ng-template>
160 218
         <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="total"
161 219
           [(nzPageSize)]="pageSize" (nzPageIndexChange)="getList()"
@@ -168,3 +226,12 @@
168 226
     </div>
169 227
   </div>
170 228
 </div>
229
+
230
+<!-- 业务数据-二级信息查看 -->
231
+<app-businessData-detail-info-modal
232
+  *ngIf="businessDataModalShow"
233
+  [show]="businessDataModalShow"
234
+  [type]="businessDataModalType"
235
+  [infoId]="infoId"
236
+  (closeModelHs)="closeModelBlood($event)"
237
+></app-businessData-detail-info-modal>

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

@@ -7,6 +7,14 @@
7 7
   height: 100%;
8 8
   background: rgba(0, 0, 0, 0.4);
9 9
   z-index: 999;
10
+  .drugsBag{
11
+    display: flex;
12
+    align-items: center;
13
+    font-size: 16px;
14
+    gap: 40px;
15
+    padding: 16px 24px 0;
16
+    border-top: 1px solid #E8EBEF;
17
+  }
10 18
   .hospitalTable {
11 19
     width: 100%;
12 20
     td {
@@ -61,10 +69,8 @@
61 69
 
62 70
   .modalBody {
63 71
     width: 700px;
64
-    min-height: 220px;
65 72
     background: #fff;
66 73
     border-radius: 5px;
67
-    padding: 10px 20px;
68 74
     color: #333;
69 75
     &.modalBody-search {
70 76
       width: 480px;
@@ -73,13 +79,17 @@
73 79
 
74 80
     .title {
75 81
       width: 100%;
82
+      height: 53px;
83
+      line-height: 53px;
84
+      border-bottom: 1px solid #E8EBEF;
85
+      padding: 0 28px;
76 86
       text-align: center;
77 87
       font-size: 18px;
78 88
       position: relative;
79 89
 
80 90
       i {
81 91
         position: absolute;
82
-        right: 0;
92
+        right: 28px;
83 93
         top: 0;
84 94
         font-size: 20px;
85 95
         color: #666;
@@ -89,12 +99,11 @@
89 99
     }
90 100
 
91 101
     .content {
92
-      min-height: 117px;
93 102
       background: #f9fafb;
94 103
       border: 1px solid #e5e9ed;
95 104
       border-radius: 5px;
96 105
       overflow: hidden;
97
-      margin-top: 12px;
106
+      margin: 16px 24px 0;
98 107
       display: flex;
99 108
       flex-direction: column;
100 109
       justify-content: center;
@@ -152,6 +161,7 @@
152 161
 
153 162
     button {
154 163
       margin-top: 10px;
164
+      margin-bottom: 10px;
155 165
 
156 166
       &.btn {
157 167
         margin-left: 8px;

+ 157 - 9
src/app/share/businessData-detail-modal/businessData-detail-modal.component.ts

@@ -2,6 +2,7 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2 2
 import { MainService } from '../../services/main.service';
3 3
 import { ToolService } from 'src/app/services/tool.service';
4 4
 import { format, startOfDay, endOfDay } from 'date-fns';
5
+import { NzMessageService } from 'ng-zorro-antd';
5 6
 @Component({
6 7
   selector: 'app-businessData-detail-modal',
7 8
   templateUrl: './businessData-detail-modal.component.html',
@@ -29,7 +30,11 @@ export class BusinessDataDetailModalComponent implements OnInit {
29 30
 
30 31
   @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
31 32
 
32
-  constructor(private mainService: MainService, private tool: ToolService) { }
33
+  constructor(
34
+    private mainService: MainService,
35
+    private tool: ToolService,
36
+    private message: NzMessageService,
37
+  ) { }
33 38
 
34 39
   ngOnInit() {
35 40
     this.hosId = this.tool.getCurrentHospital().id;
@@ -39,19 +44,35 @@ export class BusinessDataDetailModalComponent implements OnInit {
39 44
         this.getBlood(1);
40 45
         break;
41 46
       case 'specimen':
42
-          this.getSpecimen(1);
43
-          this.getSpecimenType();
44
-          this.getSpecimenDesc();
45
-          break;
47
+        this.getSpecimen(1);
48
+        this.getSpecimenType();
49
+        this.getSpecimenDesc();
50
+        break;
46 51
       case 'deptInspectionRateStatistics':
47
-          this.getDeptInspectionRateStatistics(1);
48
-          break;
52
+        this.getDeptInspectionRateStatistics(1);
53
+        break;
49 54
       case 'deptInspectionStatistics':
50 55
         this.getDeptInspectionStatistics(1);
51 56
         break;
52 57
       case 'washingException':
53
-          this.getWashingException(1);
54
-          break;
58
+        this.getWashingException(1);
59
+        break;
60
+      case 'drugsJpbag':
61
+        this.getNewDrugConfig(1);
62
+        break;
63
+      case 'drugsWestern':
64
+        this.getNewDrugConfig(1);
65
+        break;
66
+      case 'drugsReturn':
67
+        this.getNewDrugConfig(1);
68
+        break;
69
+      case 'drugsPoison':
70
+        this.getNewDrugConfig(1);
71
+        break;
72
+      case 'drugsHerbal':
73
+        this.getNewDrugConfig(1);
74
+        break;
75
+
55 76
     }
56 77
   }
57 78
   // 关闭弹窗
@@ -97,6 +118,21 @@ export class BusinessDataDetailModalComponent implements OnInit {
97 118
       case 'washingException':
98 119
         this.getWashingException();
99 120
         break;
121
+      case 'drugsJpbag':
122
+        this.getDrugsBugList(1);
123
+        break;
124
+      case 'drugsWestern':
125
+        this.getDrugsBugList(1);
126
+        break;
127
+      case 'drugsReturn':
128
+        this.getDrugsBugList(1);
129
+        break;
130
+      case 'drugsPoison':
131
+        this.getDrugsBugList(1);
132
+        break;
133
+      case 'drugsHerbal':
134
+        this.getDrugsBugList(1);
135
+        break;
100 136
     }
101 137
   }
102 138
 
@@ -188,6 +224,104 @@ export class BusinessDataDetailModalComponent implements OnInit {
188 224
     })
189 225
   }
190 226
 
227
+  // 获取新药品一单一码列表
228
+  drugsBugSingleList: any = [];// 药品列表
229
+  drugsBag:any = {};// 药包
230
+  getDrugsBugSingle(drugsBagId) {
231
+    let postData = {
232
+      type: this.type,
233
+      extraType: 'drugsInfo',
234
+      drugsBagId,
235
+    }
236
+    this.hsLoading = true;
237
+    this.mainService.transflow(postData, 'extra').subscribe(res => {
238
+      this.hsLoading = false;
239
+      if(res.state == 200){
240
+        if(res.data){
241
+          this.drugsBugSingleList = res.data.drugsList || [];
242
+          this.drugsBag = res.data.drugsBag || {};
243
+        }
244
+      }
245
+    })
246
+  }
247
+
248
+  // 获取新药品一单多码列表
249
+  drugsBugMultipleList: any = [];// 药包列表
250
+  workOrder:any = {};// 工单
251
+  handoverStartObj:any = {};// 接收人
252
+  handoverEndObj:any = {};// 送达人
253
+  getDrugsBugMultiple(idx, drugsModel) {
254
+    if (idx) {
255
+      this.pageIndex = 1;
256
+    }
257
+    let postData = {
258
+      type: this.type,
259
+      extraType: 'orderInfo',
260
+      orderId: this.orderId,
261
+    }
262
+    this.hsLoading = true;
263
+    this.mainService.transflow(postData, 'extra').subscribe(res => {
264
+      this.hsLoading = false;
265
+      if(res.state == 200){
266
+        if(res.data){
267
+          this.drugsBugMultipleList = res.data.drugsBagList || [];
268
+          this.workOrder = res.data.workOrder || {};
269
+          this.total = this.drugsBugMultipleList.length;
270
+
271
+          this.handoverStartObj = this.workOrder.record.find(v => v.operation.value == 8);
272
+          this.handoverEndObj = this.workOrder.record.find(v => v.operation.value == 10);
273
+
274
+          if(drugsModel === 1){
275
+            // 一单一码
276
+            if(this.drugsBugMultipleList.length){
277
+              this.getDrugsBugSingle(this.drugsBugMultipleList[0].id);
278
+            }else{
279
+              this.message.warning('未查询到药品!')
280
+            }
281
+          }
282
+
283
+        }
284
+      }
285
+    })
286
+  }
287
+
288
+  // 获取新药品列表
289
+  getDrugsBugList(idx?){
290
+    this.getDrugsBugMultiple(idx, this.configs.drugsModel);
291
+  }
292
+
293
+  // 获取新药品配置
294
+  configs:any = {};
295
+  getNewDrugConfig(idx?) {
296
+    this.hsLoading = true;
297
+    let postData = {
298
+      idx: 0,
299
+      sum: 1,
300
+      taskTypeConfig: {
301
+        taskTypeDTO: {
302
+          hosId: {
303
+            id: this.hosId
304
+          },
305
+          ordinaryField: {
306
+            key: 'ordinary_field',
307
+            value: this.type,
308
+          }
309
+        }
310
+      }
311
+    };
312
+    this.mainService
313
+      .getFetchDataList("simple/data", "taskTypeConfig", postData)
314
+      .subscribe((result) => {
315
+        if (result.status == 200) {
316
+          let list = result.list || [];
317
+          this.configs = list[0] || {};
318
+          this.getDrugsBugList(idx);
319
+        }else{
320
+          this.hsLoading = false;
321
+        }
322
+      });
323
+  }
324
+
191 325
   // 获取科室检查率统计-详情列表
192 326
   getDeptInspectionRateStatistics(idx?) {
193 327
     if (idx) {
@@ -298,6 +432,20 @@ export class BusinessDataDetailModalComponent implements OnInit {
298 432
     })
299 433
 
300 434
   }
435
+
436
+  // 查看业务数据
437
+  businessDataModalShow = false; //业务数据弹窗开关
438
+  businessDataModalType = ''; //业务数据类型
439
+  infoId = ''; //业务数据id
440
+  viewDetail(type, id) {
441
+    this.infoId = id;
442
+    this.businessDataModalType = type;
443
+    this.businessDataModalShow = true;
444
+  }
445
+  // 关闭业务数据弹窗
446
+  closeModelBlood(e) {
447
+    this.businessDataModalShow = JSON.parse(e).show;
448
+  }
301 449
 }
302 450
 
303 451
 

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

@@ -1239,6 +1239,9 @@
1239 1239
     <button *ngIf="orderInfo.taskType.associationType.value == 'ordinary' && orderInfo.taskType.ordinaryField.value == 'blood'" class="btn default" nz-button nzType="default" (click)="viewDetail(orderInfo, 'blood')">
1240 1240
       业务数据
1241 1241
     </button>
1242
+    <button *ngIf="orderInfo.taskType.associationType.value == 'ordinary' && (orderInfo.taskType.ordinaryField.value == 'drugsJpbag' || orderInfo.taskType.ordinaryField.value == 'drugsWestern' || orderInfo.taskType.ordinaryField.value == 'drugsReturn' || orderInfo.taskType.ordinaryField.value == 'drugsPoison' || orderInfo.taskType.ordinaryField.value == 'drugsHerbal')" class="btn default" nz-button nzType="default" (click)="viewDetail(orderInfo, orderInfo.taskType.ordinaryField.value)">
1243
+      业务数据
1244
+    </button>
1242 1245
     <button *ngIf="orderInfo.taskType.associationType.value == 'specimen' || orderInfo.taskType.associationType.value == 'specimenPlan'" class="btn default" nz-button nzType="default" (click)="viewDetail(orderInfo, 'specimen')">
1243 1246
       业务数据
1244 1247
     </button>

+ 4 - 0
src/app/share/share.module.ts

@@ -58,6 +58,7 @@ import { StripHtmlPipe } from '../pipes/strip-html.pipe.';
58 58
 import { PathologyAddComponent } from './pathology-add/pathology-add.component';
59 59
 import { PathologyDetailComponent } from './pathology-detail/pathology-detail.component';
60 60
 import { StringToFirstValuePipe } from '../pipes/string-to-first-name.pipe';
61
+import { BusinessDataDetailInfoModalComponent } from './businessData-detail-info-modal/businessData-detail-info-modal.component';
61 62
 
62 63
 @NgModule({
63 64
   declarations: [
@@ -81,6 +82,7 @@ import { StringToFirstValuePipe } from '../pipes/string-to-first-name.pipe';
81 82
     InspectionAddressTagPromptModalComponent,
82 83
     InspectionExecuteAssignPromptModalComponent,
83 84
     BusinessDataDetailModalComponent,
85
+    BusinessDataDetailInfoModalComponent,
84 86
     RelationTransDetailModalComponent,
85 87
     BxPromptModalComponent,
86 88
     AppraiseDetailComponent,
@@ -113,6 +115,7 @@ import { StringToFirstValuePipe } from '../pipes/string-to-first-name.pipe';
113 115
     SpePromptModalComponent,
114 116
     OrderPromptModalComponent,
115 117
     BusinessDataDetailModalComponent,
118
+    BusinessDataDetailInfoModalComponent,
116 119
     RelationTransDetailModalComponent,
117 120
     DetailOrdinaryComponent,
118 121
     BloodHistoryPromptModalComponent,
@@ -148,6 +151,7 @@ import { StringToFirstValuePipe } from '../pipes/string-to-first-name.pipe';
148 151
     InspectionAddressTagPromptModalComponent,
149 152
     InspectionExecuteAssignPromptModalComponent,
150 153
     BusinessDataDetailModalComponent,
154
+    BusinessDataDetailInfoModalComponent,
151 155
     RelationTransDetailModalComponent,
152 156
     BxPromptModalComponent,
153 157
     AppraiseDetailComponent,

+ 6 - 1
src/app/views/page-config/page-config.component.html

@@ -1,7 +1,7 @@
1 1
 <div class="incidentConfig">
2 2
   <div class="tagsAndTemplete">
3 3
     <div class="tags">
4
-      <div><i class="icon_transport transport-peizhizhongxin"></i>配置中心&emsp;&gt;&emsp;业务页面控制</div>
4
+      <div><i class="icon_transport transport-peizhizhongxin"></i>配置中心&emsp;&gt;&emsp;业务流程控制</div>
5 5
       <div class="tagList">
6 6
         <span *ngFor="let tag of tagList" [ngClass]="{ active: activeTagLink === tag.link }" (click)="clickTag(tag)">{{ tag.title }}</span>
7 7
       </div>
@@ -12,6 +12,11 @@
12 12
   <ng-container *ngIf="activeTagLink === 'pageConfigSpecimen'">
13 13
     <app-configuration-specimen></app-configuration-specimen>
14 14
   </ng-container>
15
+
16
+  <!-- 药品 -->
17
+  <ng-container *ngIf="activeTagLink === 'pageConfigDrug'">
18
+    <app-configuration-drug></app-configuration-drug>
19
+  </ng-container>
15 20
 </div>
16 21
 
17 22
 

+ 2 - 0
src/app/views/page-config/page-config.module.ts

@@ -5,12 +5,14 @@ import { PageConfigRoutingModule } from './page-config-routing.module';
5 5
 import { PageConfigComponent } from './page-config.component';
6 6
 import { ShareModule } from 'src/app/share/share.module';
7 7
 import { ConfigurationSpecimenComponent } from 'src/app/components/configurationCenter/configuration-specimen/configuration-specimen.component';
8
+import { ConfigurationDrugComponent } from 'src/app/components/configurationCenter/configuration-drug/configuration-drug.component';
8 9
 
9 10
 
10 11
 @NgModule({
11 12
   declarations: [
12 13
     PageConfigComponent,
13 14
     ConfigurationSpecimenComponent,
15
+    ConfigurationDrugComponent,
14 16
   ],
15 17
   imports: [
16 18
     CommonModule,

+ 7 - 5
src/app/views/task-type-management/task-type-management.component.html

@@ -61,11 +61,13 @@
61 61
           </nz-select>
62 62
         </div>
63 63
         <ng-container *ngIf="association.value == 'ordinary'">
64
-          <nz-form-label class="label" nzRequired>关联业务</nz-form-label>
65
-          <!-- 关联业务禁止修改 -->
66
-          <nz-select class="mb8 w100" nzShowSearch nzAllowClear nzPlaceHolder="请选择关联业务" [(ngModel)]="relatedBusiness.id" [nzDisabled]="!add">
67
-            <nz-option nzLabel="{{data.name}}" nzValue="{{data.id}}" *ngFor="let data of allRelatedBusiness"></nz-option>
68
-          </nz-select>
64
+          <div nz-row class="mb8 display_flex align-items_center">
65
+            <nz-form-label class="label" nzRequired>关联业务</nz-form-label>
66
+            <!-- 关联业务禁止修改 -->
67
+            <nz-select class="flex_1" nzShowSearch nzAllowClear nzPlaceHolder="请选择关联业务" [(ngModel)]="relatedBusiness.id" [nzDisabled]="!add">
68
+              <nz-option nzLabel="{{data.name}}" nzValue="{{data.id}}" *ngFor="let data of allRelatedBusiness"></nz-option>
69
+            </nz-select>
70
+          </div>
69 71
         </ng-container>
70 72
         <nz-form-label *ngIf="association.value == 'specimen'" class="label" nzRequired>空单默认科室</nz-form-label>
71 73
         <nz-select *ngIf="association.value == 'specimen'" class="mb8 w100" [ngClass]="{remandTypeId:!defaultNullDeptId}"