Просмотр исходного кода

增加万能交接服务得血制品

seimin лет назад: 2
Родитель
Сommit
224246bcd2

+ 10 - 0
src/app/services/main.service.ts

@@ -644,4 +644,14 @@ export class MainService {
644 644
       }
645 645
     );
646 646
   }
647
+  //查看工单里的血制品信息
648
+  checkData(data) {
649
+    return this.http.post(
650
+      host.host + "/transflow/checkData",
651
+      data,
652
+      {
653
+        headers: this.headers,
654
+      }
655
+    );
656
+  }
647 657
 }

+ 45 - 0
src/app/share/blood-detail-modal/blood-detail-modal.component.html

@@ -0,0 +1,45 @@
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">业务数据查看<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4
+    <div class="content">
5
+      <nz-table class="hospitalTable" [nzData]="historySpecimenList" nzSize="middle" [nzShowPagination]="false"
6
+        [nzLoading]="hsLoading" [nzScroll]="{ y: '500px' }">
7
+        <thead>
8
+          <tr class="thead">
9
+            <th nzWidth="5%">序号</th>
10
+            <th nzWidth="13%">患者姓名</th>
11
+            <th nzWidth="11%">患者ID</th>
12
+            <th nzWidth="11%">血液类型</th>
13
+            <th nzWidth="14%">血袋号</th>
14
+            <th nzWidth="11%">取血人</th>
15
+            <th nzWidth="12%">取血时间</th>
16
+            <th nzWidth="11%">接收人</th>
17
+            <th nzWidth="12%">接收时间</th>
18
+          </tr>
19
+        </thead>
20
+        <tbody>
21
+          <tr *ngFor="let bloodDTO of historySpecimenList;let i = index;">
22
+            <td>{{i+1}}</td>
23
+            <td><span>{{ bloodDTO.patientName }}<span *ngIf="bloodDTO.bedNum">({{ bloodDTO.bedNum }})</span></span></td>
24
+            <td>{{ bloodDTO.patientNo||'' }}</td>
25
+            <td>{{ bloodDTO.type ? bloodDTO.type.name : "" }}</td>
26
+            <td>{{ bloodDTO.bloodCode||'' }}</td>
27
+            <td>{{ bloodDTO.arriverDTO?bloodDTO.arriverDTO.name:'' }}</td>
28
+            <td>{{ bloodDTO.arriveTime | date:"yyyy-MM-dd HH:mm:ss" }}</td>
29
+            <td></td>
30
+            <td>{{ bloodDTO.receiveTime | date:"yyyy-MM-dd HH:mm:ss" }}</td>
31
+          </tr>
32
+        </tbody>
33
+      </nz-table>
34
+      <!-- <div class="pagination">
35
+        <nz-pagination [(nzPageIndex)]="historySpecimenPageIndex" [(nzTotal)]="historySpecimenListLength"
36
+          [(nzPageSize)]="historySpecimenPageSize" (nzPageIndexChange)="getHistorySpecimen()"
37
+          (nzPageSizeChange)="getHistorySpecimen()">
38
+        </nz-pagination>
39
+      </div> -->
40
+    </div>
41
+    <div class="display_flex justify-content_flex-center">
42
+      <button class="btn know" nz-button nzType="primary" (click)="hideModal()">知道了</button>
43
+    </div>
44
+  </div>
45
+</div>

+ 163 - 0
src/app/share/blood-detail-modal/blood-detail-modal.component.less

@@ -0,0 +1,163 @@
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
+  .hospitalTable {
11
+    width: 100%;
12
+    td {
13
+      text-align: center !important;
14
+    }
15
+    .thead {
16
+      background-image: linear-gradient(to right, @bg-start, @bg-end);
17
+      th {
18
+        text-align: center !important;
19
+        color: #fff;
20
+        background: transparent;
21
+      }
22
+    }
23
+  }
24
+
25
+  .modalBody {
26
+    width: 700px;
27
+    min-height: 220px;
28
+    background: #fff;
29
+    border-radius: 5px;
30
+    padding: 10px 20px;
31
+    color: #333;
32
+    &.modalBody-search {
33
+      width: 480px;
34
+      min-height: 250px;
35
+    }
36
+
37
+    .title {
38
+      width: 100%;
39
+      text-align: center;
40
+      font-size: 18px;
41
+      position: relative;
42
+
43
+      i {
44
+        position: absolute;
45
+        right: 0;
46
+        top: 0;
47
+        font-size: 20px;
48
+        color: #666;
49
+        cursor: pointer;
50
+        padding: 0 5px;
51
+      }
52
+    }
53
+
54
+    .content {
55
+      min-height: 117px;
56
+      background: #f9fafb;
57
+      border: 1px solid #e5e9ed;
58
+      border-radius: 5px;
59
+      overflow: hidden;
60
+      margin-top: 12px;
61
+      display: flex;
62
+      flex-direction: column;
63
+      justify-content: center;
64
+      align-items: center;
65
+      &.content-search {
66
+        min-height: 147px;
67
+        justify-content: start;
68
+        .defeat-search {
69
+          width: 100%;
70
+          height: 52px;
71
+          display: flex;
72
+          justify-content: center;
73
+          align-items: center;
74
+          border-bottom: solid 1px #e5e9ed;
75
+          em {
76
+            color: #666;
77
+            font-style: normal;
78
+          }
79
+        }
80
+        .form {
81
+          width: 100%;
82
+          padding: 0 16px;
83
+          .ant-form-item-label,
84
+          .ant-form-explain {
85
+            text-align: left !important;
86
+          }
87
+        }
88
+      }
89
+
90
+      div {
91
+        text-align: center;
92
+        margin: 0;
93
+
94
+        &.defeat {
95
+          color: #333;
96
+          font-size: 28px;
97
+        }
98
+        &.countDown {
99
+          font-size: 14px;
100
+          color: 666;
101
+          em {
102
+            font-style: normal;
103
+            color: @primary-color;
104
+          }
105
+        }
106
+
107
+        &:nth-child(3) {
108
+          font-size: 14px;
109
+          color: #666;
110
+          padding-bottom: 10px;
111
+        }
112
+      }
113
+    }
114
+
115
+    button {
116
+      margin-top: 10px;
117
+
118
+      &.btn {
119
+        margin-left: 8px;
120
+      }
121
+    }
122
+  }
123
+
124
+  // 新增
125
+  &.add {
126
+    .modalBody {
127
+      width: 480px;
128
+      height: auto;
129
+
130
+      .content {
131
+        width: 100%;
132
+        height: auto;
133
+        padding: 18px 14px 0 14px;
134
+
135
+        .addForm {
136
+          .ant-form-item {
137
+            margin-bottom: 15px;
138
+
139
+            .ant-form-item-label {
140
+              line-height: 0;
141
+            }
142
+          }
143
+        }
144
+
145
+        .editForm {
146
+          .ant-form-item {
147
+            margin-bottom: 15px;
148
+
149
+            .ant-form-item-label {
150
+              line-height: 0;
151
+            }
152
+          }
153
+        }
154
+      }
155
+
156
+      button {
157
+        &:nth-child(1) {
158
+          margin-right: 20px;
159
+        }
160
+      }
161
+    }
162
+  }
163
+}

+ 49 - 0
src/app/share/blood-detail-modal/blood-detail-modal.component.ts

