소스 검색

消毒供应生成表单

seimin 1 년 전
부모
커밋
963f276efb

+ 1 - 1
proxy.conf.json

@@ -1,6 +1,6 @@
1 1
 {
2 2
   "/service": {
3
-    "target": "http://192.168.3.108",
3
+    "target": "http://192.168.4.240",
4 4
     "logLevel": "debug",
5 5
     "changeOrigin": true,
6 6
     "pathRewrite": {

+ 14 - 0
src/app/views/form-management/form-management-routing.module.ts

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

+ 148 - 0
src/app/views/form-management/form-management.component.html

@@ -0,0 +1,148 @@
1
+<div class="list-template">
2
+  <div class="list-template__content">
3
+    <div class="list-template__top" nz-row>
4
+      <div nz-col nzXl='15' class="list-template__searchBox"></div>
5
+      <div nz-col nzXl="9" class="list-template__btns"></div>
6
+    </div>
7
+    <div class="list-template__bottom">
8
+      <nz-table class="list-template__nzTable" [nzData]="listOfData" nzSize="middle" [nzShowPagination]="false"
9
+        [nzLoading]="loading1">
10
+        <thead>
11
+          <tr class="thead">
12
+            <th nzWidth="4%">序号</th>
13
+            <th nzWidth="16%">表单号</th>
14
+            <th nzWidth="16%">发起时间</th>
15
+            <th nzWidth="16%">发起人</th>
16
+            <th nzWidth="16%">包含类型</th>
17
+            <th nzWidth="16%">工单数</th>
18
+            <th nzWidth="16%">操作</th>
19
+          </tr>
20
+        </thead>
21
+        <tbody>
22
+          <tr *ngFor="let data of listOfData;let i = index">
23
+            <td>{{ i + (pageIndex - 1) * pageSize + 1}}</td>
24
+            <td>{{ data.code || '无' }}</td>
25
+            <td>{{data.addTime?(data.addTime|date:'yyyy-MM-dd HH:mm'):'无'}}</td>
26
+            <td>{{ data.addUserDTO?data.addUserDTO.name:'无' }}</td>
27
+            <td>{{ data.taskTypeDTO?data.taskTypeDTO.taskName:'无' }}</td>
28
+            <td>{{data.total}}</td>
29
+            <td>
30
+              <div class="coop">
31
+                <button nz-button nzType="link" (click)="supplementPrint(data)">查看视图</button>
32
+              </div>
33
+            </td>
34
+          </tr>
35
+        </tbody>
36
+      </nz-table>
37
+      <div class="list-template__pagination">
38
+        <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="listLength" [(nzPageSize)]="pageSize"
39
+          (nzPageIndexChange)="getList()" (nzPageSizeChange)="getList()">
40
+        </nz-pagination>
41
+      </div>
42
+    </div>
43
+  </div>
44
+</div>
45
+
46
+<!-- 右侧悬浮框 -->
47
+<div id="fixedMenu" class="fixed">
48
+  <div class="left" *ngIf="fixedTab == 'formManagement'">
49
+    <!-- 表单生成 -->
50
+    <div class="con" *ngIf="fixedTab == 'formManagement'">
51
+      <div class="title">表单生成</div>
52
+      <overlay-scrollbars [ngStyle]="{ height: '206px' }" class="conditions">
53
+        <div nz-row>
54
+          <div nz-col nzSpan="6">其他临床服务:</div>
55
+          <div nz-col nzSpan="18">
56
+            <nz-radio-group [(ngModel)]="tasktypeId">
57
+              <label nz-radio [nzValue]="option.id" *ngFor="let option of taskTypes">{{option.taskName}}</label>
58
+            </nz-radio-group>
59
+          </div>
60
+        </div>
61
+      </overlay-scrollbars>
62
+      <div class="btns display_flex justify-content_flex-center">
63
+        <button
64
+          nz-button
65
+          nzType="primary"
66
+          nzValue="small"
67
+          (click)="saveFormManagement()"
68
+        >
69
+          确认
70
+        </button>
71
+      </div>
72
+    </div>
73
+  </div>
74
+  <div class="right">
75
+    <div class="fixedMenu hujiaozhongxin">
76
+      <div class="menuItems">
77
+        <button
78
+          nz-button
79
+          nzType="link"
80
+          class="item itemLink"
81
+          (click)="checkFixedTab('formManagement')"
82
+        >
83
+          表单生成
84
+        </button>
85
+      </div>
86
+    </div>
87
+  </div>
88
+  <div *ngIf="fixedTab != ''" (click)="fixedTab = ''" class="fixedMark"></div>
89
+</div>
90
+
91
+<!-- 表单生成 -->
92
+<div class="newOrder display_flex justify-content_flex-center align-items_center" *ngIf="fixedTab == 'formManagementTable'">
93
+<div class="modalBody">
94
+  <p class="title">
95
+    表单生成
96
+    <i class="icon_transport transport-guanbi" (click)="formManagementCancel()"></i>
97
+  </p>
98
+  <div class="content">
99
+    <nz-table class="hospitalTable" [nzData]="formManagementList" nzSize="middle" [nzShowPagination]="false"
100
+      [nzLoading]="formManagementLoading" [nzScroll]="{ y: '350px' }">
101
+      <thead>
102
+        <tr class="thead">
103
+            <th nzWidth="8%">序号</th>
104
+            <th nzWidth="23%">工单单号</th>
105
+            <th nzWidth="23%">申请科室</th>
106
+            <th nzWidth="23%">任务类型</th>
107
+            <th nzWidth="23%">发起时间</th>
108
+        </tr>
109
+      </thead>
110
+      <tbody>
111
+        <tr *ngFor="let data of formManagementList;let i = index;">
112
+            <td>{{ i + (formManagementListPageIndex - 1) * formManagementListPageSize + 1}}</td>
113
+            <td>{{ data.gdcode || '无' }}</td>
114
+            <td>{{ data.createDeptDTO ? data.createDeptDTO.dept : '无' }}</td>
115
+            <td>{{ data.taskType.taskName }}<ng-container *ngIf="data.goodsRemark">-{{data.goodsRemark}}</ng-container></td>
116
+            <td>{{ data.startTime | date:'yyyy-MM-dd HH:mm'}}</td>
117
+        </tr>
118
+      </tbody>
119
+    </nz-table>
120
+    <div class="pagination">
121
+      <nz-pagination [(nzPageIndex)]="formManagementListPageIndex" nzShowSizeChanger [(nzTotal)]="formManagementListLength"
122
+        [(nzPageSize)]="formManagementListPageSize" (nzPageIndexChange)="getOtherTasktype()"
123
+        (nzPageSizeChange)="getOtherTasktype()">
124
+      </nz-pagination>
125
+    </div>
126
+  </div>
127
+  <div class="btns display_flex justify-content_flex-center align-items_center">
128
+    <button
129
+      nz-button
130
+      class="btn"
131
+      nzType="primary"
132
+      (click)="formManagementOk()"
133
+      [nzLoading]="isOkLoading"
134
+      *ngIf="formManagementList.length"
135
+    >
136
+      确认生成
137
+    </button>
138
+    <button
139
+      class="btn cancel"
140
+      nz-button
141
+      nzType="default"
142
+      (click)="formManagementCancel()"
143
+    >
144
+      取消
145
+    </button>
146
+  </div>
147
+</div>
148
+</div>

+ 744 - 0
src/app/views/form-management/form-management.component.less

@@ -0,0 +1,744 @@
1
+@import "../../../../src/theme.less";
2
+
3
+::ng-deep .executeTime,
4
+::ng-deep
5
+  .executeTime[nzplaceholder="请选择定时发送时间"]
6
+  .ant-calendar-picker {
7
+  width: 100% !important;
8
+}
9
+::ng-deep .ant-calendar-picker-input {
10
+  width: 410px !important;
11
+}
12
+
13
+.save {
14
+  position: fixed;
15
+  left: 0;
16
+  top: 0;
17
+  width: 100%;
18
+  height: 100%;
19
+  background: rgba(0, 0, 0, 0.4);
20
+  z-index: 99;
21
+
22
+  .modalBody {
23
+    width: 350px;
24
+    // height: 580px;
25
+    background: #fff;
26
+    border-radius: 5px;
27
+    padding: 10px 20px;
28
+    color: #333;
29
+    position: relative;
30
+
31
+    .title {
32
+      width: 100%;
33
+      text-align: center;
34
+      font-size: 18px;
35
+      position: relative;
36
+
37
+      i {
38
+        position: absolute;
39
+        right: 0;
40
+        top: 0;
41
+        font-size: 20px;
42
+        color: #666;
43
+        cursor: pointer;
44
+        padding: 0 5px;
45
+      }
46
+    }
47
+
48
+    .content {
49
+      width: 310px;
50
+      height: 117px;
51
+      background: #f9fafb;
52
+      border: 1px solid #e5e9ed;
53
+      border-radius: 5px;
54
+      overflow: hidden;
55
+      margin-top: 12px;
56
+
57
+      & > div {
58
+        text-align: center;
59
+        margin: 0;
60
+
61
+        &.icon {
62
+          margin-top: 17px;
63
+
64
+          i {
65
+            color: #34b349;
66
+            font-size: 30px !important;
67
+
68
+            &.transport-wenhao {
69
+              color: #f5a523;
70
+            }
71
+
72
+            &.transport-shibai {
73
+              color: #ff3a52;
74
+            }
75
+          }
76
+        }
77
+
78
+        &.defeat {
79
+          color: #333;
80
+          font-size: 18px;
81
+        }
82
+
83
+        &:nth-child(3) {
84
+          font-size: 14px;
85
+          color: #666;
86
+        }
87
+      }
88
+      .timingMessageSendingTips {
89
+        font-size: 12px;
90
+      }
91
+    }
92
+
93
+    button {
94
+      margin-top: 10px;
95
+
96
+      &.btn {
97
+        margin-left: 8px;
98
+      }
99
+    }
100
+  }
101
+
102
+  // 新增
103
+  &.add {
104
+    .modalBody {
105
+      width: 480px;
106
+      height: auto;
107
+
108
+      .content {
109
+        width: 100%;
110
+        height: auto;
111
+        padding: 18px 14px 0 14px;
112
+        max-height: 497px;
113
+        overflow-y: auto;
114
+
115
+        .addForm {
116
+          .ant-form-item {
117
+            margin-bottom: 15px;
118
+
119
+            .ant-form-item-label {
120
+              line-height: 14px;
121
+              text-align: left;
122
+            }
123
+
124
+            .desc {
125
+              margin-top: 5px;
126
+            }
127
+          }
128
+
129
+          .datesControl {
130
+            margin-top: -16px;
131
+
132
+            .ant-form-item-label {
133
+              line-height: 40px;
134
+            }
135
+          }
136
+
137
+          .timer {
138
+            .ant-form-item-label {
139
+              width: 100%;
140
+              text-align: left;
141
+            }
142
+
143
+            .numInp {
144
+              margin-right: 5px;
145
+            }
146
+
147
+            .line {
148
+              margin-right: 5px;
149
+            }
150
+          }
151
+
152
+          .timer2 {
153
+            .ant-form-item-label {
154
+              line-height: 20px;
155
+            }
156
+          }
157
+        }
158
+
159
+        .editForm {
160
+          .ant-form-item {
161
+            margin-bottom: 15px;
162
+
163
+            .ant-form-item-label {
164
+              line-height: 14px;
165
+              text-align: left;
166
+            }
167
+          }
168
+        }
169
+      }
170
+
171
+      button {
172
+        &:nth-child(1) {
173
+          margin-right: 20px;
174
+        }
175
+      }
176
+    }
177
+  }
178
+}
179
+
180
+.hospitalTable {
181
+  padding: 21px 12px;
182
+  padding-bottom: 0;
183
+
184
+  .thead {
185
+    background-image: linear-gradient(to right, @bg-start, @bg-end);
186
+
187
+    th {
188
+      background: transparent;
189
+      color: #fff;
190
+      text-align: center;
191
+      font-size: 14px;
192
+    }
193
+  }
194
+
195
+  .ant-table-body {
196
+    border-bottom: 1px solid #e5e9ed;
197
+  }
198
+
199
+  .ant-table-tbody {
200
+    tr {
201
+      text-align: center;
202
+      font-size: 14px;
203
+      border: none;
204
+      color: #333;
205
+
206
+      td {
207
+        border: none;
208
+
209
+        .coop {
210
+          span {
211
+            display: inline-block;
212
+            width: 60px;
213
+            cursor: pointer;
214
+
215
+            &::after {
216
+              content: "|";
217
+              float: right;
218
+            }
219
+
220
+            &:hover {
221
+              color: @primary-color;
222
+            }
223
+
224
+            &:active {
225
+              color: @primary-color;
226
+            }
227
+
228
+            &:nth-last-child(1) {
229
+              &::after {
230
+                content: "";
231
+              }
232
+            }
233
+          }
234
+        }
235
+      }
236
+    }
237
+
238
+    tr:nth-child(2n-1) {
239
+      background: #f9fafb;
240
+    }
241
+  }
242
+}
243
+
244
+// 右侧悬浮菜单
245
+.fixed {
246
+  position: fixed;
247
+  top: 40%;
248
+  right: 0;
249
+  z-index: 9;
250
+  border-radius: 5px 0 0 5px;
251
+
252
+  .fixedMark {
253
+    position: fixed;
254
+    left: 0;
255
+    top: 0;
256
+    width: 100%;
257
+    height: 100%;
258
+    background: rgba(0, 0, 0, 0.2);
259
+    z-index: 88;
260
+  }
261
+
262
+  // overflow: hidden;
263
+  & > .left {
264
+    width: 480px;
265
+    // height: 280px;
266
+    float: left;
267
+    background: #fff;
268
+    padding: 16px;
269
+    border-radius: 5px;
270
+    border: 1px solid #e5e9ed;
271
+    // box-shadow: -8px 5px 15px #eae9e9;
272
+    position: relative;
273
+    z-index: 98;
274
+
275
+    .con {
276
+      background: #f9fafb;
277
+      width: 100%;
278
+      // height: 300px;
279
+      // overflow: auto;
280
+      border-radius: 5px;
281
+      border: 1px solid #e5e9ed;
282
+      padding: 16px;
283
+      &.bindingExtension {
284
+        min-height: 246px;
285
+        .bindingExtension_content {
286
+          display: flex;
287
+          flex-wrap: wrap;
288
+        }
289
+        .noContentFlex {
290
+          display: flex;
291
+          justify-content: center;
292
+          align-items: center;
293
+          height: 136px;
294
+          flex-direction: column;
295
+          .noContent {
296
+            width: 128px;
297
+          }
298
+          p {
299
+            margin-top: 8px;
300
+          }
301
+        }
302
+        .ant-checkbox-wrapper {
303
+          font-size: 12px;
304
+          width: 100%;
305
+          display: flex;
306
+          margin-top: 8px;
307
+          justify-content: space-between;
308
+          align-items: center;
309
+          ::ng-deep .ant-checkbox {
310
+            font-size: 12px;
311
+            top: 0;
312
+          }
313
+          ::ng-deep .ant-checkbox + span {
314
+            flex: 1;
315
+          }
316
+        }
317
+      }
318
+
319
+      &.tableCon {
320
+        padding: 0;
321
+
322
+        .table {
323
+          font-size: 14px;
324
+
325
+          tr {
326
+            td {
327
+              padding: 15px 6px;
328
+              text-align: center;
329
+
330
+              & > .tdiv {
331
+                overflow: hidden;
332
+
333
+                .name {
334
+                  float: left;
335
+                }
336
+
337
+                .num {
338
+                  float: right;
339
+                  font-size: 12px;
340
+
341
+                  span {
342
+                    color: @primary-color;
343
+                    font-size: 14px;
344
+                  }
345
+                }
346
+              }
347
+
348
+              .notOpen {
349
+                color: #666;
350
+                font-size: 12px;
351
+
352
+                img {
353
+                  margin-bottom: 8px;
354
+                }
355
+              }
356
+            }
357
+          }
358
+        }
359
+      }
360
+
361
+      .title {
362
+        color: #333;
363
+        text-align: center;
364
+      }
365
+
366
+      .conditions {
367
+        & > .ant-row {
368
+          margin: 8px 0;
369
+          display: flex;
370
+          align-items: center;
371
+
372
+          .ant-row {
373
+            .ant-col-6 {
374
+              margin: 2px 0;
375
+            }
376
+          }
377
+
378
+          .checkAll {
379
+            width: 100%;
380
+            border-bottom: 1px solid rgb(233, 233, 233);
381
+            color: @primary-color;
382
+          }
383
+        }
384
+      }
385
+
386
+      .btns {
387
+        padding: 5px 20px 0 20px;
388
+      }
389
+    }
390
+  }
391
+
392
+  .right {
393
+    // opacity: .5;
394
+    width: 80px;
395
+    float: left;
396
+    background: rgba(255, 255, 255, 0.5);
397
+    border-radius: 5px 0 0 5px;
398
+    position: relative;
399
+    z-index: 8;
400
+
401
+    .fixedMenu {
402
+      border: 1px solid #e5e9ed;
403
+      color: @primary-color;
404
+      background: rgba(255, 255, 255, 0.5);
405
+      text-align: center;
406
+      border-radius: 5px 0 0 5px;
407
+      // box-shadow: -3px 4px 15px rgba(234, 233, 233, .5);
408
+
409
+      &.hujiaozhongxin {
410
+        margin-bottom: 5px;
411
+      }
412
+
413
+      .menuItems {
414
+        .item {
415
+          height: 35px;
416
+          line-height: 35px;
417
+          padding: 0 6px;
418
+          cursor: default;
419
+          border-bottom: 1px solid #e5e9ed;
420
+          user-select: none;
421
+          &.itemLink {
422
+            border-bottom: none;
423
+          }
424
+
425
+          &.checked {
426
+            background: #fff;
427
+            color: #52ab77;
428
+            opacity: 1;
429
+            box-shadow: -3px 4px 7px #eae9e9;
430
+          }
431
+        }
432
+
433
+        .others {
434
+          transition: height 0.4s linear;
435
+          overflow: hidden;
436
+        }
437
+      }
438
+
439
+      .arrow {
440
+        cursor: pointer;
441
+      }
442
+    }
443
+  }
444
+}
445
+
446
+// 表单生成弹框
447
+.newOrder {
448
+  position: fixed;
449
+  left: 0;
450
+  top: 0;
451
+  width: 100%;
452
+  height: 100%;
453
+  background: rgba(0, 0, 0, 0.5);
454
+  z-index: 999;
455
+
456
+  .modalBody {
457
+    width: 1200px;
458
+    height: 580px;
459
+    background: #fff;
460
+    border-radius: 5px;
461
+    padding: 12px 20px;
462
+    color: #333;
463
+    font-size: 14px;
464
+    position: relative;
465
+
466
+    .title {
467
+      font-size: 18px;
468
+      text-align: center;
469
+      line-height: 24px;
470
+      margin: 0;
471
+      margin-bottom: 12px;
472
+      position: relative;
473
+
474
+      i {
475
+        position: absolute;
476
+        right: 0;
477
+        top: 0;
478
+        font-size: 20px;
479
+        color: #666;
480
+        cursor: pointer;
481
+        padding: 0 5px;
482
+      }
483
+    }
484
+
485
+    .content {
486
+      // width: 960px;
487
+      border: 1px solid #e5e9ed;
488
+      background: #f9fafb;
489
+      border-radius: 5px;
490
+      overflow: hidden;
491
+
492
+      .grayFont {
493
+        color: #666;
494
+      }
495
+
496
+      .col {
497
+        height: 100%;
498
+
499
+        &.left {
500
+          border-right: 2px solid #e5e9ed;
501
+          display: flex;
502
+          flex-direction: column;
503
+
504
+          .top {
505
+            padding: 8px;
506
+            nz-select {
507
+              margin-right: 8px;
508
+            }
509
+
510
+            .tel {
511
+              margin: 0 8px 0 0;
512
+            }
513
+          }
514
+          // tab 任务类型
515
+          .tabs {
516
+            display: flex;
517
+            height: 41px;
518
+            border-top: 1px solid #e5e9ed;
519
+            border-bottom: 1px solid #e5e9ed;
520
+            background-color: #fff;
521
+            .tabs__inner {
522
+              flex: 1;
523
+              overflow: hidden;
524
+              .tabs__wrap {
525
+                position: relative;
526
+                z-index: 1;
527
+                display: flex;
528
+                transition: all 1s;
529
+                .tab {
530
+                  width: 93px;
531
+                  height: 41px;
532
+                  text-align: center;
533
+                  line-height: 41px;
534
+                  background: #fff;
535
+                  border-right: 1px solid #e5e9ed;
536
+                  cursor: pointer;
537
+
538
+                  &.checked {
539
+                    background: #e5e9ed;
540
+                  }
541
+                }
542
+              }
543
+            }
544
+            .tabs__operate {
545
+              border-bottom: 1px solid #e5e9ed;
546
+              border-left: 1px solid #e5e9ed;
547
+              width: 22px;
548
+              display: flex;
549
+              flex-direction: column;
550
+              align-items: center;
551
+              justify-content: center;
552
+              position: relative;
553
+              z-index: 2;
554
+              .tabs__Icon--left {
555
+                font-size: 12px;
556
+                color: #e5e9ed;
557
+                cursor: pointer;
558
+                &:hover {
559
+                  color: #333;
560
+                }
561
+              }
562
+              .tabs__Icon--right {
563
+                transform: rotateY(180deg);
564
+                font-size: 12px;
565
+                color: #e5e9ed;
566
+                cursor: pointer;
567
+                &:hover {
568
+                  color: #333;
569
+                }
570
+              }
571
+            }
572
+          }
573
+
574
+          // 底部tab页
575
+          .bottomWrap {
576
+            flex: 1;
577
+            height: 300px;
578
+            .bottom {
579
+              padding: 0 36px;
580
+              height: 310px;
581
+              overflow-y: auto;
582
+              .ant-form {
583
+                height: 100%;
584
+                .ant-form-item {
585
+                  margin-bottom: 0;
586
+                }
587
+              }
588
+              .control-flex {
589
+                display: flex;
590
+                justify-content: space-between;
591
+                align-items: center;
592
+                .control-flex__5 {
593
+                  flex: 5;
594
+                }
595
+                .control-flex__7 {
596
+                  flex: 7;
597
+                }
598
+              }
599
+              .goods-wrap {
600
+                margin-left: 8px;
601
+                .goods-item {
602
+                  display: inline-block;
603
+                }
604
+              }
605
+              // 标本轮巡
606
+              .bottom380256 {
607
+                height: 100%;
608
+                font-size: 16px;
609
+                color: #333;
610
+                display: flex;
611
+                justify-content: center;
612
+                align-items: center;
613
+                text-align: center;
614
+              }
615
+              .bottom255 {
616
+                height: 100%;
617
+                // overflow-y: auto;
618
+                .txtC {
619
+                  height: 100%;
620
+                  display: flex;
621
+                  flex-direction: column;
622
+                  justify-content: center;
623
+                  align-items: center;
624
+                }
625
+              }
626
+
627
+              .label {
628
+                text-align: left;
629
+              }
630
+
631
+              .handlerType {
632
+                margin: 21px 0 0 0;
633
+              }
634
+
635
+              .radios {
636
+                height: 96px;
637
+                width: 100%;
638
+                overflow-y: auto;
639
+                padding: 10px 18px;
640
+                background: #fff;
641
+                border: 1px solid #e6dede;
642
+                border-radius: 5px;
643
+                .ant-row {
644
+                  width: 100%;
645
+                  display: flex;
646
+                  flex-wrap: wrap;
647
+                  .ant-radio-wrapper {
648
+                    // flex: 1;
649
+                    // max-width: 100%;
650
+                    // width: 160px;
651
+                    display: flex;
652
+                    align-items: center;
653
+                    ::ng-deep span.ant-radio + * {
654
+                      // min-width: 110px;
655
+                      white-space: normal;
656
+                      float: left;
657
+                      padding-right: 0;
658
+                    }
659
+                    ::ng-deep span.ant-radio {
660
+                      float: left;
661
+                    }
662
+                  }
663
+                }
664
+              }
665
+            }
666
+          }
667
+          // 底部信息提示
668
+          .bottomInfo {
669
+            border-top: 2px solid #e5e9ed;
670
+            padding-left: 32px;
671
+            padding-right: 32px;
672
+            height: 52px;
673
+            line-height: 52px;
674
+            font-size: 14px;
675
+            color: #ff3b53;
676
+          }
677
+        }
678
+
679
+        &.right {
680
+          background: #fff;
681
+          position: relative;
682
+
683
+          .rightTitle {
684
+            position: absolute;
685
+            width: 100%;
686
+            height: 46px;
687
+            line-height: 46px;
688
+            font-size: 16px;
689
+            margin: 0;
690
+            border-bottom: 1px solid #e5e9ed;
691
+            background: #fff;
692
+            z-index: 9999;
693
+            display: flex;
694
+            align-items: center;
695
+            .rightTitle_tab {
696
+              height: 100%;
697
+              padding: 0 16px;
698
+              border-right: 1px solid #e5e9ed;
699
+              cursor: pointer;
700
+              background-color: #fff;
701
+              &.active {
702
+                background-color: #f9fafb;
703
+              }
704
+            }
705
+          }
706
+
707
+          .cots_body {
708
+            width: 100%;
709
+            height: 100%;
710
+            // overflow: scroll;
711
+            // padding-right: 2%;
712
+            padding-top: 47px;
713
+          }
714
+        }
715
+      }
716
+    }
717
+  }
718
+
719
+  .btns {
720
+    .btn {
721
+      margin: 9px;
722
+      margin-bottom: 0;
723
+    }
724
+  }
725
+}
726
+
727
+.pagination {
728
+  margin-top: 14px;
729
+  position: absolute;
730
+  right: 5px;
731
+}
732
+
733
+.btns {
734
+  display: flex;
735
+  justify-content: center;
736
+  align-items: center;
737
+  width: 60%;
738
+  margin: 48px auto 0;
739
+
740
+  .btn {
741
+    margin: 9px;
742
+    margin-bottom: 0;
743
+  }
744
+}

+ 191 - 0
src/app/views/form-management/form-management.component.ts

@@ -0,0 +1,191 @@
1
+import { Component, OnInit, ViewChild, ElementRef } from "@angular/core";
2
+import { ActivatedRoute } from "@angular/router";
3
+
4
+import { MainService } from "../../services/main.service";
5
+import { ToolService } from "../../services/tool.service";
6
+import { NzMessageService } from 'ng-zorro-antd';
7
+@Component({
8
+  selector: "app-form-management",
9
+  templateUrl: "./form-management.component.html",
10
+  styleUrls: ["./form-management.component.less"],
11
+})
12
+export class FormManagementComponent implements OnInit {
13
+  @ViewChild('printBtn', { static: false }) printBtn: ElementRef<HTMLElement>;
14
+  constructor(
15
+    private mainService: MainService,
16
+    private route: ActivatedRoute,
17
+    private tool: ToolService,
18
+    private msg: NzMessageService,
19
+  ) {}
20
+
21
+  userInfo: any = JSON.parse(localStorage.getItem("user")) || {}; //登录用户信息
22
+  hosId;
23
+  listOfData: any[] = []; //表格数据
24
+  pageIndex: number = 1; //表格当前页码
25
+  pageSize: number = 10; //表格每页展示条数
26
+  listLength: number = 10; //表格总数据量
27
+
28
+  ngOnInit() {
29
+    this.hosId = this.tool.getCurrentHospital().id;
30
+    this.getList();
31
+    this.coopBtns = this.tool.initCoopBtns(this.route);
32
+    this.moveMenu();
33
+    this.getTaskTypes();
34
+  }
35
+
36
+  // 初始化权限按钮
37
+  coopBtns: any = {};
38
+
39
+  // 核酸打印
40
+  formManagementLoading = false;
41
+  formManagementList: any = [];
42
+  formManagementListPageIndex: number = 1;//表格当前页码
43
+  formManagementListPageSize: number = 10;//表格每页展示条数
44
+  formManagementListLength: number = 0;//表格总数据量
45
+  // 获取列表数据
46
+  getOtherTasktype() {
47
+    this.formManagementLoading = true;
48
+    let postData = {
49
+      idx: this.formManagementListPageIndex - 1,
50
+      sum: this.formManagementListPageSize,
51
+      workOrder: {
52
+        hosId: this.hosId,
53
+        gdState: {id: "433"},
54
+        serTaskTypes: this.tasktypeId,
55
+        time: 0,
56
+      },
57
+    };
58
+    this.mainService.getFetchDataList("simple/data", "workOrder", postData).subscribe((data:any) => {
59
+      this.formManagementLoading = false;
60
+      this.formManagementList = data.list || [];
61
+      this.formManagementListLength = data.totalNum || 0;
62
+    })
63
+  }
64
+
65
+  // 确认表单生成
66
+  saveFormManagement(){
67
+    if(!this.tasktypeId){
68
+      this.msg.info('请选择其他临床服务任务类型!');
69
+      return;
70
+    }
71
+    this.fixedTab = 'formManagementTable';
72
+    this.getOtherTasktype();
73
+  }
74
+
75
+  // 取消表单生成
76
+  formManagementCancel():void {
77
+    this.fixedTab = '';
78
+  }
79
+
80
+  //获取其他临床服务任务类型
81
+  isLoading: boolean = false;
82
+  tasktypeId:any;
83
+  taskTypes:any[] = [];
84
+  getTaskTypes(e:string = '') {
85
+    let postData:any = {
86
+      idx: 0,
87
+      sum: 10,
88
+      taskType: {
89
+        taskName: e,
90
+        simpleQuery: true,
91
+        hosId: {
92
+          id: this.hosId
93
+        }
94
+      }
95
+    };
96
+    postData.taskType.associationType = {
97
+      key: 'association_types',
98
+      value: 'other'
99
+    }
100
+    this.isLoading = true;
101
+    this.mainService
102
+      .getFetchDataList("simple/data", "taskType", postData)
103
+      .subscribe((result) => {
104
+        this.isLoading = false;
105
+        if (result.status == 200) {
106
+          this.taskTypes = result.list || [];
107
+        }
108
+      });
109
+  }
110
+
111
+  // 切换右侧菜单Tab
112
+  fixedTab: string = "";
113
+  checkFixedTab(type: string) {
114
+    if (this.fixedTab == type) {
115
+      this.fixedTab = "";
116
+    } else {
117
+      this.fixedTab = type;
118
+    }
119
+  }
120
+
121
+  // 菜单拖拽
122
+  moveMenu() {
123
+    let fixedMenu = document.getElementById("fixedMenu");
124
+    if (!fixedMenu) return;
125
+    fixedMenu.onmousedown = function (e) {
126
+      fixedMenu.style.cursor = "move";
127
+      let y = e.clientY - fixedMenu.offsetTop;
128
+      document.onmousemove = function (ev) {
129
+        var _y = ev.clientY - y > 0 ? ev.clientY - y : 0;
130
+        var wh = window.innerHeight;
131
+        if (_y > wh - fixedMenu.clientHeight) {
132
+          _y = wh - fixedMenu.clientHeight;
133
+        }
134
+        fixedMenu.style.top = _y + "px";
135
+      };
136
+      document.onmouseup = function () {
137
+        fixedMenu.style.cursor = "default";
138
+        this.onmousemove = null;
139
+        this.onmouseup = null;
140
+      };
141
+      // return false;
142
+    };
143
+  }
144
+
145
+  // 表格数据
146
+  loading1 = false;
147
+  getList() {
148
+    let postData = {
149
+      idx: this.pageIndex - 1,
150
+      sum: this.pageSize,
151
+      reserveForm: {
152
+        hosId: this.hosId,
153
+      },
154
+    };
155
+    this.loading1 = true;
156
+    this.mainService
157
+      .getFetchDataList("simple/data", "reserveForm", postData)
158
+      .subscribe((data) => {
159
+        this.loading1 = false;
160
+        if (data.status == 200) {
161
+          this.listOfData = data.list;
162
+          this.listLength = data.totalNum;
163
+        }
164
+      });
165
+  }
166
+
167
+  // 确认生成
168
+  isOkLoading:boolean = false;
169
+  formManagementOk(){
170
+    let postData:any = {
171
+      taskType: this.tasktypeId,
172
+      hosId: this.hosId,
173
+    };
174
+    this.isOkLoading = true;
175
+    this.mainService
176
+      .simplePost("addData", "reserveForm", postData)
177
+      .subscribe((result) => {
178
+        this.isOkLoading = false;
179
+        if (result.status == 200) {
180
+          this.formManagementCancel();
181
+          this.pageIndex = 1;
182
+          this.getList();
183
+          this.msg.success('生成表单成功!');
184
+        }else{
185
+          this.msg.error('生成表单失败!');
186
+        }
187
+      });
188
+  }
189
+}
190
+
191
+

+ 17 - 0
src/app/views/form-management/form-management.module.ts

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

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

@@ -196,6 +196,14 @@ const routes: Routes = [
196 196
           ),
197 197
       },
198 198
       {
199
+        // 表单管理列表
200
+        path: "formManagement",
201
+        loadChildren: () =>
202
+          import("../form-management/form-management.module").then(
203
+            (m) => m.FormManagementModule
204
+          ),
205
+      },
206
+      {
199 207
         // 统计分析-综合统计
200 208
         path: "compreStatistics",
201 209
         loadChildren: () =>

+ 1 - 1
src/app/views/nucleic-acid-collection/nucleic-acid-collection.component.html

@@ -23,7 +23,7 @@
23 23
         </thead>
24 24
         <tbody>
25 25
           <tr *ngFor="let data of listOfData;let i = index">
26
-            <td>{{ i+1 }}</td>
26
+            <td>{{ i + (pageIndex - 1) * pageSize + 1}}</td>
27 27
             <td>{{ data.batchNo || '无' }}</td>
28 28
             <td>{{ data.buildId?data.buildId.buildingName:'无' }}</td>
29 29
             <td>{{data.addTime?(data.addTime|date:'yyyy-MM-dd HH:mm'):'无'}}</td>