@@ -0,0 +1,49 @@
1
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2
+import { MainService } from '../../services/main.service';
3
+
4
+@Component({
5
+  selector: 'app-blood-detail-modal',
6
+  templateUrl: './blood-detail-modal.component.html',
7
+  styleUrls: ['./blood-detail-modal.component.less']
8
+})
9
+export class BloodDetailModalComponent implements OnInit {
10
+  // 切换科室,切换弹窗
11
+  hsLoading = false;
12
+  historySpecimenList: any = [];
13
+  historySpecimenPageIndex: number = 1;//表格当前页码
14
+  historySpecimenPageSize: number = 5;//表格每页展示条数
15
+  historySpecimenListLength: number = 10;//表格总数据量
16
+  @Input() show: Boolean;
17
+  @Input() orderId: String;
18
+
19
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
20
+
21
+  constructor(private mainService: MainService) { }
22
+
23
+  ngOnInit() {
24
+    this.getHistorySpecimen();
25
+  }
26
+  // 关闭弹窗
27
+  hideModal() {
28
+    this.closeModelHs.emit(JSON.stringify({ show: false }));//emits(向上弹射)事件
29
+  }
30
+  // 获取列表数据
31
+  getHistorySpecimen(idx?) {
32
+    if (idx) {
33
+      this.historySpecimenPageIndex = 1;
34
+    }
35
+    let postData = {
36
+      "type": "blood",
37
+      "orderId": this.orderId
38
+    }
39
+    this.hsLoading = true;
40
+    this.mainService.checkData(postData).subscribe((data:any) => {
41
+      this.hsLoading = false;
42
+      this.historySpecimenList = data.data ? data.data.all : [];
43
+      this.historySpecimenListLength = data.data ? data.data.all.length : 0;
44
+    })
45
+  }
46
+}
47
+
48
+
49
+

+ 172 - 0
src/app/share/detail-blood/detail-blood.component.html

@@ -0,0 +1,172 @@
1
+<!-- 标本 -->
2
+<div class="detail" *ngIf="!maskFlag">
3
+  <div class="title">工单信息<i class="icon_transport transport-guanbi" (click)="close()"></i></div>
4
+  <overlay-scrollbars #osComponentRef1 style="height: 90%; flex: 1">
5
+    <div class="content">
6
+      <div class="top" *ngIf="amplificationShow">
7
+        <div class="num">
8
+          <span class="left">单号:{{orderInfo.gdcode}}</span>
9
+          <span class="right">{{orderInfo.gdState.name}}</span>
10
+        </div>
11
+        <div class="info" nz-row>
12
+          <div nz-col nzSpan="8">工单日期:{{orderInfo.startTime}}</div>
13
+          <div nz-col nzSpan="8">总耗时:{{orderInfo.showTimeNum}}</div>
14
+          <div nz-col nzSpan="8">申请类型:{{orderInfo.taskType.taskName}}<ng-container *ngIf="orderInfo.goodsRemark">-{{orderInfo.goodsRemark}}</ng-container></div>
15
+          <div nz-col nzSpan="8">
16
+            申请科室:{{orderInfo.createDeptDTO?(!showCoop&&deptDisplay==2?orderInfo.createDeptDTO.deptalias:orderInfo.createDeptDTO.dept):'-'}}
17
+          </div>
18
+          <div nz-col nzSpan="8">起点科室:{{orderInfo.startDept?(!showCoop&&deptDisplay==2?orderInfo.startDept.deptalias:orderInfo.startDept.dept):''}}</div>
19
+          <div nz-col nzSpan="8">目标科室:{{endDepts}}</div>
20
+          <div nz-col nzSpan="8" *ngIf="orderInfo.worker">支助人员信息:{{orderInfo.worker.name}}</div>
21
+          <div nz-col nzSpan="8">预计接收:{{orderInfo.expectReceiveNum?orderInfo.expectReceiveNum:''}}</div>
22
+          <div nz-col nzSpan="8">实际接收:{{orderInfo.actualReceiveNum?orderInfo.actualReceiveNum:''}}</div>
23
+          <div nz-col nzSpan="24" *ngIf="orderInfo.workOrderRemark">备注信息:{{orderInfo.workOrderRemark}}
24
+          </div>
25
+          <div nz-col nzSpan="24" *ngIf="orderInfo.specialCloseReason">
26
+            特殊情况关闭原因:{{orderInfo.specialCloseReason}}
27
+          </div>
28
+        </div>
29
+      </div>
30
+      <div class="center" *ngIf="amplificationShow">
31
+        <div class="box display_flex justify-content_flex-center">
32
+          <div class="steps" *ngFor="let step of logList;let i=index;">
33
+            <div class="step">
34
+              <div class="info">
35
+                <i
36
+                  [ngClass]="{'icon_transport':true, 'transport-icon_liucheng':true,'green':(step.record&&step.record[0]&&step.record[0].operationTime)}"></i>
37
+                <p>{{step.operationName}}</p>
38
+                <p>{{step.record.length>=1?(step.record[0].operationTime|date:'MM-dd HH:mm'):''}}</p>
39
+                <p *ngIf="step.record[0]&&step.record[0].dept">
40
+                  <span *ngFor="let dept of step.record">{{!showCoop&&deptDisplay==2?dept.deptalias:dept.dept}},</span>
41
+                </p>
42
+                <p *ngIf="i!=0&&step.record&&step.record.length">耗时{{filterTime(step.record)}}</p>
43
+              </div>
44
+              <div class="line"></div>
45
+            </div>
46
+          </div>
47
+        </div>
48
+      </div>
49
+      <div class="bottom">
50
+        <div class="urgent">
51
+          <div>
52
+            <ng-container *ngIf="amplificationShow&&orderInfo.urgentDetails&&showCoop">
53
+                加急原因:{{orderInfo.urgentDetails.urgentReason}}
54
+              <button *ngIf="orderInfo.urgentDetails.checkStatus.id==329" class=" btn default" nz-button nzType="primary"
55
+                [nzLoading]="urgentLoading" nzGhost (click)="urgent()">确认加急</button>
56
+            </ng-container>
57
+          </div>
58
+          <!-- <div class="amplification">
59
+            <button
60
+              nz-button
61
+              nzType="primary"
62
+              class="btn default"
63
+              (click)="amplification()"
64
+            >
65
+              {{ amplificationShow ? "放大" : "还原" }}
66
+            </button>
67
+          </div> -->
68
+        </div>
69
+
70
+        <!-- <div class="table">
71
+          <nz-table class="detailSampleTable" [nzData]="orderInfo.specimenSet" nzSize="small" [nzShowPagination]="null">
72
+            <thead>
73
+              <tr class="thead">
74
+                <th nzWidth="4%">序号</th>
75
+                <th nzWidth="8%">申请科室</th>
76
+                <th nzWidth="7%">患者姓名</th>
77
+                <th nzWidth="5%">标本编码</th>
78
+                <th nzWidth="8%">检验项目</th>
79
+                <th nzWidth="8%">标本类型</th>
80
+                <th nzWidth="5%">状态</th>
81
+                <th nzWidth="8%">收取时间</th>
82
+                <th nzWidth="8%">收取人</th>
83
+                <th nzWidth="8%">中转时间</th>
84
+                <th nzWidth="8%">送达时间</th>
85
+                <th nzWidth="8%">送达人</th>
86
+                <th nzWidth="8%">终点科室</th>
87
+              </tr>
88
+            </thead>
89
+            <tbody *ngIf="orderInfo.specimenSet">
90
+              <tr *ngFor="let data of orderInfo.specimenSet;let i =index;">
91
+                <td>{{ i + 1 }}</td>
92
+                <td>{{ data.sickRoom ? data.sickRoom.dept : "-" }}</td>
93
+                <td>{{ data.patientName}}<span *ngIf="data.bedNum">({{data.bedNum}})</span><br>{{data.residenceNo}}</td>
94
+                <td>{{ data.scode || "-" }}</td>
95
+                <td>{{ data.specimenDesc || "-" }}</td>
96
+                <td>{{ data.stype ? data.stype.name : "-" }}</td>
97
+                <td>{{ data.speState ? data.speState.name : "-" }}</td>
98
+                <td>{{ data.arriveTime || "-" }}</td>
99
+                <td>{{ data.receiverName || "-" }}</td>
100
+                <td>{{ data.transTime || '-' }}</td>
101
+                <td>{{ data.sendTime || '-' }}</td>
102
+                <td>{{ data.delivererName || "-" }}</td>
103
+                <td>
104
+                  {{ data.checkDept ? (!showCoop&&deptDisplay==2?data.checkDept.deptalias:data.checkDept.dept) : "-" }}
105
+                  <img *ngIf="data.urgent == 1"
106
+                  src="../../assets/images/icon_ji.png" alt="" class="ji"></td>
107
+              </tr>
108
+            </tbody>
109
+          </nz-table>
110
+        </div> -->
111
+      </div>
112
+    </div>
113
+  </overlay-scrollbars>
114
+  <div class="btns display_flex justify-content_flex-center align-items_center">
115
+    <!-- <button *ngIf="showCoop&&orderInfo.gdState.value==2" nz-button nzType="primary" (click)='allotWorker()'>派单</button>
116
+    <button *ngIf="showCoop&&(orderInfo.gdState.value==3||orderInfo.gdState.value==4)" nz-button nzType="primary" nzGhost
117
+      (click)="openRecallModal()">撤回</button>
118
+    <button *ngIf="showCoop&&(orderInfo.gdState.value==2||orderInfo.gdState.value==3||orderInfo.gdState.value==4)" nz-button
119
+      nzType="danger" (click)="openDelModal()">删除</button> -->
120
+    <button *ngIf="orderInfo.taskType.associationType.value == 'ordinary' && orderInfo.taskType.ordinaryField.value == 'blood'" class="btn default" nz-button nzType="default" (click)="viewDetail(orderInfo)">
121
+      业务数据
122
+    </button>
123
+    <button class=" btn cancel" nz-button nzType="default" (click)="close()">取消</button>
124
+  </div>
125
+</div>
126
+<!-- 撤回工单 -->
127
+<div class="recallOrder display_flex justify-content_flex-center align-items_center" *ngIf="recallOrderShow">
128
+  <div class="modalBody">
129
+    <div class="title">提示<i class="icon_transport transport-guanbi" (click)="closeRecallOrderModal()"></i></div>
130
+    <div class="content">
131
+      <div class="icon"><i class="icon_transport transport-wenhao"></i></div>
132
+      <div class="defeat">您确认要撤回此工单吗?</div>
133
+    </div>
134
+    <div class="btns display_flex justify-content_flex-center align-items_center">
135
+      <button nz-button nzType="primary" [nzLoading]='btnLoading' (click)="confirmRec()">确认</button>
136
+      <button nz-button nzType="primary" [nzLoading]='recLoading' nzGhost (click)="recAndDel()">撤回并删除</button>
137
+      <button class=" btn cancel" nz-button nzType="default" (click)="closeRecallOrderModal()">关闭</button>
138
+    </div>
139
+  </div>
140
+</div>
141
+
142
+<!-- 删除工单 -->
143
+<div class="recallOrder display_flex justify-content_flex-center align-items_center delModel" *ngIf="delOrderShow">
144
+  <div class="modalBody">
145
+    <div class="title">提示<i class="icon_transport transport-guanbi" (click)="closeDelOrderModal()"></i></div>
146
+    <div class="content">
147
+      <div class="icon"><i class="icon_transport transport-wenhao"></i></div>
148
+      <div class="defeat">您确认要删除此工单吗?</div>
149
+    </div>
150
+    <div class="btns display_flex justify-content_flex-center">
151
+      <button nz-button nzType="primary" [nzLoading]='btnLoading' (click)="confirmDel()">确认</button>
152
+      <!-- <button class="candelBtn btn display_flex justify-content_flex-center" nz-button nzType="primary" nzGhost>撤回并删除</button> -->
153
+      <button class=" btn cancel" nz-button nzType="default" (click)="closeDelOrderModal()">取消</button>
154
+    </div>
155
+  </div>
156
+</div>
157
+
158
+<!-- 业务数据查看 -->
159
+<app-blood-detail-modal
160
+  *ngIf="bloodModalShow"
161
+  [show]="bloodModalShow"
162
+  [orderId]="orderId"
163
+  (closeModelHs)="closeModelBlood($event)"
164
+></app-blood-detail-modal>
165
+
166
+<!-- 操作成功/失败提示框 -->
167
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
168
+  [info]="promptInfo" (closeModel)="close()">
169
+  <!-- 2.父组件调用子组件时绑定到这个事件属性,并在事件发生时作出回应。(closeModel)="close()" -->
170
+</app-prompt-modal>
171
+<!-- 遮罩 -->
172
+<app-mask *ngIf="maskFlag"></app-mask>

+ 308 - 0
src/app/share/detail-blood/detail-blood.component.less

@@ -0,0 +1,308 @@
1
+@import "../../../../src/theme.less";
2
+:host {
3
+  width: 100%;
4
+  height: 100%;
5
+  position: fixed;
6
+  left: 0;
7
+  top: 0;
8
+  background: rgba(0, 0, 0, 0.4);
9
+  z-index: 9;
10
+  display: flex;
11
+  justify-content: center;
12
+  align-items: center;
13
+}
14
+
15
+.detail {
16
+  width: 1200px;
17
+  height: calc(100vh - 100px);
18
+  min-height: 580px;
19
+  border-radius: 5px;
20
+  background: #fff;
21
+  color: #333;
22
+  font-size: 14px;
23
+  padding: 12px 20px;
24
+  position: relative;
25
+  padding-bottom: 70px;
26
+
27
+  .title {
28
+    font-size: 18px;
29
+    text-align: center;
30
+    line-height: 24px;
31
+    margin: 0;
32
+    margin-bottom: 12px;
33
+    position: relative;
34
+
35
+    i {
36
+      position: absolute;
37
+      right: 0;
38
+      top: 0;
39
+      font-size: 20px;
40
+      color: #666;
41
+      cursor: pointer;
42
+      padding: 0 5px;
43
+    }
44
+  }
45
+
46
+  .content {
47
+    width: 1160px;
48
+    // height: 474px;
49
+    border: 1px solid #e5e9ed;
50
+    border-radius: 5px;
51
+    overflow: hidden;
52
+
53
+    & > .top {
54
+      padding: 10px 32px;
55
+      border-bottom: 1px solid #e5e9ed;
56
+
57
+      .num {
58
+        font-size: 16px;
59
+        overflow: hidden;
60
+        margin-bottom: 6px;
61
+
62
+        .left {
63
+          float: left;
64
+          font-weight: 600;
65
+        }
66
+
67
+        .right {
68
+          float: right;
69
+        }
70
+      }
71
+
72
+      .info {
73
+        color: #666;
74
+
75
+        & > div {
76
+          margin: 4px 0;
77
+        }
78
+      }
79
+    }
80
+
81
+    & > .center {
82
+      padding: 27px 0 17px 0;
83
+      border-bottom: 1px solid #e5e9ed;
84
+      font-size: 12px;
85
+
86
+      .box {
87
+        // display: flex;
88
+        // justify-content: center;
89
+
90
+        .steps {
91
+          &:nth-last-child(1) {
92
+            .line {
93
+              display: none !important;
94
+            }
95
+          }
96
+
97
+          .step {
98
+            .info {
99
+              width: 90px;
100
+              text-align: center;
101
+              display: inline-block;
102
+              vertical-align: top;
103
+
104
+              i {
105
+                color: #e5e9ed;
106
+
107
+                &.green {
108
+                  color: @primary-color;
109
+                }
110
+              }
111
+            }
112
+
113
+            p {
114
+              margin: 0;
115
+            }
116
+
117
+            .line {
118
+              display: inline-block;
119
+              width: 60px;
120
+              height: 2px;
121
+              background: #e5e9ed;
122
+            }
123
+          }
124
+        }
125
+      }
126
+    }
127
+
128
+    & > .bottom {
129
+      padding: 28px 32px;
130
+      background: #f9fafb;
131
+
132
+      .urgent {
133
+        display: flex;
134
+        justify-content: space-between;
135
+        margin-bottom: 8px;
136
+        input {
137
+          width: 600px;
138
+        }
139
+
140
+        .candelBtn {
141
+          margin-left: 20px;
142
+        }
143
+      }
144
+
145
+      .table {
146
+        width: 100%;
147
+        background: #fff;
148
+        border-radius: 5px;
149
+
150
+        .thead {
151
+          background: linear-gradient(to right, @bg-start, @bg-end) !important;
152
+          th {
153
+            color: #fff !important;
154
+            text-align: center;
155
+            font-size: 12px;
156
+            border: none;
157
+          }
158
+        }
159
+
160
+        .ant-table-tbody {
161
+          tr {
162
+            text-align: center;
163
+            font-size: 12px;
164
+            border: none;
165
+
166
+            td {
167
+              border: none;
168
+              position: relative;
169
+            }
170
+          }
171
+
172
+          tr:nth-child(2n) {
173
+            background: #f9fafb;
174
+          }
175
+        }
176
+      }
177
+    }
178
+  }
179
+
180
+  .btns {
181
+    // display: flex;
182
+    // justify-content: center;
183
+    // align-items: center;
184
+    width: 100%;
185
+    position: absolute;
186
+    left: 0;
187
+    bottom: 20px;
188
+
189
+    button {
190
+      margin: 9px;
191
+      margin-bottom: 0;
192
+    }
193
+  }
194
+
195
+  .ant-table {
196
+    border: none !important;
197
+  }
198
+}
199
+
200
+// 撤回工单
201
+.recallOrder {
202
+  position: fixed;
203
+  left: 0;
204
+  top: 0;
205
+  width: 100%;
206
+  height: 100%;
207
+  // display: flex;
208
+  // justify-content: center;
209
+  // align-items: center;
210
+  background: rgba(0, 0, 0, 0.4);
211
+  z-index: 99;
212
+
213
+  .modalBody {
214
+    width: 350px;
215
+    height: 220px;
216
+    background: #fff;
217
+    border-radius: 5px;
218
+    padding: 10px 20px;
219
+    color: #333;
220
+
221
+    .title {
222
+      width: 100%;
223
+      text-align: center;
224
+      font-size: 18px;
225
+      position: relative;
226
+
227
+      i {
228
+        position: absolute;
229
+        right: 0;
230
+        top: 0;
231
+        font-size: 20px;
232
+        color: #666;
233
+        cursor: pointer;
234
+        padding: 0 5px;
235
+      }
236
+    }
237
+
238
+    .content {
239
+      width: 310px;
240
+      height: 117px;
241
+      background: #f9fafb;
242
+      border: 1px solid #e5e9ed;
243
+      border-radius: 5px;
244
+      overflow: hidden;
245
+      margin-top: 12px;
246
+
247
+      div {
248
+        text-align: center;
249
+        margin: 0;
250
+
251
+        &.icon {
252
+          margin-top: 17px;
253
+
254
+          i {
255
+            color: #ff3b53;
256
+            font-size: 30px !important;
257
+
258
+            &.transport-wenhao {
259
+              color: #f5a523;
260
+            }
261
+          }
262
+        }
263
+
264
+        &.defeat {
265
+          color: #333;
266
+          font-size: 18px;
267
+        }
268
+
269
+        &:nth-child(3) {
270
+          font-size: 14px;
271
+          color: #666;
272
+        }
273
+      }
274
+
275
+      .conditions {
276
+        padding: 16px 20px;
277
+
278
+        div {
279
+          text-align: left;
280
+        }
281
+      }
282
+    }
283
+
284
+    .btns {
285
+      // display: flex;
286
+      // justify-content: center;
287
+
288
+      button {
289
+        margin-top: 10px;
290
+
291
+        &.btn {
292
+          width: 80px;
293
+          margin-left: 8px;
294
+        }
295
+      }
296
+    }
297
+  }
298
+}
299
+
300
+.txtC {
301
+  text-align: center;
302
+}
303
+.ji {
304
+  position: absolute;
305
+  right: 0px;
306
+  top: -3px;
307
+  width: 30px;
308
+}

+ 255 - 0
src/app/share/detail-blood/detail-blood.component.ts

@@ -0,0 +1,255 @@
1
+import { Component, OnInit, ViewChild } from "@angular/core";
2
+import { ActivatedRoute, Router } from "@angular/router";
3
+import { MainService } from "../../services/main.service";
4
+import { forkJoin } from "rxjs";
5
+import { NzMessageService } from "ng-zorro-antd";
6
+import { ToolService } from "src/app/services/tool.service";
7
+import { OverlayScrollbarsComponent } from 'overlayscrollbars-ngx';
8
+
9
+@Component({
10
+  selector: "app-detail-blood",
11
+  templateUrl: "./detail-blood.component.html",
12
+  styleUrls: ["./detail-blood.component.less"],
13
+})
14
+export class DetailBloodComponent implements OnInit {
15
+  @ViewChild("osComponentRef1", {
16
+    read: OverlayScrollbarsComponent,
17
+    static: false,
18
+  })
19
+  osComponentRef1: OverlayScrollbarsComponent;
20
+  constructor(
21
+    private message: NzMessageService,
22
+    private route: ActivatedRoute,
23
+    private router: Router,
24
+    private tool: ToolService,
25
+    private mainService: MainService
26
+  ) {}
27
+
28
+  id: number; //工单id
29
+  orderInfo: any; //工单详情信息
30
+  endDepts = ""; //工单详情目标科室
31
+  showCoop: boolean = true; //是否展示详情页操作按钮
32
+
33
+  promptContent: string; //操作提示框提示信息
34
+  ifSuccess: boolean; //操作成功/失败
35
+  promptInfo: string; //操作结果提示信息
36
+  promptModalShow: boolean; //是否展示提示框
37
+
38
+  urgentLoading: boolean = false; //确认加急按钮loading状态
39
+  recLoading: boolean = false; //撤回并删除按钮loading状态
40
+  btnLoading: boolean = false; //确认按钮loading状态
41
+  maskFlag: any = false;
42
+  deptDisplay; //护士端是否显示可以别名,1是显示科室名称,2是显示科室别名
43
+  amplificationShow = true;
44
+  ngOnInit() {
45
+    this.tool.getDeptDisplay().subscribe((result) => {
46
+      if (result.status == 200) {
47
+        this.deptDisplay = result.list[0].valueconfig;
48
+      }
49
+    });
50
+    if (this.route.snapshot.parent.parent.routeConfig.path == "nurse") {
51
+      this.showCoop = false;
52
+    }
53
+    this.id = +this.route.snapshot.paramMap.get("id");
54
+    let log$ = this.getLog();
55
+    let detail$ = this.getDetail();
56
+    this.maskFlag = this.message.loading("正在加载中..", {
57
+      nzDuration: 0,
58
+    }).messageId;
59
+    forkJoin(log$, detail$).subscribe((res) => {
60
+      this.message.remove(this.maskFlag);
61
+      this.maskFlag = false;
62
+      // getLog
63
+      this.logList = res[0]["data"];
64
+      // getDetail
65
+      this.orderInfo = res[1]["data"];
66
+      this.endDepts = res[1]["data"].endDepts
67
+        .map((item) =>
68
+          !this.showCoop && this.deptDisplay == 2 ? item.deptalias : item.dept
69
+        )
70
+        .join();
71
+    });
72
+  }
73
+
74
+  // 查看业务数据
75
+  bloodModalShow = false; //业务数据弹窗开关
76
+  orderId = ""; //查看业务数据携带
77
+  viewDetail(data) {
78
+    this.orderId = data.id;
79
+    this.bloodModalShow = true;
80
+  }
81
+  // 关闭业务数据弹窗
82
+  closeModelBlood(e) {
83
+    this.bloodModalShow = JSON.parse(e).show;
84
+  }
85
+
86
+  // 放大
87
+  amplification(){
88
+    this.amplificationShow = !this.amplificationShow;
89
+  }
90
+
91
+  // 获取工单详情
92
+  getDetail() {
93
+    return this.mainService.getFetchData("api", "workOrder", this.id);
94
+  }
95
+
96
+  // 确认加急
97
+  urgent() {
98
+    let that = this;
99
+    that.urgentLoading = true;
100
+    let postData = {
101
+      urgentDetails: {
102
+        workerOrder: this.orderInfo["id"],
103
+        checkStatus: {
104
+          id: 330,
105
+        },
106
+        urgentReason: this.orderInfo["urgentDetails"].urgentReason,
107
+        id: this.orderInfo["urgentDetails"].id,
108
+      },
109
+    };
110
+    that.mainService.coopWorkerOrder("urge", postData).subscribe((data) => {
111
+      that.urgentLoading = false;
112
+      if (data.status == 200) {
113
+        that.showPromptModal("加急", true, "");
114
+      } else {
115
+        that.showPromptModal("加急", false, data.msg);
116
+      }
117
+    });
118
+  }
119
+  // 获取工单历史记录
120
+  logList = []; //工单历史记录
121
+  getLog() {
122
+    return this.mainService.getWorkOrderLog(this.id);
123
+  }
124
+
125
+  // 派单
126
+  allotWorker() {
127
+    this.router.navigateByUrl(
128
+      "dispatchingDesk/allotWorker/" +
129
+        this.id +
130
+        "/" +
131
+        this.orderInfo["gdState"]["id"]
132
+    );
133
+  }
134
+
135
+  // 撤回
136
+  recallOrderShow: boolean = false;
137
+  openRecallModal(): void {
138
+    this.recallOrderShow = true;
139
+  }
140
+  // 确认撤回
141
+  confirmRec() {
142
+    let that = this;
143
+    that.btnLoading = true;
144
+    let postData = {
145
+      workOrder: {
146
+        id: that.id,
147
+      },
148
+    };
149
+    that.mainService
150
+      .coopWorkerOrder("excuteWorkOrder/recall", postData)
151
+      .subscribe((data) => {
152
+        that.btnLoading = false;
153
+        that.closeRecallOrderModal();
154
+        if (data.status == 200) {
155
+          that.showPromptModal("撤回", true, "");
156
+        } else {
157
+          that.showPromptModal("撤回", false, data.msg);
158
+        }
159
+      });
160
+  }
161
+  // 撤回并删除
162
+  recAndDel() {
163
+    let that = this;
164
+    that.recLoading = true;
165
+    that.mainService.delOrder(that.id).subscribe((data) => {
166
+      console.log(data);
167
+      that.recLoading = false;
168
+      that.closeDelOrderModal();
169
+      if (data.status == 200) {
170
+        that.showPromptModal("删除", true, "");
171
+      } else {
172
+        that.showPromptModal("删除", false, data.msg);
173
+      }
174
+    });
175
+  }
176
+  // 关闭撤回弹框
177
+  closeRecallOrderModal() {
178
+    this.recallOrderShow = false;
179
+  }
180
+
181
+  // 关闭弹框
182
+  close() {
183
+    // this.router.navigateByUrl('dispatchingDesk');
184
+    history.go(-1);
185
+  }
186
+
187
+  // 删除
188
+  // 打开模态框
189
+  delOrderShow: boolean = false;
190
+  openDelModal() {
191
+    this.delOrderShow = true;
192
+  }
193
+  // 确认删除
194
+  confirmDel() {
195
+    let that = this;
196
+    that.btnLoading = true;
197
+    that.mainService.delOrder(that.id).subscribe((data) => {
198
+      that.btnLoading = false;
199
+      that.closeDelOrderModal();
200
+      if (data.status == 200) {
201
+        that.showPromptModal("删除", true, "");
202
+      } else {
203
+        that.showPromptModal("删除", false, data.msg);
204
+      }
205
+    });
206
+  }
207
+
208
+  // 关闭模态框
209
+  closeDelOrderModal() {
210
+    this.delOrderShow = false;
211
+  }
212
+
213
+  // 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
214
+  showPromptModal(con, success, promptInfo?) {
215
+    this.promptModalShow = false;
216
+    this.promptContent = con;
217
+    this.ifSuccess = success;
218
+    this.promptInfo = promptInfo;
219
+    setTimeout(() => {
220
+      this.promptModalShow = true;
221
+    }, 100);
222
+  }
223
+
224
+  // 格式化时分秒
225
+  // (时间小于一分钟则显示秒,时间大于一分钟则显示分钟数,如超出一小时则显示小时和分钟。)time单位:秒
226
+  formatTime(time) {
227
+    let timeStr = "";
228
+    if (time >= 0 && time < 60) {
229
+      // 秒
230
+      timeStr = time + "秒";
231
+    } else if (time >= 60 && time < 3600) {
232
+      // 分钟
233
+      timeStr = Math.floor(time / 60) + "分钟";
234
+    } else if (time >= 3600) {
235
+      // 时 + 分
236
+      let h = "";
237
+      let m = "";
238
+      h = Math.floor(time / 3600) + "小时";
239
+      m = time % 3600 >= 60 ? Math.floor((time % 3600) / 60) + "分钟" : "";
240
+      timeStr = h + m;
241
+    }
242
+    return timeStr;
243
+  }
244
+
245
+  // 计算历史记录耗时
246
+  filterTime(step) {
247
+    // step = [{ difTime: 2 }, { difTime: 6 }]
248
+    let num = 0;
249
+    step.forEach((e) => {
250
+      num += e.difTime;
251
+    });
252
+    return this.formatTime(num / 1000);
253
+  }
254
+}
255
+

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

@@ -29,6 +29,7 @@
29 29
         历史记录
30 30
       </div>
31 31
     </div>
32
+
32 33
     <!-- 其他类型工单信息 -->
33 34
     <overlay-scrollbars
34 35
       #osComponentRef3
@@ -915,6 +916,132 @@
915 916
         </div>
916 917
       </div>
917 918
     </overlay-scrollbars>
919
+    <!-- 万能交接服务-血制品工单信息 -->
920
+    <overlay-scrollbars
921
+    #osComponentRef9
922
+    style="height: 90%; flex: 1"
923
+    *ngIf="
924
+      tabType == 1 && orderInfo.taskType.associationType.value == 'ordinary' && orderInfo.taskType.ordinaryField.value == 'blood'
925
+    "
926
+  >
927
+    <div class="content orders">
928
+      <div class="top" *ngIf="amplificationShow">
929
+        <div class="num">
930
+          <span class="left">单号:{{ orderInfo.gdcode }}</span>
931
+          <span class="right">{{
932
+            orderInfo.gdState ? orderInfo.gdState.name : ""
933
+          }}</span>
934
+        </div>
935
+        <div class="info" nz-row>
936
+          <div nz-col nzSpan="6">
937
+            工单日期:{{ orderInfo.startTime | date: "yyyy-MM-dd HH:mm" }}
938
+          </div>
939
+          <div nz-col nzSpan="6">总耗时:{{ orderInfo.showTimeNum }}</div>
940
+          <div nz-col nzSpan="6">
941
+            申请类型:{{
942
+              orderInfo.taskType ? orderInfo.taskType.taskName : ""
943
+            }}<ng-container *ngIf="orderInfo.goodsRemark"
944
+              >-{{ orderInfo.goodsRemark }}</ng-container
945
+            >
946
+          </div>
947
+          <div nz-col nzSpan="6">
948
+            支助人员信息:{{ orderInfo.worker ? orderInfo.worker.name : "" }}
949
+          </div>
950
+        </div>
951
+        <div class="info" nz-row>
952
+          <div nz-col nzSpan="6">
953
+            预计接收:{{ orderInfo.expectReceiveNum }}
954
+          </div>
955
+          <div nz-col nzSpan="6">
956
+            送达:{{ orderInfo.deliveryNum || "无" }}
957
+          </div>
958
+          <div nz-col nzSpan="6">
959
+            实际接收:{{ orderInfo.actualReceiveNum || "无" }}
960
+          </div>
961
+        </div>
962
+        <div class="info" nz-row>
963
+          <div nz-col nzSpan="6">
964
+            申请科室:{{
965
+              orderInfo.createDeptDTO ? orderInfo.createDeptDTO.dept : ""
966
+            }}
967
+          </div>
968
+          <div nz-col nzSpan="6">
969
+            起点科室:{{
970
+              orderInfo.startDept ? orderInfo.startDept.dept : ""
971
+            }}
972
+          </div>
973
+          <div nz-col nzSpan="12">目标科室:{{ endDepts }}</div>
974
+        </div>
975
+        <div class="info" nz-row *ngIf="orderInfo.urgentDetails">
976
+          <div nz-col nzSpan="8">
977
+            加急状态:{{ orderInfo.urgentDetails.checkStatus.name }}
978
+          </div>
979
+          <div nz-col nzSpan="24" class="jiaji">
980
+            加急原因:{{ orderInfo.urgentDetails.urgentReason }}
981
+          </div>
982
+        </div>
983
+        <div
984
+          class="info"
985
+          nz-row
986
+          *ngIf="orderInfo.workOrderRemark !== undefined"
987
+        >
988
+          <div nz-col nzSpan="24">
989
+            备注信息:{{ orderInfo.workOrderRemark || "-" }}
990
+          </div>
991
+        </div>
992
+        <div
993
+          class="info"
994
+          nz-row
995
+          *ngIf="orderInfo.specialCloseReason !== undefined"
996
+        >
997
+          <div nz-col nzSpan="24">
998
+            特殊情况关闭原因:{{ orderInfo.specialCloseReason || "-" }}
999
+          </div>
1000
+        </div>
1001
+      </div>
1002
+      <div class="center" *ngIf="amplificationShow">
1003
+        <div class="box">
1004
+          <div class="steps" *ngFor="let step of logList">
1005
+            <div class="step">
1006
+              <div class="info">
1007
+                <i
1008
+                  [ngClass]="{
1009
+                    icon_transport: true,
1010
+                    'transport-icon_liucheng': true,
1011
+                    green:
1012
+                      step.record &&
1013
+                      step.record[0] &&
1014
+                      step.record[0].operationTime
1015
+                  }"
1016
+                ></i>
1017
+                <p>{{ step.operationName }}</p>
1018
+                <p>{{ step.record ? step.record.operationtime : "" }}</p>
1019
+                <p
1020
+                  *ngIf="
1021
+                    step.record && step.record.length && step.record[0].dept
1022
+                  "
1023
+                >
1024
+                  <span *ngFor="let dept of step.record"
1025
+                    >{{ dept.dept }},</span
1026
+                  >
1027
+                </p>
1028
+                <p
1029
+                  *ngIf="
1030
+                    step.record &&
1031
+                    step.record.length &&
1032
+                    step.operationName != '申请'
1033
+                  "
1034
+                >
1035
+                  耗时{{ filterTime(step.record) }}
1036
+                </p>
1037
+              </div>
1038
+              <div class="line"></div>
1039
+            </div>
1040
+          </div>
1041
+        </div>
1042
+      </div>
1043
+    </div>
1044
+    </overlay-scrollbars>
918 1045
     <!-- 评价内容 -->
919 1046
     <overlay-scrollbars
920 1047
       #osComponentRef7
@@ -1134,6 +1261,9 @@
1134 1261
     </overlay-scrollbars>
1135 1262
   </div>
1136 1263
   <div class="btns">
1264
+    <button *ngIf="orderInfo.taskType.associationType.value == 'ordinary' && orderInfo.taskType.ordinaryField.value == 'blood'" class="btn default" nz-button nzType="default" (click)="viewDetail(orderInfo)">
1265
+      业务数据
1266
+    </button>
1137 1267
     <button class="btn cancel" nz-button nzType="default" (click)="close()">
1138 1268
       关闭
1139 1269
     </button>
@@ -1151,6 +1281,14 @@
1151 1281
   <!-- 2.父组件调用子组件时绑定到这个事件属性,并在事件发生时作出回应。(closeModel)="close()" -->
1152 1282
 </app-prompt-modal>
1153 1283
 
1284
+<!-- 业务数据查看 -->
1285
+<app-blood-detail-modal
1286
+  *ngIf="bloodModalShow"
1287
+  [show]="bloodModalShow"
1288
+  [orderId]="orderId"
1289
+  (closeModelHs)="closeModelBlood($event)"
1290
+></app-blood-detail-modal>
1291
+
1154 1292
 <!-- 遮罩 -->
1155 1293
 <app-mask *ngIf="maskFlag"></app-mask>
1156 1294
 <app-image-viewer [imageUrl]="imgs" hidden *ngIf="isPreview" [isPreviewNow]="true"></app-image-viewer>

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

@@ -56,6 +56,11 @@ export class OrderDetailComponent implements OnInit {
56 56
     static: false,
57 57
   })
58 58
   osComponentRef8: OverlayScrollbarsComponent;
59
+  @ViewChild("osComponentRef9", {
60
+    read: OverlayScrollbarsComponent,
61
+    static: false,
62
+  })
63
+  osComponentRef9: OverlayScrollbarsComponent;
59 64
   constructor(
60 65
     private message: NzMessageService,
61 66
     private fb: FormBuilder,
@@ -151,6 +156,18 @@ export class OrderDetailComponent implements OnInit {
151 156
     history.go(-1);
152 157
   }
153 158
 
159
+  // 查看业务数据
160
+  bloodModalShow = false; //业务数据弹窗开关
161
+  orderId = ""; //查看业务数据携带
162
+  viewDetail(data) {
163
+    this.orderId = data.id;
164
+    this.bloodModalShow = true;
165
+  }
166
+  // 关闭业务数据弹窗
167
+  closeModelBlood(e) {
168
+    this.bloodModalShow = JSON.parse(e).show;
169
+  }
170
+
154 171
   // 获取工单历史记录
155 172
   logList = []; //工单历史记录
156 173
   getLog() {

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

@@ -35,10 +35,13 @@ import { DetailBxComponent } from './detail-bx/detail-bx.component';
35 35
 import { ImageViewerComponent } from './image-viewer/image-viewer.component';
36 36
 import { SpePromptModalComponent } from './spe-prompt-modal/spe-prompt-modal.component';
37 37
 import { OrderPromptModalComponent } from './order-prompt-modal/order-prompt-modal.component';
38
+import { BloodDetailModalComponent } from './blood-detail-modal/blood-detail-modal.component';
39
+import { DetailBloodComponent } from './detail-blood/detail-blood.component';
38 40
 
39 41
 @NgModule({
40 42
   declarations: [
41 43
     DetailSampleComponent,
44
+    DetailBloodComponent,
42 45
     DetailPatientsComponent,
43 46
     DetailDrugComponent,
44 47
     DetailOthersComponent,
@@ -49,6 +52,7 @@ import { OrderPromptModalComponent } from './order-prompt-modal/order-prompt-mod
49 52
     ReplicationSchemeComponent,
50 53
     HsPromptModalComponent,
51 54
     HistoryPromptModalComponent,
55
+    BloodDetailModalComponent,
52 56
     BxPromptModalComponent,
53 57
     AppraiseDetailComponent,
54 58
     OrderDetailComponent,
@@ -68,6 +72,8 @@ import { OrderPromptModalComponent } from './order-prompt-modal/order-prompt-mod
68 72
     ImageViewerComponent,
69 73
     SpePromptModalComponent,
70 74
     OrderPromptModalComponent,
75
+    BloodDetailModalComponent,
76
+    DetailBloodComponent,
71 77
   ],
72 78
   imports: [
73 79
     CommonModule,
@@ -80,6 +86,7 @@ import { OrderPromptModalComponent } from './order-prompt-modal/order-prompt-mod
80 86
   ],
81 87
   exports: [
82 88
     DetailSampleComponent,
89
+    DetailBloodComponent,
83 90
     DetailPatientsComponent,
84 91
     DetailDrugComponent,
85 92
     DetailOthersComponent,
@@ -90,6 +97,7 @@ import { OrderPromptModalComponent } from './order-prompt-modal/order-prompt-mod
90 97
     ReplicationSchemeComponent,
91 98
     HsPromptModalComponent,
92 99
     HistoryPromptModalComponent,
100
+    BloodDetailModalComponent,
93 101
     BxPromptModalComponent,
94 102
     AppraiseDetailComponent,
95 103
     OrderDetailComponent,

+ 6 - 0
src/app/views/fuwutai/fuwutai-routing.module.ts

@@ -6,6 +6,7 @@ import { DetailDrugComponent } from '../../share/detail-drug/detail-drug.compone
6 6
 import { DetailOthersComponent } from '../../share/detail-others/detail-others.component';
7 7
 import { AllocationWorkerComponent } from '../../share/allocation-worker/allocation-worker.component';
8 8
 import { FuwutaiComponent } from './fuwutai.component';
9
+import { DetailBloodComponent } from 'src/app/share/detail-blood/detail-blood.component';
9 10
 
10 11
 
11 12
 const routes: Routes = [
@@ -19,6 +20,11 @@ const routes: Routes = [
19 20
         component: DetailSampleComponent
20 21
       },
21 22
       {
23
+        // 工单详情-万能交接服务-血制品
24
+        path: 'detailBlood/:id',
25
+        component: DetailBloodComponent
26
+      },
27
+      {
22 28
         // 工单详情-送患者
23 29
         path: 'detailPatients/:id',
24 30
         component: DetailPatientsComponent

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

@@ -236,7 +236,7 @@
236 236
                 <div
237 237
                   class="didian"
238 238
                   (click)="
239
-                    openDetails(data.id, data.taskType.associationType.id)
239
+                    openDetails(data)
240 240
                   "
241 241
                 >
242 242
                   <span
@@ -264,7 +264,7 @@
264 264
                 <div
265 265
                   class="shijian"
266 266
                   (click)="
267
-                    openDetails(data.id, data.taskType.associationType.id)
267
+                    openDetails(data)
268 268
                   "
269 269
                 >
270 270
                   <span
@@ -499,7 +499,7 @@
499 499
             >
500 500
               <div
501 501
                 class="left_cots"
502
-                (click)="openDetails(data.id, data.taskType.associationType.id)"
502
+                (click)="openDetails(data)"
503 503
               >
504 504
                 <!-- 工单 -->
505 505
                 <div class="gongdan">
@@ -655,7 +655,7 @@
655 655
                 <div
656 656
                   class="didian"
657 657
                   (click)="
658
-                    openDetails(data.id, data.taskType.associationType.id)
658
+                    openDetails(data)
659 659
                   "
660 660
                 >
661 661
                   <span
@@ -692,7 +692,7 @@
692 692
                 <div
693 693
                   class="shijian"
694 694
                   (click)="
695
-                    openDetails(data.id, data.taskType.associationType.id)
695
+                    openDetails(data)
696 696
                   "
697 697
                 >
698 698
                   <span
@@ -924,7 +924,7 @@
924 924
             <div class="list listsTypeColor" *ngFor="let data of arriveList">
925 925
               <div
926 926
                 class="left_cots"
927
-                (click)="openDetails(data.id, data.taskType.associationType.id)"
927
+                (click)="openDetails(data)"
928 928
               >
929 929
                 <!-- 工单 -->
930 930
                 <div class="gongdan">
@@ -1029,7 +1029,7 @@
1029 1029
             <div class="list" *ngFor="let data of executionList">
1030 1030
               <div
1031 1031
                 class="left_cots"
1032
-                (click)="openDetails(data.id, data.taskType.associationType.id)"
1032
+                (click)="openDetails(data)"
1033 1033
               >
1034 1034
                 <!-- 工单 -->
1035 1035
                 <div class="gongdan">
@@ -1281,7 +1281,7 @@
1281 1281
             <div class="list" *ngFor="let data of executionList">
1282 1282
               <div
1283 1283
                 class="left_cots"
1284
-                (click)="openDetails(data.id, data.taskType.associationType.id)"
1284
+                (click)="openDetails(data)"
1285 1285
               >
1286 1286
                 <!-- 工单 -->
1287 1287
                 <div class="gongdan">
@@ -2666,7 +2666,7 @@
2666 2666
                   <div
2667 2667
                     class="left_cots"
2668 2668
                     (click)="
2669
-                      openDetails(data.id, data.taskType.associationType.id)
2669
+                      openDetails(data)
2670 2670
                     "
2671 2671
                   >
2672 2672
                     <!-- 工单 -->

+ 12 - 8
src/app/views/fuwutai/fuwutai.component.ts

@@ -1096,19 +1096,23 @@ export class FuwutaiComponent implements OnInit {
1096 1096
   }
1097 1097
 
1098 1098
   // 查看工单详情
1099
-  openDetails(id, typeId) {
1100
-    if (typeId == 256 || typeId == 380) {
1099
+  openDetails(data) {
1100
+    console.log(data);
1101
+    if (data.taskType.associationType.value == 'specimen' || data.taskType.associationType.value == 'specimenPlan') {
1101 1102
       // 标本类
1102
-      this.router.navigateByUrl("dispatchingDesk/detailSample/" + id);
1103
-    } else if (typeId == 260 || typeId == 255) {
1103
+      this.router.navigateByUrl("dispatchingDesk/detailSample/" + data.id);
1104
+    } else if (data.taskType.associationType.value == 'inspect' || data.taskType.associationType.value == 'patientTransport') {
1104 1105
       // 送患者
1105
-      this.router.navigateByUrl("dispatchingDesk/detailPatients/" + id);
1106
-    } else if (typeId == 257 || typeId == 258) {
1106
+      this.router.navigateByUrl("dispatchingDesk/detailPatients/" + data.id);
1107
+    } else if (data.taskType.associationType.value == 'drugsBag' || data.taskType.associationType.value == 'jPBag') {
1107 1108
       // 药品配送/静配
1108
-      this.router.navigateByUrl("dispatchingDesk/detailDrug/" + id);
1109
+      this.router.navigateByUrl("dispatchingDesk/detailDrug/" + data.id);
1110
+    } else if (data.taskType.associationType.value == 'ordinary' && data.taskType.ordinaryField.value == 'blood') {
1111
+      // 万能交接服务&&血制品
1112
+      this.router.navigateByUrl("dispatchingDesk/detailBlood/" + data.id);
1109 1113
     } else {
1110 1114
       // 其他
1111
-      this.router.navigateByUrl("dispatchingDesk/detailOthers/" + id);
1115
+      this.router.navigateByUrl("dispatchingDesk/detailOthers/" + data.id);
1112 1116
     }
1113 1117
   }
1114 1118
   // 选择楼栋

+ 6 - 0
src/app/views/hushijiandan/hushijiandan-routing.module.ts

@@ -7,6 +7,7 @@ import { DetailDrugComponent } from '../../share/detail-drug/detail-drug.compone
7 7
 import { DetailOthersComponent } from '../../share/detail-others/detail-others.component';
8 8
 import { AllocationWorkerComponent } from '../../share/allocation-worker/allocation-worker.component';
9 9
 import { DetailBxComponent } from 'src/app/share/detail-bx/detail-bx.component';
10
+import { DetailBloodComponent } from 'src/app/share/detail-blood/detail-blood.component';
10 11
 
11 12
 
12 13
 const routes: Routes = [
@@ -20,6 +21,11 @@ const routes: Routes = [
20 21
         component: DetailSampleComponent
21 22
       },
22 23
       {
24
+        // 工单详情-万能交接服务-血制品
25
+        path: 'detailBlood/:id',
26
+        component: DetailBloodComponent
27
+      },
28
+      {
23 29
         // 工单详情-送患者
24 30
         path: 'detailPatients/:id',
25 31
         component: DetailPatientsComponent

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

@@ -104,15 +104,21 @@
104 104
       </ng-template>
105 105
     </label>
106 106
     <label>新密码:
107
-      <nz-input-group [nzSuffix]="suffixTemplate">
108
-        <input maxlength="16" minlength="6" [type]="passwordVisible ? 'text' : 'password'" nz-input placeholder="新密码"
109
-          [(ngModel)]="upModalData.newPwd" />
110
-      </nz-input-group>
111
-      <ng-template #suffixTemplate>
112
-        <i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'"
113
-          (click)="passwordVisible = !passwordVisible"></i>
114
-      </ng-template>
107
+      <!-- <div style="display: flex;"> -->
108
+        <nz-input-group [nzSuffix]="suffixTemplate">
109
+          <input maxlength="16" minlength="6" [type]="passwordVisible ? 'text' : 'password'" nz-input placeholder="新密码"
110
+            [(ngModel)]="upModalData.newPwd" />
111
+        </nz-input-group>
112
+        <ng-template #suffixTemplate>
113
+          <i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'"
114
+            (click)="passwordVisible = !passwordVisible"></i>
115
+        </ng-template>
116
+        <!-- <div class="red" style="display: flex;justify-content: center;align-items: center;padding-left: 5px;">弱</div>
117
+        <div style="display: flex;justify-content: center;align-items: center;padding-left: 5px;">中</div>
118
+        <div class="green" style="display: flex;justify-content: center;align-items: center;padding-left: 5px;">强</div> -->
119
+      <!-- </div> -->
115 120
     </label>
121
+    <!-- <div class="red">强密码需包含大小写字母、数字、特殊字符,长度必须超过8个字符</div> -->
116 122
     <label>确认新密码:
117 123
       <nz-input-group [nzSuffix]="suffixTemplate">
118 124
         <input maxlength="16" minlength="6" [type]="passwordVisible ? 'text' : 'password'" nz-input placeholder="确认新密码"

+ 3 - 0
src/common.less

@@ -31,6 +31,9 @@
31 31
 .red {
32 32
   color: #d81e06 !important;
33 33
 }
34
+.green {
35
+  color: #49b856 !important;
36
+}
34 37
 // 加载中
35 38
 .loadingFull {
36 39
   height: 100%;

+ 1 - 1
src/main.ts

@@ -8,7 +8,7 @@ if (environment.production) {
8 8
   enableProdMode();
9 9
   if (window) {
10 10
     window.console.log = function () { };
11
-    console.info('v2.4.14');
11
+    console.info('v2.4.15');
12 12
   }
13 13
 }
14 14
 platformBrowserDynamic().bootstrapModule(AppModule)