Browse Source

标本视图

seimin 2 years ago
parent
commit
7a127aafbf

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

@@ -5,6 +5,7 @@ import { NurseGuard } from './guard/nurse.guard';//护士端权限
5 5
 import { FuwutaiGuard } from './guard/fuwutai.guard';//服务台权限
6 6
 import { MainGuard } from './guard/main.guard';//管理端权限
7 7
 import { PharmacyGuard } from './guard/pharmacy.guard';//药房端权限
8
+import { SpecimenView2Guard } from './guard/SpecimenView2Guard.guard';//标本视图权限
8 9
 const routes: Routes = [
9 10
   {
10 11
     path: '',
@@ -44,6 +45,11 @@ const routes: Routes = [
44 45
     loadChildren: () => import('./views/pharmacy2/pharmacy2.module').then(m => m.Pharmacy2Module),
45 46
     canActivate: [PharmacyGuard]
46 47
   },
48
+  {
49
+    path: 'specimenView2',//标本视图
50
+    loadChildren: () => import('./views/specimen-view2/specimen-view2.module').then(m => m.SpecimenView2Module),
51
+    canActivate: [SpecimenView2Guard]
52
+  },
47 53
   { path: '**', redirectTo: 'main/home' }
48 54
 
49 55
 ];

+ 26 - 0
src/app/guard/SpecimenView2Guard.guard.ts

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

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

@@ -552,4 +552,12 @@ export class MainService {
552 552
       headers: this.headers,
553 553
     });
554 554
   }
555
+   // 标本视图查询列表接口
556
+   specimenView2(data): any {
557
+    return this.http.post(
558
+      host.host + "/nurse/specimenView2",
559
+      data,
560
+      { headers: this.headers }
561
+    );
562
+  }
555 563
 }

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

@@ -33,6 +33,7 @@ import { FilterSelfPipe } from '../pipes/filter-self.pipe';
33 33
 import { LogPromptModalComponent } from './log-prompt-modal/log-prompt-modal.component';
34 34
 import { DetailBxComponent } from './detail-bx/detail-bx.component';
35 35
 import { ImageViewerComponent } from './image-viewer/image-viewer.component';
36
+import { SpePromptModalComponent } from './spe-prompt-modal/spe-prompt-modal.component';
36 37
 
37 38
 @NgModule({
38 39
   declarations: [
@@ -64,6 +65,7 @@ import { ImageViewerComponent } from './image-viewer/image-viewer.component';
64 65
     LogPromptModalComponent,
65 66
     DetailBxComponent,
66 67
     ImageViewerComponent,
68
+    SpePromptModalComponent,
67 69
   ],
68 70
   imports: [
69 71
     CommonModule,
@@ -110,6 +112,7 @@ import { ImageViewerComponent } from './image-viewer/image-viewer.component';
110 112
     LogPromptModalComponent,
111 113
     DetailBxComponent,
112 114
     ImageViewerComponent,
115
+    SpePromptModalComponent,
113 116
   ]
114 117
 })
115 118
 export class ShareModule { }

+ 57 - 0
src/app/share/spe-prompt-modal/spe-prompt-modal.component.html

@@ -0,0 +1,57 @@
1
+<div class="modal display_flex justify-content_flex-center align-items_center" *ngIf="show">
2
+    <div class="modalBody">
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">
7
+          <thead>
8
+            <tr class="thead">
9
+                <th nzWidth="4%">序号</th>
10
+                <th nzWidth="8%">申请科室</th>
11
+                <th nzWidth="7%">患者姓名</th>
12
+                <th nzWidth="5%">标本编码</th>
13
+                <th nzWidth="8%">检验项目</th>
14
+                <th nzWidth="8%">标本类型</th>
15
+                <th nzWidth="5%">状态</th>
16
+                <th nzWidth="8%">收取时间</th>
17
+                <th nzWidth="8%">收取人</th>
18
+                <th nzWidth="8%">中转时间</th>
19
+                <th nzWidth="8%">送达时间</th>
20
+                <th nzWidth="8%">送达人</th>
21
+                <th nzWidth="8%">终点科室</th>
22
+            </tr>
23
+          </thead>
24
+          <tbody>
25
+            <tr *ngFor="let data of historySpecimenList;let i = index;">
26
+                <td>{{ i + 1 }}</td>
27
+                <td>{{ data.sickRoom ? data.sickRoom.dept : "-" }}</td>
28
+                <td>{{ data.patientName}}<span *ngIf="data.bedNum">({{data.bedNum}})</span><br>{{data.residenceNo}}</td>
29
+                <td>{{ data.scode || "-" }}</td>
30
+                <td>{{ data.specimenDesc || "-" }}</td>
31
+                <td>{{ data.stype ? data.stype.name : "-" }}</td>
32
+                <td>{{ data.speState ? data.speState.name : "-" }}</td>
33
+                <td>{{ data.arriveTime || "-" }}</td>
34
+                <td>{{ data.receiverName || "-" }}</td>
35
+                <td>{{ data.transTime || '-' }}</td>
36
+                <td>{{ data.sendTime || '-' }}</td>
37
+                <td>{{ data.delivererName || "-" }}</td>
38
+                <td>
39
+                  {{ data.checkDept ? (!showCoop&&deptDisplay==2?data.checkDept.deptalias:data.checkDept.dept) : "-" }}
40
+                  <img *ngIf="data.urgent == 1"
41
+                  src="../../assets/images/icon_ji.png" alt="" class="ji"></td>
42
+            </tr>
43
+          </tbody>
44
+        </nz-table>
45
+        <div class="pagination">
46
+          <nz-pagination [(nzPageIndex)]="historySpecimenPageIndex" [(nzTotal)]="historySpecimenListLength"
47
+            [(nzPageSize)]="historySpecimenPageSize" (nzPageIndexChange)="getHistorySpecimen()"
48
+            (nzPageSizeChange)="getHistorySpecimen()">
49
+          </nz-pagination>
50
+        </div>
51
+      </div>
52
+      <div class="display_flex justify-content_flex-center">
53
+        <button class="btn know" nz-button nzType="primary" (click)="hideModal()">知道了</button>
54
+      </div>
55
+    </div>
56
+  </div>
57
+  

+ 170 - 0
src/app/share/spe-prompt-modal/spe-prompt-modal.component.less

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

+ 56 - 0
src/app/share/spe-prompt-modal/spe-prompt-modal.component.ts

@@ -0,0 +1,56 @@
1
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2
+import { MainService } from '../../services/main.service';
3
+
4
+@Component({
5
+  selector: 'app-spe-prompt-modal',
6
+  templateUrl: './spe-prompt-modal.component.html',
7
+  styleUrls: ['./spe-prompt-modal.component.less']
8
+})
9
+export class SpePromptModalComponent 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() checkDeptId: String;
18
+  @Input() printDate: any;
19
+
20
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
21
+
22
+  constructor(private mainService: MainService) { }
23
+
24
+  ngOnInit() {
25
+    this.getHistorySpecimen();
26
+  }
27
+  // 关闭弹窗
28
+  hideModal() {
29
+    this.closeModelHs.emit(JSON.stringify({ show: false }));//emits(向上弹射)事件
30
+  }
31
+  // 获取列表数据
32
+  getHistorySpecimen(idx?) {
33
+    if (idx) {
34
+      this.historySpecimenPageIndex = 1;
35
+    }
36
+    let postData = {
37
+      idx: this.historySpecimenPageIndex - 1,
38
+      sum: this.historySpecimenPageSize,
39
+      specimen: {
40
+        hosId: JSON.parse(localStorage.getItem("user")).user.currentHospital.id,
41
+        checkDept: {id: this.checkDeptId},
42
+        speState: {id: 382},
43
+        printDate: this.printDate?(new Date(this.printDate).getTime()):undefined,
44
+      }
45
+    }
46
+    this.hsLoading = true;
47
+    this.mainService.getFetchDataList('simple/data','specimen',postData).subscribe(data => {
48
+      this.hsLoading = false;
49
+      this.historySpecimenList = data.list || [];
50
+      this.historySpecimenListLength = data.totalNum || 0;
51
+    })
52
+  }
53
+}
54
+
55
+
56
+

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

@@ -41,6 +41,7 @@
41 41
             (click)="toBigScreen('largeScreen2')">大屏端2</button>
42 42
           <button nz-button nzType="primary" *ngIf="specimenViewRole" (click)="toBigScreen('specimenView')"
43 43
             [nzLoading]="deptTypeLoading">业务视图</button>
44
+          <button nz-button nzType="primary" *ngIf="specimenViewRole2" (click)="toSpecimenView2()">标本视图</button>
44 45
         </div>
45 46
         <div class="right">
46 47
           <div class="msg">

+ 9 - 0
src/app/views/main/main.component.ts

@@ -28,6 +28,7 @@ export class MainComponent implements OnInit {
28 28
   largeScreenRole: boolean = false; //大屏端权限
29 29
   largeScreenRole2: boolean = false; //大屏端权限
30 30
   specimenViewRole: boolean = false; //业务视图权限
31
+  specimenViewRole2: boolean = false; //标本视图权限
31 32
   @ViewChild("osComponentRef1", {
32 33
     read: OverlayScrollbarsComponent,
33 34
     static: false,
@@ -120,6 +121,10 @@ export class MainComponent implements OnInit {
120 121
         this.specimenViewRole = true;
121 122
         console.log("业务视图权限");
122 123
       }
124
+      if (e.link == "specimenView2") {
125
+        this.specimenViewRole2 = true;
126
+        console.log("标本视图权限");
127
+      }
123 128
       if (!e.link) {
124 129
         arr.push(e);
125 130
       }
@@ -210,6 +215,10 @@ export class MainComponent implements OnInit {
210 215
   toPharmacy2(): void {
211 216
     this.router.navigateByUrl("pharmacy2");
212 217
   }
218
+  // 标本视图
219
+  toSpecimenView2(): void {
220
+    this.router.navigateByUrl("specimenView2");
221
+  }
213 222
   // 大屏端或视图端
214 223
   screenType;
215 224
   hosFlag = false;

+ 24 - 0
src/app/views/specimen-view2/specimen-view2-routing.module.ts

@@ -0,0 +1,24 @@
1
+import { NgModule } from "@angular/core";
2
+import { Routes, RouterModule } from "@angular/router";
3
+import { SpecimenView2Component } from "./specimen-view2.component";
4
+import { DetailSampleComponent } from 'src/app/share/detail-sample/detail-sample.component';
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: "",
9
+    component: SpecimenView2Component,
10
+    children: [
11
+      {
12
+        // 工单详情-标本
13
+        path: "detailSample/:id",
14
+        component: DetailSampleComponent,
15
+      },
16
+    ],
17
+  },
18
+];
19
+
20
+@NgModule({
21
+  imports: [RouterModule.forChild(routes)],
22
+  exports: [RouterModule],
23
+})
24
+export class SpecimenView2RoutingModule {}

+ 598 - 0
src/app/views/specimen-view2/specimen-view2.component.html

@@ -0,0 +1,598 @@
1
+<div class="pharmacy">
2
+  <!-- 头部 start -->
3
+  <div class="pharmacy-header">
4
+    <div class="pharmacy-logo">
5
+      <img
6
+        src="./../../assets/images/login_logo.png"
7
+        class="pharmacy-logo__img"
8
+        alt=""
9
+      />
10
+      <h1 class="pharmacy-logo__name">大势医院输送保障管理平台</h1>
11
+    </div>
12
+    <div class="pharmacy-name">
13
+      <h2 class="pharmacy-name__title">
14
+        <span>标本视图</span>
15
+        <span class="currentDate">{{ time | date: "yyyy年MM月dd日" }}</span>
16
+      </h2>
17
+      <div class="pharmacy-name__total">
18
+        <div>
19
+          <!-- 今日药单量:<strong>{{ todayTotal }}</strong> -->
20
+        </div>
21
+        <div>
22
+          <!-- 今日已完成:<strong>{{ todayComplete }}</strong> -->
23
+        </div>
24
+      </div>
25
+    </div>
26
+    <div class="userInfo">
27
+      <div class="wel">欢迎您:</div>
28
+      <div class="user">
29
+        <img src="../../assets/images/icon_keshi.png" alt="" />
30
+        <span *ngIf="deptDisplay">{{
31
+          deptDisplay == 2 ? loginUser.dept.deptalias : loginUser.dept.dept
32
+        }}</span>
33
+      </div>
34
+      <div class="userInfo-wrap">
35
+        <div class="logOut" (click)="changeKsNow()">切换科室</div>
36
+        <div class="logOut" (click)="logOut()">退出</div>
37
+      </div>
38
+    </div>
39
+  </div>
40
+  <!-- 头部 end -->
41
+  <!-- 主体部分 start -->
42
+  <div class="pharmacy-main">
43
+    <!-- 代收急查标本(标本信息) start -->
44
+    <div class="pharmacy-main__list pharmacy-main__print">
45
+      <!-- 标题 start -->
46
+      <div class="pharmacy-main__title">
47
+        <strong>代收急查标本(标本信息)</strong>
48
+        <span class="autoUpdate">{{ logTime }}秒</span>
49
+      </div>
50
+      <!-- 标题 end -->
51
+      <!-- 搜索框 start -->
52
+      <div class="pharmacy-main__search">
53
+        <div class="pharmacy-main__searchInput">
54
+          <input
55
+            nz-input
56
+            placeholder="请输入关键字"
57
+            [(ngModel)]="printPharmacySearchKey"
58
+          />
59
+          <div class="pharmacy-main__searchText" (click)="searchKeyHandle('delegation')">
60
+            <i nz-icon nzType="search"></i>
61
+            <span>搜索</span>
62
+          </div>
63
+        </div>
64
+      </div>
65
+      <!-- 搜索框 end -->
66
+      <!-- 列表 start -->
67
+      <overlay-scrollbars #osComponentRef1 class="pharmacy-main__selectionWrap">
68
+        <div *ngIf="!loading1" style="height: 100%">
69
+          <div
70
+            class="pharmacy-main__selection noPointer"
71
+            *ngFor="let item of printPharmacyList"
72
+          >
73
+            <div class="pharmacy-main__selectionInfo">
74
+              <div class="pharmacy-main__selectionItem">
75
+                <span>检验项目</span>
76
+                <span>{{item.specimen_desc || '无'}}</span>
77
+              </div>
78
+              <div class="pharmacy-main__selectionItem">
79
+                <span>患者姓名</span>
80
+                <span>{{item.patientname || '无'}}</span>
81
+              </div>
82
+              <div class="pharmacy-main__selectionItem">
83
+                <span>住院号</span>
84
+                <span>{{item.residence_no || '无'}}</span>
85
+              </div>
86
+              <div class="pharmacy-main__selectionItem">
87
+                <span class="moreContent left">{{item.sick_room || '无'}}</span>
88
+                <span class="icon_transport transport-arrow-right-full"></span>
89
+                <span class="moreContent">{{item.check_dept || '无'}}</span>
90
+              </div>
91
+              <div class="pharmacy-main__selectionItem">
92
+                <span>采集时间</span>
93
+                <span>{{item.print_date ? (item.print_date|date:'MM-dd HH:mm') :'无'}}</span>
94
+              </div>
95
+            </div>
96
+          </div>
97
+          <div
98
+            class="pharmacy-main__selection pharmacy-main__selection--noData"
99
+            *ngIf="printPharmacyList.length === 0"
100
+          >
101
+            <img src="./../../assets/images/image_kongbaiye.png" alt="" />
102
+          </div>
103
+          <!-- <div
104
+            (click)="loadMore(1)"
105
+            class="pharmacy-main__selection pharmacy-main__selection--more"
106
+            *ngIf="printPharmacyFlag"
107
+          >
108
+            <div class="pharmacy-main__selectionInfo">
109
+              <i
110
+                nz-icon
111
+                nzType="loading"
112
+                nzTheme="outline"
113
+                class="pharmacy-main__selection--icon"
114
+                *ngIf="printPharmacyLoad"
115
+              ></i
116
+              >查看更多
117
+            </div>
118
+          </div> -->
119
+        </div>
120
+        <div
121
+          *ngIf="loading1"
122
+          style="height: calc(100vh - 212px); min-height: 556px"
123
+        >
124
+          <div
125
+            class="loadingFull display_flex justify-content_flex-center align-items_center"
126
+          >
127
+            <div class="loadingFullInner">
128
+              <img src="../../../assets/images/loading.gif" alt="" />
129
+              <div>加载中...</div>
130
+            </div>
131
+          </div>
132
+        </div>
133
+      </overlay-scrollbars>
134
+      <!-- 列表 end -->
135
+    </div>
136
+    <!-- 代收急查标本(标本信息) end -->
137
+    <!-- 已收取(工单信息) start -->
138
+    <div class="pharmacy-main__list pharmacy-main__waitDelivery">
139
+      <!-- 标题 start -->
140
+      <div class="pharmacy-main__title">
141
+        <strong>已收取(工单信息)</strong>
142
+        <span class="autoUpdate">{{ logTime }}秒</span>
143
+      </div>
144
+      <!-- 标题 end -->
145
+      <!-- 搜索框 start -->
146
+      <div class="pharmacy-main__search">
147
+        <div class="pharmacy-main__searchInput">
148
+          <input
149
+            nz-input
150
+            placeholder="请输入关键字"
151
+            [(ngModel)]="waitPharmacySearchKey"
152
+          />
153
+          <div class="pharmacy-main__searchText" (click)="searchKeyHandle('take')">
154
+            <i nz-icon nzType="search"></i>
155
+            <span>搜索</span>
156
+          </div>
157
+        </div>
158
+      </div>
159
+      <!-- 搜索框 end -->
160
+      <!-- 列表 start -->
161
+      <overlay-scrollbars #osComponentRef2 class="pharmacy-main__selectionWrap">
162
+        <div *ngIf="!loading2" style="height: 100%">
163
+          <div
164
+            (click)="goToOrderDetail(item)"
165
+            class="pharmacy-main__selection"
166
+            *ngFor="let item of waitPharmacyList; let i = index"
167
+          >
168
+            <div class="pharmacy-main__selectionInfo">
169
+              <div class="pharmacy-main__selectionItem">
170
+                <span>单号</span>
171
+                <span>{{item.gdcode || '无'}}</span>
172
+              </div>
173
+              <div class="pharmacy-main__selectionItem">
174
+                <span>执行人</span>
175
+                <span>{{item.userName || '无'}}</span>
176
+              </div>
177
+              <div class="pharmacy-main__selectionItem">
178
+                <span>科室名称</span>
179
+                <span class="moreContent">{{item.start_department || '无'}}</span>
180
+              </div>
181
+              <div class="pharmacy-main__selectionItem">
182
+                <span>扫描标本总数</span>
183
+                <span>{{item.actual_receive_num || '无'}}</span>
184
+              </div>
185
+              <div class="pharmacy-main__selectionItem">
186
+                <span>到达时间</span>
187
+                <span>{{item.arrivetime ? (item.arrivetime|date:'MM-dd HH:mm') :'无'}}</span>
188
+              </div>
189
+            </div>
190
+          </div>
191
+          <div
192
+            class="pharmacy-main__selection pharmacy-main__selection--noData"
193
+            *ngIf="waitPharmacyList.length === 0"
194
+          >
195
+            <img src="./../../assets/images/image_kongbaiye.png" alt="" />
196
+          </div>
197
+          <!-- <div
198
+            (click)="loadMore(2)"
199
+            class="pharmacy-main__selection pharmacy-main__selection--more"
200
+            *ngIf="waitPharmacyFlag"
201
+          >
202
+            <div class="pharmacy-main__selectionInfo">
203
+              <i
204
+                nz-icon
205
+                nzType="loading"
206
+                nzTheme="outline"
207
+                class="pharmacy-main__selection--icon"
208
+                *ngIf="waitPharmacyLoad"
209
+              ></i
210
+              >查看更多
211
+            </div>
212
+          </div> -->
213
+        </div>
214
+        <div
215
+          *ngIf="loading2"
216
+          style="height: calc(100vh - 212px); min-height: 556px"
217
+        >
218
+          <div
219
+            class="loadingFull display_flex justify-content_flex-center align-items_center"
220
+          >
221
+            <div class="loadingFullInner">
222
+              <img src="../../../assets/images/loading.gif" alt="" />
223
+              <div>加载中...</div>
224
+            </div>
225
+          </div>
226
+        </div>
227
+      </overlay-scrollbars>
228
+      <!-- 列表 end -->
229
+    </div>
230
+    <!-- 已收取(工单信息) end -->
231
+    <!-- 中转标本(标本统计信息) start -->
232
+    <div class="pharmacy-main__list pharmacy-main__delivery">
233
+      <!-- 标题 start -->
234
+      <div class="pharmacy-main__title">
235
+        <strong>中转标本(标本统计信息)</strong>
236
+        <span class="autoUpdate">{{ logTime }}秒</span>
237
+      </div>
238
+      <!-- 标题 end -->
239
+      <!-- 搜索框 start -->
240
+      <div class="pharmacy-main__search">
241
+        <div class="pharmacy-main__searchInput">
242
+          <input
243
+            nz-input
244
+            placeholder="请输入关键字"
245
+            [(ngModel)]="pharmacySearchKey"
246
+          />
247
+          <div class="pharmacy-main__searchText" (click)="searchKeyHandle('trans')">
248
+            <i nz-icon nzType="search"></i>
249
+            <span>搜索</span>
250
+          </div>
251
+        </div>
252
+      </div>
253
+      <!-- 搜索框 end -->
254
+      <!-- 列表 start -->
255
+      <overlay-scrollbars #osComponentRef3 class="pharmacy-main__selectionWrap">
256
+        <div *ngIf="!loading3" style="height: 100%">
257
+          <div
258
+            (click)="showSpeList(item)"
259
+            class="pharmacy-main__selection"
260
+            *ngFor="let item of pharmacyList; let i = index"
261
+          >
262
+            <div class="pharmacy-main__selectionInfo">
263
+              <div class="pharmacy-main__selectionItem">
264
+                <span>科室名称</span>
265
+                <span class="moreContent">{{item.check_dept || '无'}}</span>
266
+              </div>
267
+              <div class="pharmacy-main__selectionItem">
268
+                <span>数量</span>
269
+                <span>{{item.count || '无'}}</span>
270
+              </div>
271
+            </div>
272
+          </div>
273
+          <div
274
+            class="pharmacy-main__selection pharmacy-main__selection--noData"
275
+            *ngIf="pharmacyList.length === 0"
276
+          >
277
+            <img src="./../../assets/images/image_kongbaiye.png" alt="" />
278
+          </div>
279
+          <!-- <div
280
+            (click)="loadMore(3)"
281
+            class="pharmacy-main__selection pharmacy-main__selection--more"
282
+            *ngIf="pharmacyFlag"
283
+          >
284
+            <div class="pharmacy-main__selectionInfo">
285
+              <i
286
+                nz-icon
287
+                nzType="loading"
288
+                nzTheme="outline"
289
+                class="pharmacy-main__selection--icon"
290
+                *ngIf="pharmacyLoad"
291
+              ></i
292
+              >查看更多
293
+            </div>
294
+          </div> -->
295
+        </div>
296
+        <div
297
+          *ngIf="loading3"
298
+          style="height: calc(100vh - 212px); min-height: 556px"
299
+        >
300
+          <div
301
+            class="loadingFull display_flex justify-content_flex-center align-items_center"
302
+          >
303
+            <div class="loadingFullInner">
304
+              <img src="../../../assets/images/loading.gif" alt="" />
305
+              <div>加载中...</div>
306
+            </div>
307
+          </div>
308
+        </div>
309
+      </overlay-scrollbars>
310
+      <!-- 列表 end -->
311
+    </div>
312
+    <!-- 中转标本(标本统计信息) end -->
313
+    <!-- 中转配送中(工单信息) start -->
314
+    <div class="pharmacy-main__list pharmacy-main__delivery">
315
+      <!-- 标题 start -->
316
+      <div class="pharmacy-main__title">
317
+        <strong>中转配送中(工单信息)</strong>
318
+        <span class="autoUpdate">{{ logTime }}秒</span>
319
+      </div>
320
+      <!-- 标题 end -->
321
+      <!-- 搜索框 start -->
322
+      <div class="pharmacy-main__search">
323
+        <div class="pharmacy-main__searchInput">
324
+          <input
325
+            nz-input
326
+            placeholder="请输入关键字"
327
+            [(ngModel)]="distributionSearchKey"
328
+          />
329
+          <div class="pharmacy-main__searchText" (click)="searchKeyHandle('trans_send')">
330
+            <i nz-icon nzType="search"></i>
331
+            <span>搜索</span>
332
+          </div>
333
+        </div>
334
+      </div>
335
+      <!-- 搜索框 end -->
336
+      <!-- 列表 start -->
337
+      <overlay-scrollbars #osComponentRef4 class="pharmacy-main__selectionWrap">
338
+        <div *ngIf="!loading4" style="height: 100%">
339
+          <div
340
+            (click)="goToOrderDetail(item)"
341
+            class="pharmacy-main__selection"
342
+            *ngFor="let item of distributionList; let i = index"
343
+          >
344
+            <div class="pharmacy-main__selectionInfo">
345
+              <div class="pharmacy-main__selectionItem">
346
+                <span>单号</span>
347
+                <span>{{item.gdcode || '无'}}</span>
348
+              </div>
349
+              <div class="pharmacy-main__selectionItem">
350
+                <span>执行人</span>
351
+                <span>{{item.userName || '无'}}</span>
352
+              </div>
353
+              <div class="pharmacy-main__selectionItem">
354
+                <span>配送科室</span>
355
+                <span class="moreContent">{{item.deptList || '无'}}</span>
356
+              </div>
357
+              <div class="pharmacy-main__selectionItem">
358
+                <span>建单时间</span>
359
+                <span>{{item.starttime ? (item.starttime|date:'MM-dd HH:mm') :'无'}}</span>
360
+              </div>
361
+              <div class="pharmacy-main__selectionItem">
362
+                <span>标本总数</span>
363
+                <span>{{item.count || '无'}}</span>
364
+              </div>
365
+            </div>
366
+          </div>
367
+          <div
368
+            class="pharmacy-main__selection pharmacy-main__selection--noData"
369
+            *ngIf="distributionList.length === 0"
370
+          >
371
+            <img src="./../../assets/images/image_kongbaiye.png" alt="" />
372
+          </div>
373
+          <!-- <div
374
+            (click)="loadMore(4)"
375
+            class="pharmacy-main__selection pharmacy-main__selection--more"
376
+            *ngIf="distributionFlag"
377
+          >
378
+            <div class="pharmacy-main__selectionInfo">
379
+              <i
380
+                nz-icon
381
+                nzType="loading"
382
+                nzTheme="outline"
383
+                class="pharmacy-main__selection--icon"
384
+                *ngIf="distributionLoad"
385
+              ></i
386
+              >查看更多
387
+            </div>
388
+          </div> -->
389
+        </div>
390
+        <div
391
+          *ngIf="loading4"
392
+          style="height: calc(100vh - 212px); min-height: 556px"
393
+        >
394
+          <div
395
+            class="loadingFull display_flex justify-content_flex-center align-items_center"
396
+          >
397
+            <div class="loadingFullInner">
398
+              <img src="../../../assets/images/loading.gif" alt="" />
399
+              <div>加载中...</div>
400
+            </div>
401
+          </div>
402
+        </div>
403
+      </overlay-scrollbars>
404
+      <!-- 列表 end -->
405
+    </div>
406
+    <!-- 中转配送中(工单信息) end -->
407
+    <!-- 异常标本(标本信息) start -->
408
+    <div class="pharmacy-main__list pharmacy-main__delivery">
409
+      <!-- 标题 start -->
410
+      <div class="pharmacy-main__title">
411
+        <strong>异常标本(标本信息)</strong>
412
+        <span class="autoUpdate">{{ logTime }}秒</span>
413
+      </div>
414
+      <!-- 标题 end -->
415
+      <!-- 搜索框 start -->
416
+      <div class="pharmacy-main__search">
417
+        <div class="pharmacy-main__searchInput">
418
+          <input
419
+            nz-input
420
+            placeholder="请输入关键字"
421
+            [(ngModel)]="completedSearchKey"
422
+          />
423
+          <div class="pharmacy-main__searchText" (click)="searchKeyHandle('error')">
424
+            <i nz-icon nzType="search"></i>
425
+            <span>搜索</span>
426
+          </div>
427
+        </div>
428
+      </div>
429
+      <!-- 搜索框 end -->
430
+      <!-- 列表 start -->
431
+      <overlay-scrollbars #osComponentRef5 class="pharmacy-main__selectionWrap">
432
+        <div *ngIf="!loading5" style="height: 100%">
433
+          <div
434
+            (click)="showLogs(item)"
435
+            class="pharmacy-main__selection"
436
+            *ngFor="let item of completedList; let i = index"
437
+          >
438
+            <div class="pharmacy-main__selectionInfo">
439
+              <div class="pharmacy-main__selectionItem">
440
+                <span>标本编码</span>
441
+                <span>{{item.scode || '无'}}</span>
442
+              </div>
443
+              <div class="pharmacy-main__selectionItem">
444
+                <span>标本类型</span>
445
+                <span>{{item.stype || '无'}}</span>
446
+              </div>
447
+              <div class="pharmacy-main__selectionItem">
448
+                <span>检验项目</span>
449
+                <span>{{item.specimen_desc || '无'}}</span>
450
+              </div>
451
+              <div class="pharmacy-main__selectionItem">
452
+                <span>状态</span>
453
+                <span>{{item.spe_state || '无'}}</span>
454
+              </div>
455
+              <div class="pharmacy-main__selectionItem">
456
+                <span>住院号</span>
457
+                <span>{{item.residence_no || '无'}}</span>
458
+              </div>
459
+              <div class="pharmacy-main__selectionItem">
460
+                <span>患者姓名(床号)</span>
461
+                <span>{{item.patientname || '无'}}<span *ngIf="item.patientname && item.bednum">({{item.bednum}})</span></span>
462
+              </div>
463
+              <div class="pharmacy-main__selectionItem">
464
+                <span>收取人</span>
465
+                <span>{{item.receiver || '无'}}</span>
466
+              </div>
467
+              <div class="pharmacy-main__selectionItem">
468
+                <span>收取时间</span>
469
+                <span>{{item.arrive_time ? (item.arrive_time|date:'MM-dd HH:mm') : '无'}}</span>
470
+              </div>
471
+              <div class="pharmacy-main__selectionItem">
472
+                <span>中转时间</span>
473
+                <span>{{item.trans_time ? (item.trans_time|date:'MM-dd HH:mm') : '无'}}</span>
474
+              </div>
475
+              <div class="pharmacy-main__selectionItem">
476
+                <span class="moreContent left">{{item.sick_room || '无'}}</span>
477
+                <span class="icon_transport transport-arrow-right-full"></span>
478
+                <span class="moreContent">{{item.check_dept || '无'}}</span>
479
+              </div>
480
+            </div>
481
+          </div>
482
+          <div
483
+            class="pharmacy-main__selection pharmacy-main__selection--noData"
484
+            *ngIf="completedList.length === 0"
485
+          >
486
+            <img src="./../../assets/images/image_kongbaiye.png" alt="" />
487
+          </div>
488
+          <!-- <div
489
+            (click)="loadMore(5)"
490
+            class="pharmacy-main__selection pharmacy-main__selection--more"
491
+            *ngIf="completedFlag"
492
+          >
493
+            <div class="pharmacy-main__selectionInfo">
494
+              <i
495
+                nz-icon
496
+                nzType="loading"
497
+                nzTheme="outline"
498
+                class="pharmacy-main__selection--icon"
499
+                *ngIf="completedLoad"
500
+              ></i
501
+              >查看更多
502
+            </div>
503
+          </div> -->
504
+        </div>
505
+        <div
506
+          *ngIf="loading5"
507
+          style="height: calc(100vh - 212px); min-height: 556px"
508
+        >
509
+          <div
510
+            class="loadingFull display_flex justify-content_flex-center align-items_center"
511
+          >
512
+            <div class="loadingFullInner">
513
+              <img src="../../../assets/images/loading.gif" alt="" />
514
+              <div>加载中...</div>
515
+            </div>
516
+          </div>
517
+        </div>
518
+      </overlay-scrollbars>
519
+      <!-- 列表 end -->
520
+    </div>
521
+    <!-- 异常标本(标本信息) end -->
522
+  </div>
523
+  <!-- 主体部分 end -->
524
+  <router-outlet></router-outlet>
525
+</div>
526
+
527
+<!-- 药房端科室切换提示框 -->
528
+<app-hs-prompt-modal
529
+  [changeShow]="changeShow"
530
+  [closeTime]="closeTime"
531
+  [closeTimeFlag]="closeTimeFlag"
532
+  [show]="hsPromptModalShow"
533
+  (closeModelHs)="closeModelHs($event)"
534
+  (clearModelHs)="clearModelHs($event)"
535
+  deptType="pharmacy"
536
+>
537
+  <!-- 返回系统按钮 -->
538
+  <!-- 右侧悬浮框 -->
539
+  <div id="fixedMenu" class="fixed" *ngIf="mainRole">
540
+    <div class="right">
541
+      <div class="fixedMenu hujiaozhongxin">
542
+        <div class="menuItems">
543
+          <div class="item">快捷菜单</div>
544
+        </div>
545
+      </div>
546
+      <div class="fixedMenu">
547
+        <div class="menuItems">
548
+          <div
549
+            class="others"
550
+            [ngStyle]="{
551
+              height: showLastItems
552
+                ? mainRole
553
+                  ? 35 * 2 + 'px'
554
+                  : 35 * 1 + 'px'
555
+                : 0
556
+            }"
557
+          >
558
+            <div
559
+              [ngClass]="{ item: true, checked: fixedTab == 'back' }"
560
+              *ngIf="mainRole"
561
+              (click)="checkFixedTab('toSystem')"
562
+            >
563
+              返回系统
564
+            </div>
565
+          </div>
566
+        </div>
567
+        <div class="arrow" *ngIf="!showLastItems" (click)="fixedMenuXiala()">
568
+          <i class="icon_transport transport-xiala2-01"></i>
569
+        </div>
570
+        <div class="arrow" *ngIf="showLastItems" (click)="fixedMenuShangla()">
571
+          <i class="icon_transport transport-shangla-"></i>
572
+        </div>
573
+      </div>
574
+    </div>
575
+    <div
576
+      *ngIf="showLastItems && fixedTab != ''"
577
+      (click)="fixedMenuShangla()"
578
+      class="fixedMark"
579
+    ></div>
580
+  </div>
581
+</app-hs-prompt-modal>
582
+
583
+<!-- 标本历史记录查看 -->
584
+<app-history-prompt-modal
585
+  *ngIf="logPromptModalShow"
586
+  [show]="logPromptModalShow"
587
+  [scode]="scode"
588
+  (closeModelHs)="closeModelLog($event)"
589
+></app-history-prompt-modal>
590
+
591
+<!-- 标本列表查看 -->
592
+<app-spe-prompt-modal
593
+  *ngIf="spePromptModalShow"
594
+  [show]="spePromptModalShow"
595
+  [checkDeptId]="checkDeptId"
596
+  [printDate]="printDate"
597
+  (closeModelHs)="closeModelSpe($event)"
598
+></app-spe-prompt-modal>

+ 503 - 0
src/app/views/specimen-view2/specimen-view2.component.less

@@ -0,0 +1,503 @@
1
+@import "../../../../src/theme.less";
2
+:host {
3
+  width: 100%;
4
+  background-color: #f9fafb;
5
+  .ant-btn[disabled] {
6
+    color: rgba(0, 0, 0, 0.25) !important;
7
+    background-color: #f5f5f5 !important;
8
+  }
9
+  .red {
10
+    color: red !important;
11
+    font-weight: bold !important;
12
+  }
13
+  .green {
14
+    color: @primary-color!important;
15
+    font-weight: bold !important;
16
+  }
17
+
18
+  h1,
19
+  h2,
20
+  h3,
21
+  p {
22
+    margin: 0;
23
+  }
24
+  em {
25
+    font-style: normal;
26
+  }
27
+  .pharmacy {
28
+    display: flex;
29
+    flex-direction: column;
30
+    height: 100%;
31
+  }
32
+
33
+  // 头部 start
34
+  .pharmacy-header {
35
+    height: 88px;
36
+    background-color: #fff;
37
+    border-bottom: 1px solid #e5e9ed;
38
+    box-sizing: border-box;
39
+    display: flex;
40
+
41
+    .pharmacy-logo {
42
+      width: 221px;
43
+      background-color: #0f2e3b;
44
+      display: flex;
45
+      justify-content: center;
46
+      align-items: center;
47
+
48
+      .pharmacy-logo__img {
49
+        width: 32px;
50
+      }
51
+
52
+      .pharmacy-logo__name {
53
+        font-size: 14px;
54
+        color: #fff;
55
+      }
56
+    }
57
+
58
+    .pharmacy-name {
59
+      flex: 1;
60
+      border-right: 1px solid #e5e9ed;
61
+      display: flex;
62
+      justify-content: space-between;
63
+      align-items: center;
64
+
65
+      .pharmacy-name__title {
66
+        font-size: 22px;
67
+        color: #333;
68
+        margin-left: 43px;
69
+        line-height: 87px;
70
+        .currentDate {
71
+          margin-left: 24px;
72
+          font-size: 16px;
73
+        }
74
+      }
75
+      .pharmacy-name__total {
76
+        margin-right: 16px;
77
+        font-size: 16px;
78
+      }
79
+    }
80
+
81
+    .pharmacy-operate {
82
+      width: 211px;
83
+      display: flex;
84
+      justify-content: center;
85
+      align-items: center;
86
+      position: relative;
87
+      .pharmacy-operatePop {
88
+        cursor: pointer;
89
+        border: 1px solid #e5e9ed;
90
+        background-color: #fff;
91
+        position: absolute;
92
+        left: 0;
93
+        top: 100%;
94
+        width: 100%;
95
+        height: 34px;
96
+        line-height: 34px;
97
+        text-align: center;
98
+        font-size: 14px;
99
+        color: @primary-color;
100
+      }
101
+
102
+      &:after {
103
+        content: "";
104
+        display: block;
105
+        width: 0;
106
+        height: 0;
107
+        border-left: 7px solid transparent;
108
+        border-right: 7px solid transparent;
109
+        border-top: 10px solid #666;
110
+      }
111
+
112
+      .pharmacy-operate__img {
113
+        max-height: 40px;
114
+        margin-right: 8px;
115
+      }
116
+
117
+      .pharmacy-operate__title {
118
+        font-size: 20px;
119
+        color: #666;
120
+        padding-right: 24px;
121
+        cursor: pointer;
122
+      }
123
+    }
124
+  }
125
+  .userInfo {
126
+    width: 336px;
127
+    height: 100%;
128
+    float: right;
129
+    padding: 8px;
130
+    box-sizing: border-box;
131
+    font-size: 14px;
132
+    border-left: 1px solid #e5e9ed;
133
+
134
+    .wel {
135
+      line-height: 15px;
136
+    }
137
+
138
+    .user {
139
+      font-size: 20px;
140
+      height: 36px;
141
+      display: flex;
142
+      justify-content: center;
143
+      align-items: center;
144
+      line-height: normal;
145
+
146
+      img {
147
+        height: 100%;
148
+        margin-right: 8px;
149
+      }
150
+    }
151
+    .userInfo-wrap {
152
+      display: flex;
153
+      justify-content: flex-end;
154
+      .logOut {
155
+        display: inline-block;
156
+        text-align: right;
157
+        color: @primary-color;
158
+        line-height: 20px;
159
+        cursor: pointer;
160
+        margin-right: 8px;
161
+      }
162
+    }
163
+  }
164
+  // 头部 end
165
+  // 主体部分 start
166
+  .pharmacy-main {
167
+    height: calc(100vh - 88px);
168
+    min-height: 680px;
169
+    flex: 1;
170
+    padding: 16px;
171
+    display: flex;
172
+    justify-content: space-between;
173
+    .pharmacy-main__list {
174
+      display: flex;
175
+      flex-direction: column;
176
+      background-color: #f9fafb;
177
+      flex: 1;
178
+      margin: 0 4px;
179
+      box-sizing: border-box;
180
+      border: 1px solid #e5e9ed;
181
+      // 标题 start
182
+      .pharmacy-main__title {
183
+        height: 40px;
184
+        background-color: #fff;
185
+        font-size: 16px;
186
+        color: #333;
187
+        font-weight: 700;
188
+        padding-left: 8px;
189
+        display: flex;
190
+        justify-content: space-between;
191
+        align-items: center;
192
+        border-bottom: 1px solid #e5e9ed;
193
+        .autoUpdate {
194
+          font-size: 14px;
195
+          color: #49b856;
196
+          margin-right: 8px;
197
+        }
198
+        .pharmacy-main__printAll {
199
+          // width: 80px;
200
+          height: 28px;
201
+          line-height: 28px;
202
+          margin-right: 16px;
203
+          background-color: @primary-color;
204
+          font-size: 14px;
205
+          color: #fff;
206
+          border-radius: 4px;
207
+          text-align: center;
208
+          display: flex;
209
+          justify-content: center;
210
+        }
211
+      }
212
+      // 标题 end
213
+      // 搜索框 start
214
+      .pharmacy-main__search {
215
+        padding: 8px;
216
+        position: relative;
217
+        .pharmacy-main__searchInput {
218
+          border-radius: 100px;
219
+          padding-right: 82px;
220
+          border: 1px solid #e5e9ed;
221
+          background-color: #fff;
222
+          overflow: hidden;
223
+          input {
224
+            border: none;
225
+          }
226
+          .ant-input:focus {
227
+            border-color: #fff;
228
+            outline: 0;
229
+            box-shadow: 0 0 0 2px #fff;
230
+          }
231
+          .pharmacy-main__searchText {
232
+            cursor: pointer;
233
+            position: absolute;
234
+            top: 13px;
235
+            right: 8px;
236
+            width: 74px;
237
+            height: 22px;
238
+            border-left: 1px solid #e5e9ed;
239
+            color: #999;
240
+            padding-left: 8px;
241
+            box-sizing: border-box;
242
+            span {
243
+              color: @primary-color;
244
+              margin-left: 8px;
245
+            }
246
+          }
247
+        }
248
+      }
249
+      // 搜索框 end
250
+      // 列表 start
251
+      .pharmacy-main__selectionWrap {
252
+        flex: 1;
253
+        // height: 630px;
254
+        overflow: auto;
255
+        &:first-child {
256
+          border-top: 1px solid #e5e9ed;
257
+        }
258
+        .pharmacy-main__selection {
259
+          box-sizing: border-box;
260
+          border-bottom: 1px solid #e5e9ed;
261
+          display: flex;
262
+          cursor: pointer;
263
+          &.noPointer{
264
+            cursor: default;
265
+          }
266
+          &.pharmacy-main__selection--more {
267
+            color: @primary-color;
268
+            height: 34px;
269
+            cursor: pointer;
270
+            .pharmacy-main__selectionInfo {
271
+              justify-content: center;
272
+              align-items: center;
273
+              flex-direction: row;
274
+              .pharmacy-main__selection--icon {
275
+                margin-right: 8px;
276
+              }
277
+            }
278
+          }
279
+          &.pharmacy-main__selection--noData {
280
+            height: calc(100vh - 212px);
281
+            min-height: 556px;
282
+            display: flex;
283
+            justify-content: center;
284
+            align-items: center;
285
+            img {
286
+              width: 100px;
287
+            }
288
+          }
289
+          .pharmacy-main__selectionInfo {
290
+            padding: 8px;
291
+            flex: 1;
292
+            display: flex;
293
+            flex-direction: column;
294
+            justify-content: space-between;
295
+            .pharmacy-main__selectionItem {
296
+              display: flex;
297
+              justify-content: space-between;
298
+              padding: 0 8px;
299
+              .moreContent{
300
+                width: 150px;
301
+                display: flex;
302
+                justify-content: flex-end;
303
+                text-align: justify;
304
+                &.left{
305
+                  justify-content: flex-start;
306
+                }
307
+              }
308
+              span {
309
+                color: #666;
310
+                font-size: 12px;
311
+              }
312
+              strong {
313
+                color: #333;
314
+                font-weight: 700;
315
+                font-size: 14px;
316
+              }
317
+            }
318
+          }
319
+          .pharmacy-main__selectionPrint {
320
+            width: 90px;
321
+            display: flex;
322
+            justify-content: center;
323
+            align-items: center;
324
+            border-left: 1px solid #e5e9ed;
325
+            .pharmacy-main__selectionPrintBtn {
326
+              width: 60px;
327
+              height: 28px;
328
+              line-height: 28px;
329
+              border-radius: 4px;
330
+              border: 1px solid @primary-color;
331
+              color: @primary-color;
332
+              text-align: center;
333
+              cursor: pointer;
334
+            }
335
+          }
336
+        }
337
+      }
338
+      // 列表 end
339
+    }
340
+  }
341
+  // 主体部分 end
342
+
343
+  // 右侧悬浮菜单
344
+  .fixed {
345
+    position: fixed;
346
+    top: 40%;
347
+    right: 0;
348
+    z-index: 99;
349
+    border-radius: 5px 0 0 5px;
350
+
351
+    .fixedMark {
352
+      position: fixed;
353
+      left: 0;
354
+      top: 0;
355
+      width: 100%;
356
+      height: 100%;
357
+      background: rgba(0, 0, 0, 0.2);
358
+      z-index: 88;
359
+    }
360
+
361
+    // overflow: hidden;
362
+    & > .left {
363
+      width: 480px;
364
+      // height: 280px;
365
+      float: left;
366
+      background: #fff;
367
+      padding: 16px;
368
+      border-radius: 5px;
369
+      border: 1px solid #e5e9ed;
370
+      // box-shadow: -8px 5px 15px #eae9e9;
371
+      position: relative;
372
+      z-index: 98;
373
+
374
+      .con {
375
+        background: #f9fafb;
376
+        width: 100%;
377
+        height: 100%;
378
+        border-radius: 5px;
379
+        border: 1px solid #e5e9ed;
380
+        padding: 16px 20px;
381
+
382
+        &.tableCon {
383
+          padding: 0;
384
+
385
+          .table {
386
+            font-size: 14px;
387
+
388
+            tr {
389
+              td {
390
+                padding: 15px 6px;
391
+                text-align: center;
392
+
393
+                & > .tdiv {
394
+                  overflow: hidden;
395
+
396
+                  .name {
397
+                    float: left;
398
+                  }
399
+
400
+                  .num {
401
+                    float: right;
402
+                    font-size: 12px;
403
+
404
+                    span {
405
+                      color: @primary-color;
406
+                      font-size: 14px;
407
+                    }
408
+                  }
409
+                }
410
+
411
+                .notOpen {
412
+                  color: #666;
413
+                  font-size: 12px;
414
+
415
+                  img {
416
+                    margin-bottom: 8px;
417
+                  }
418
+                }
419
+              }
420
+            }
421
+          }
422
+        }
423
+
424
+        .title {
425
+          color: #333;
426
+          text-align: center;
427
+        }
428
+
429
+        .conditions {
430
+          & > .ant-row {
431
+            margin: 8px 0;
432
+
433
+            .ant-row {
434
+              .ant-col-6 {
435
+                margin: 2px 0;
436
+              }
437
+            }
438
+
439
+            .checkAll {
440
+              width: 100%;
441
+              border-bottom: 1px solid rgb(233, 233, 233);
442
+              color: @primary-color;
443
+            }
444
+          }
445
+        }
446
+
447
+        .btns {
448
+          padding: 5px 20px 0 20px;
449
+        }
450
+      }
451
+    }
452
+
453
+    .right {
454
+      // opacity: .5;
455
+      width: 80px;
456
+      float: left;
457
+      background: rgba(255, 255, 255, 0.5);
458
+      border-radius: 5px 0 0 5px;
459
+      position: relative;
460
+      z-index: 98;
461
+
462
+      .fixedMenu {
463
+        border: 1px solid #e5e9ed;
464
+        color: rgba(0, 128, 0, 0.5);
465
+        background: rgba(255, 255, 255, 0.5);
466
+        text-align: center;
467
+        border-radius: 5px 0 0 5px;
468
+        // box-shadow: -3px 4px 15px rgba(234, 233, 233, .5);
469
+
470
+        &.hujiaozhongxin {
471
+          margin-bottom: 5px;
472
+        }
473
+
474
+        .menuItems {
475
+          .item {
476
+            height: 35px;
477
+            line-height: 35px;
478
+            padding: 0 6px;
479
+            cursor: default;
480
+            border-bottom: 1px solid #e5e9ed;
481
+            user-select: none;
482
+
483
+            &.checked {
484
+              background: #fff;
485
+              color: #52ab77;
486
+              opacity: 1;
487
+              box-shadow: -3px 4px 7px #eae9e9;
488
+            }
489
+          }
490
+
491
+          .others {
492
+            transition: height 0.4s linear;
493
+            overflow: hidden;
494
+          }
495
+        }
496
+
497
+        .arrow {
498
+          cursor: pointer;
499
+        }
500
+      }
501
+    }
502
+  }
503
+}

+ 540 - 0
src/app/views/specimen-view2/specimen-view2.component.ts

@@ -0,0 +1,540 @@
1
+import { Component, OnInit, ViewChild, OnDestroy } from "@angular/core";
2
+import { MainService } from "../../services/main.service";
3
+import { Router } from "@angular/router";
4
+import { OverlayScrollbarsComponent } from "overlayscrollbars-ngx";
5
+import { startOfDay, format, endOfDay } from "date-fns";
6
+
7
+@Component({
8
+  selector: "app-specimen-view2",
9
+  templateUrl: "./specimen-view2.component.html",
10
+  styleUrls: ["./specimen-view2.component.less"],
11
+})
12
+export class SpecimenView2Component implements OnInit, OnDestroy {
13
+  @ViewChild("osComponentRef1", {
14
+    read: OverlayScrollbarsComponent,
15
+    static: false,
16
+  })
17
+  osComponentRef1: OverlayScrollbarsComponent;
18
+  @ViewChild("osComponentRef2", {
19
+    read: OverlayScrollbarsComponent,
20
+    static: false,
21
+  })
22
+  osComponentRef2: OverlayScrollbarsComponent;
23
+  @ViewChild("osComponentRef3", {
24
+    read: OverlayScrollbarsComponent,
25
+    static: false,
26
+  })
27
+  osComponentRef3: OverlayScrollbarsComponent;
28
+  @ViewChild("osComponentRef4", {
29
+    read: OverlayScrollbarsComponent,
30
+    static: false,
31
+  })
32
+  osComponentRef4: OverlayScrollbarsComponent;
33
+  @ViewChild("osComponentRef5", {
34
+    read: OverlayScrollbarsComponent,
35
+    static: false,
36
+  })
37
+  osComponentRef5: OverlayScrollbarsComponent;
38
+  constructor(private mainService: MainService, public router: Router) {}
39
+  // 今日药单量
40
+  todayTotal: undefined;
41
+  // 今日已完成
42
+  todayComplete: undefined;
43
+  //待配药数据
44
+  // 待配药
45
+  printPharmacyList = []; //数据列表
46
+  printPharmacyIdx = 0; //页码
47
+  printPharmacyTotal = 0; //总数
48
+  printPharmacyFlag = false; //是否查看更多
49
+  printPharmacySearchKey = ""; //搜索的内容
50
+  printPharmacyLoad = false; //按钮的loading
51
+  // 配药中列表
52
+  waitPharmacyList = [];
53
+  waitPharmacyIdx = 0;
54
+  waitPharmacyTotal = 0;
55
+  waitPharmacyFlag = false;
56
+  waitPharmacySearchKey = "";
57
+  waitPharmacyLoad = false;
58
+  // 核对中列表
59
+  pharmacyList = [];
60
+  pharmacyIdx = 0;
61
+  pharmacyTotal = 0;
62
+  pharmacyFlag = false;
63
+  pharmacySearchKey = "";
64
+  pharmacyLoad = false;
65
+  // 配送中列表
66
+  distributionList = [];
67
+  distributionIdx = 0;
68
+  distributionTotal = 0;
69
+  distributionFlag = false;
70
+  distributionSearchKey = "";
71
+  distributionLoad = false;
72
+  // 已完成列表
73
+  completedList = [];
74
+  completedIdx = 0;
75
+  completedTotal = 0;
76
+  completedFlag = false;
77
+  completedSearchKey = "";
78
+  completedLoad = false;
79
+
80
+  // other
81
+  loginUser: any = localStorage.getItem("user")
82
+    ? JSON.parse(localStorage.getItem("user")).user
83
+    : null; //登录人信息
84
+
85
+  logTimer = null; //定时器
86
+  logTime = 0; //自动刷新秒数
87
+  logTimeConst = 60; //自动刷新秒数
88
+
89
+  time = new Date().getTime(); // 时间戳
90
+  timer = null; // 时间定时器
91
+
92
+  ngOnDestroy() {
93
+    clearTimeout(this.timer);
94
+    clearTimeout(this.logTimer);
95
+  }
96
+
97
+  ngOnInit() {
98
+    this.runTime();
99
+    // 统计
100
+    this.total();
101
+    // 切换科室
102
+    this.changeKs();
103
+    // 代收急查标本(标本信息)列表
104
+    this.getPharmacyList(this.printPharmacyIdx, 'delegation', this.printPharmacySearchKey);
105
+    // 已收取(工单信息)列表
106
+    this.getPharmacyList(this.waitPharmacyIdx, 'take', this.waitPharmacySearchKey);
107
+    // 中转标本(标本统计信息)列表
108
+    this.getPharmacyList(this.pharmacyIdx, 'trans', this.pharmacySearchKey);
109
+    // 中转配送中(工单信息)列表
110
+    this.getPharmacyList(this.distributionIdx, 'trans_send', this.distributionSearchKey);
111
+    // 异常标本(标本信息)列表
112
+    this.getPharmacyList(this.completedIdx, 'error', this.completedSearchKey);
113
+    this.initRole();
114
+    // 自动刷新倒计时 start
115
+    this.autoUpdate();
116
+    // 自动刷新倒计时 end
117
+  }
118
+  // 当前时间日期
119
+  runTime() {
120
+    clearTimeout(this.timer);
121
+    this.timer = setTimeout(() => {
122
+      this.time = Date.now();
123
+      this.runTime();
124
+    }, 500);
125
+  }
126
+  // 统计
127
+  total() {
128
+    let launch = JSON.parse(localStorage.getItem("user")).user.dept.id;
129
+    let startTime = format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
130
+    let endTime = format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
131
+    let postData = {
132
+      startTime,
133
+      endTime,
134
+      launch,
135
+    };
136
+
137
+    this.mainService.getDrugsBagStateCount(postData).subscribe((res: any) => {
138
+      if (res.status == 200) {
139
+        this.todayTotal = res.countMap.todayTotal;
140
+        this.todayComplete = res.countMap.todayComplete;
141
+      }
142
+    });
143
+  }
144
+  // 查看工单详情
145
+  goToOrderDetail(item){
146
+    console.log(item);
147
+    this.router.navigateByUrl(`specimenView2/detailSample/${item.id}`);
148
+  }
149
+  // 查看流程信息弹窗
150
+  logPromptModalShow = false; //弹窗开关
151
+  scode = ""; //查看记录携带
152
+  showLogs(data) {
153
+    clearInterval(this.logTimer);
154
+    this.scode = data.scode;
155
+    this.logPromptModalShow = true;
156
+  }
157
+  // 关闭流程信息弹窗
158
+  closeModelLog(e) {
159
+    this.logPromptModalShow = JSON.parse(e).show;
160
+    this.autoUpdate(false);
161
+  }
162
+  // 查看标本列表弹窗
163
+  spePromptModalShow = false; //弹窗开关
164
+  checkDeptId = ""; //检查科室id
165
+  printDate = ""; //采集日期
166
+  showSpeList(data) {
167
+    clearInterval(this.logTimer);
168
+    this.checkDeptId = data.check_dept_id;
169
+    this.printDate = data.startTime;
170
+    this.spePromptModalShow = true;
171
+  }
172
+  // 关闭标本列表弹窗
173
+  closeModelSpe(e) {
174
+    this.spePromptModalShow = JSON.parse(e).show;
175
+    this.autoUpdate(false);
176
+  }
177
+  // 自动刷新倒计时
178
+  autoUpdate(flag = true) {
179
+    if (flag) {
180
+      this.logTime = this.logTimeConst;
181
+    }
182
+    clearInterval(this.logTimer);
183
+    this.logTimer = setInterval(() => {
184
+      this.logTime--;
185
+      if (this.logTime === 0) {
186
+        this.logTime = this.logTimeConst;
187
+        // 代收急查标本(标本信息)列表
188
+        this.getPharmacyList(0, 'delegation', this.printPharmacySearchKey);
189
+        // 已收取(工单信息)列表
190
+        this.getPharmacyList(0, 'take', this.waitPharmacySearchKey);
191
+        // 中转标本(标本统计信息)列表
192
+        this.getPharmacyList(0, 'trans', this.pharmacySearchKey);
193
+        // 中转配送中(工单信息)列表
194
+        this.getPharmacyList(0, 'trans_send', this.distributionSearchKey);
195
+        // 异常标本(标本信息)列表
196
+        this.getPharmacyList(0, 'error', this.completedSearchKey);
197
+      }
198
+    }, 1000);
199
+  }
200
+  // 药房端药房列表查询、搜索
201
+  // 1为pc待打印状态、2为pc配药中、3为pc核对中、4为pc配送中
202
+  // searchKey  为搜索的关键字,没有就不传
203
+  loading1 = false;
204
+  loading2 = false;
205
+  loading3 = false;
206
+  loading4 = false;
207
+  loading5 = false;
208
+  getPharmacyList(idx, type, searchKey) {
209
+    let hosId = JSON.parse(localStorage.getItem("user")).user.currentHospital.id;
210
+    switch (type) {
211
+      case 'delegation':
212
+        this.loading1 = true;
213
+        break;
214
+      case 'take':
215
+        this.loading2 = true;
216
+        break;
217
+      case 'trans':
218
+        this.loading3 = true;
219
+        break;
220
+      case 'trans_send':
221
+        this.loading4 = true;
222
+        break;
223
+      case 'error':
224
+        this.loading5 = true;
225
+        break;
226
+    }
227
+    let postData = {
228
+      viewType: type,
229
+      keyWord: searchKey,
230
+      hosId,
231
+    };
232
+    this.mainService
233
+      .specimenView2(postData)
234
+      .subscribe((result) => {
235
+        switch (type) {
236
+          case 'delegation':
237
+            this.loading1 = false;
238
+            break;
239
+          case 'take':
240
+            this.loading2 = false;
241
+            break;
242
+          case 'trans':
243
+            this.loading3 = false;
244
+            break;
245
+          case 'trans_send':
246
+            this.loading4 = false;
247
+            break;
248
+          case 'error':
249
+            this.loading5 = false;
250
+            break;
251
+        }
252
+        if (result["state"] == 200) {
253
+          switch (type) {
254
+            case 'delegation':
255
+              // 总数
256
+              this.printPharmacyTotal = result.totalNum;
257
+              // 隐藏按钮的loading
258
+              this.printPharmacyLoad = false;
259
+              // 查看更多,是否显示
260
+              if (result["data"].length < 10) {
261
+                this.printPharmacyFlag = false;
262
+              } else if (result["data"].length === 0 && idx === 0) {
263
+                this.printPharmacyFlag = false;
264
+              } else {
265
+                this.printPharmacyFlag = true;
266
+              }
267
+              // 列表数据合并
268
+              if (idx === 0) {
269
+                this.printPharmacyList = result["data"];
270
+              } else {
271
+                this.printPharmacyList = [
272
+                  ...this.printPharmacyList,
273
+                  ...result["data"],
274
+                ];
275
+              }
276
+              break;
277
+            case 'take':
278
+              this.waitPharmacyTotal = result.totalNum;
279
+              this.waitPharmacyLoad = false;
280
+              if (result["data"].length < 10) {
281
+                this.waitPharmacyFlag = false;
282
+              } else if (result["data"].length === 0 && idx === 0) {
283
+                this.waitPharmacyFlag = false;
284
+              } else {
285
+                this.waitPharmacyFlag = true;
286
+              }
287
+              if (idx === 0) {
288
+                this.waitPharmacyList = result["data"];
289
+              } else {
290
+                this.waitPharmacyList = [
291
+                  ...this.waitPharmacyList,
292
+                  ...result["data"],
293
+                ];
294
+              }
295
+              break;
296
+            case 'trans':
297
+              this.pharmacyTotal = result.totalNum;
298
+              this.pharmacyLoad = false;
299
+              if (result["data"].length < 10) {
300
+                this.pharmacyFlag = false;
301
+              } else if (result["data"].length === 0 && idx === 0) {
302
+                this.pharmacyFlag = false;
303
+              } else {
304
+                this.pharmacyFlag = true;
305
+              }
306
+              if (idx === 0) {
307
+                this.pharmacyList = result["data"];
308
+              } else {
309
+                this.pharmacyList = [...this.pharmacyList, ...result["data"]];
310
+              }
311
+              break;
312
+            case 'trans_send':
313
+              this.distributionTotal = result.totalNum;
314
+              this.distributionLoad = false;
315
+              if (result["data"].length < 10) {
316
+                this.distributionFlag = false;
317
+              } else if (result["data"].length === 0 && idx === 0) {
318
+                this.distributionFlag = false;
319
+              } else {
320
+                this.distributionFlag = true;
321
+              }
322
+              // 处理数据
323
+              result["data"].forEach(v=>{
324
+                v.deptList = v.deptList?v.deptList.join(','):'';
325
+              })
326
+              if (idx === 0) {
327
+                this.distributionList = result["data"];
328
+              } else {
329
+                this.distributionList = [
330
+                  ...this.distributionList,
331
+                  ...result["data"],
332
+                ];
333
+              }
334
+              break;
335
+            case 'error':
336
+              this.completedTotal = result.totalNum;
337
+              this.completedLoad = false;
338
+              if (result["data"].length < 10) {
339
+                this.completedFlag = false;
340
+              } else if (result["data"].length === 0 && idx === 0) {
341
+                this.completedFlag = false;
342
+              } else {
343
+                this.completedFlag = true;
344
+              }
345
+              if (idx === 0) {
346
+                this.completedList = result["data"];
347
+              } else {
348
+                this.completedList = [...this.completedList, ...result["data"]];
349
+              }
350
+              break;
351
+          }
352
+        }
353
+      });
354
+  }
355
+  // 加载更多
356
+  loadMore(type) {
357
+    switch (type) {
358
+      case 'delegation':
359
+        this.printPharmacyIdx++;
360
+        this.printPharmacyLoad = true;
361
+        this.getPharmacyList(
362
+          this.printPharmacyIdx,
363
+          type,
364
+          this.printPharmacySearchKey
365
+        );
366
+        break;
367
+      case 'take':
368
+        this.waitPharmacyIdx++;
369
+        this.waitPharmacyLoad = true;
370
+        this.getPharmacyList(
371
+          this.waitPharmacyIdx,
372
+          type,
373
+          this.waitPharmacySearchKey
374
+        );
375
+        break;
376
+      case 'trans':
377
+        this.pharmacyIdx++;
378
+        this.pharmacyLoad = true;
379
+        this.getPharmacyList(this.pharmacyIdx, type, this.pharmacySearchKey);
380
+        break;
381
+      case 'trans_send':
382
+        this.distributionIdx++;
383
+        this.distributionLoad = true;
384
+        this.getPharmacyList(
385
+          this.distributionIdx,
386
+          type,
387
+          this.distributionSearchKey
388
+        );
389
+        break;
390
+      case 'error':
391
+        this.completedIdx++;
392
+        this.completedLoad = true;
393
+        this.getPharmacyList(this.completedIdx, type, this.completedSearchKey);
394
+        break;
395
+    }
396
+  }
397
+  // 搜索关键词
398
+  searchKeyHandle(type) {
399
+    switch (type) {
400
+      case 'delegation':
401
+        this.printPharmacyIdx = 0; //页码重置
402
+        this.printPharmacyList = []; //列表重置
403
+        this.getPharmacyList(
404
+          this.printPharmacyIdx,
405
+          type,
406
+          this.printPharmacySearchKey
407
+        );
408
+        break;
409
+      case 'take':
410
+        this.waitPharmacyIdx = 0; //页码重置
411
+        this.waitPharmacyList = []; //列表重置
412
+        this.getPharmacyList(
413
+          this.waitPharmacyIdx,
414
+          type,
415
+          this.waitPharmacySearchKey
416
+        );
417
+        break;
418
+      case 'trans':
419
+        this.pharmacyIdx = 0; //页码重置
420
+        this.pharmacyList = []; //列表重置
421
+        this.getPharmacyList(this.pharmacyIdx, type, this.pharmacySearchKey);
422
+        break;
423
+      case 'trans_send':
424
+        this.distributionIdx = 0; //页码重置
425
+        this.distributionList = []; //列表重置
426
+        this.getPharmacyList(
427
+          this.distributionIdx,
428
+          type,
429
+          this.distributionSearchKey
430
+        );
431
+        break;
432
+      case 'error':
433
+        this.completedIdx = 0; //页码重置
434
+        this.completedList = []; //列表重置
435
+        this.getPharmacyList(this.completedIdx, type, this.completedSearchKey);
436
+        break;
437
+    }
438
+  }
439
+  // 退出
440
+  logOut(): void {
441
+    // 假退出
442
+    localStorage.removeItem("user");
443
+    localStorage.removeItem("menu");
444
+    localStorage.removeItem("phones");
445
+    localStorage.removeItem("index");
446
+    this.router.navigateByUrl("login");
447
+    // 假退出
448
+    this.mainService.logOut().subscribe((data) => {
449
+      if (data.status == 200) {
450
+        localStorage.removeItem("user");
451
+        localStorage.removeItem("menu");
452
+        localStorage.removeItem("phones");
453
+        localStorage.removeItem("index");
454
+        this.router.navigateByUrl("login");
455
+      }
456
+    });
457
+  }
458
+
459
+  // 右侧菜单
460
+  showLastItems: boolean = false;
461
+  // 下拉
462
+  fixedMenuXiala() {
463
+    this.showLastItems = true;
464
+  }
465
+
466
+  // 上拉
467
+  fixedMenuShangla() {
468
+    this.showLastItems = false;
469
+  }
470
+
471
+  mainRole: boolean = false; //回到系统管理权限
472
+  initRole() {
473
+    let menus = JSON.parse(localStorage.getItem("menu"));
474
+    console.log("菜单数量" + menus.length);
475
+    if (menus.length >= 2) {
476
+      this.mainRole = true;
477
+      return;
478
+    }
479
+  }
480
+
481
+  // 切换右侧菜单Tab
482
+  fixedTab: string = "";
483
+  checkFixedTab(type: string) {
484
+    if (type == "toSystem") {
485
+      this.router.navigateByUrl("main");
486
+    }
487
+    if (this.fixedTab == type) {
488
+      this.fixedTab = "";
489
+    } else {
490
+      this.fixedTab = type;
491
+    }
492
+  }
493
+  //药房端科室切换
494
+  changeShow = true;
495
+  closeTime = 3;
496
+  closeTimeFlag = 0;
497
+  hsPromptModalShow: boolean = true; //科室切换提示框是否展示
498
+  timerCloseTime = null;
499
+  deptDisplay = 1; //护士端是否显示可以别名,1是显示科室名称,2是显示科室别名
500
+  //子传父接收
501
+  closeModelHs(e) {
502
+    this.hsPromptModalShow = JSON.parse(e).show;
503
+    this.changeShow = JSON.parse(e).changeShow;
504
+  }
505
+  //子传父接收
506
+  clearModelHs(e) {
507
+    if (JSON.parse(e).clear === true) {
508
+      clearInterval(this.timerCloseTime);
509
+    }
510
+    this.changeShow = JSON.parse(e).changeShow;
511
+  }
512
+  // 头部切换科室
513
+  changeKsNow() {
514
+    this.hsPromptModalShow = true;
515
+    clearInterval(this.timerCloseTime);
516
+    this.changeShow = false;
517
+  }
518
+  // 切换科室
519
+  changeKs() {
520
+    this.hsPromptModalShow = true;
521
+    // (1)	当用户设置为正数时,用户必须查看此窗体指定秒数。
522
+    // (2)	当用户设置为负数时,用户可点击知道了也可倒计时自动关闭。
523
+    // (3)	如果用户填写0则为无自动关闭和强制查看时间。
524
+    if (this.closeTimeFlag === 0) {
525
+      return;
526
+    }
527
+    this.closeTime = Math.abs(this.closeTimeFlag);
528
+    clearInterval(this.timerCloseTime);
529
+    this.timerCloseTime = setInterval(() => {
530
+      this.closeTime = Math.max(--this.closeTime, 0);
531
+      if (this.closeTime === 0) {
532
+        if (this.closeTimeFlag <= 0) {
533
+          this.hsPromptModalShow = false;
534
+        }
535
+        clearInterval(this.timerCloseTime);
536
+      }
537
+    }, 1000);
538
+  }
539
+}
540
+

+ 17 - 0
src/app/views/specimen-view2/specimen-view2.module.ts

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

+ 29 - 6
src/assets/iconfont/demo_index.html

@@ -3,8 +3,8 @@
3 3
 <head>
4 4
   <meta charset="utf-8"/>
5 5
   <title>iconfont Demo</title>
6
-  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i2/O1CN01ZyAlrn1MwaMhqz36G_!!6000000001499-73-tps-64-64.ico" type="image/x-icon"/>
7
-  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01EYTRnJ297D6vehehJ_!!6000000008020-55-tps-64-64.svg"/>
6
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
7
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
8 8
   <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
9 9
   <link rel="stylesheet" href="demo.css">
10 10
   <link rel="stylesheet" href="iconfont.css">
@@ -55,6 +55,12 @@
55 55
           <ul class="icon_lists dib-box">
56 56
           
57 57
             <li class="dib">
58
+              <span class="icon icon_transport">&#xea66;</span>
59
+                <div class="name">单箭头,长箭头,右</div>
60
+                <div class="code-name">&amp;#xea66;</div>
61
+              </li>
62
+          
63
+            <li class="dib">
58 64
               <span class="icon icon_transport">&#xe6b6;</span>
59 65
                 <div class="name">急</div>
60 66
                 <div class="code-name">&amp;#xe6b6;</div>
@@ -660,10 +666,10 @@
660 666
 <pre><code class="language-css"
661 667
 >@font-face {
662 668
   font-family: 'icon_transport';
663
-  src: url('iconfont.woff2?t=1624348715748') format('woff2'),
664
-       url('iconfont.woff?t=1624348715748') format('woff'),
665
-       url('iconfont.ttf?t=1624348715748') format('truetype'),
666
-       url('iconfont.svg?t=1624348715748#icon_transport') format('svg');
669
+  src: url('iconfont.woff2?t=1663987617832') format('woff2'),
670
+       url('iconfont.woff?t=1663987617832') format('woff'),
671
+       url('iconfont.ttf?t=1663987617832') format('truetype'),
672
+       url('iconfont.svg?t=1663987617832#icon_transport') format('svg');
667 673
 }
668 674
 </code></pre>
669 675
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -690,6 +696,15 @@
690 696
         <ul class="icon_lists dib-box">
691 697
           
692 698
           <li class="dib">
699
+            <span class="icon icon_transport transport-arrow-right-full"></span>
700
+            <div class="name">
701
+              单箭头,长箭头,右
702
+            </div>
703
+            <div class="code-name">.transport-arrow-right-full
704
+            </div>
705
+          </li>
706
+          
707
+          <li class="dib">
693 708
             <span class="icon icon_transport transport-zu1468"></span>
694 709
             <div class="name">
695 710
@@ -1600,6 +1615,14 @@
1600 1615
           
1601 1616
             <li class="dib">
1602 1617
                 <svg class="icon svg-icon" aria-hidden="true">
1618
+                  <use xlink:href="#transport-arrow-right-full"></use>
1619
+                </svg>
1620
+                <div class="name">单箭头,长箭头,右</div>
1621
+                <div class="code-name">#transport-arrow-right-full</div>
1622
+            </li>
1623
+          
1624
+            <li class="dib">
1625
+                <svg class="icon svg-icon" aria-hidden="true">
1603 1626
                   <use xlink:href="#transport-zu1468"></use>
1604 1627
                 </svg>
1605 1628
                 <div class="name">急</div>

+ 8 - 4
src/assets/iconfont/iconfont.css

@@ -1,9 +1,9 @@
1 1
 @font-face {
2 2
   font-family: "icon_transport"; /* Project id 2522689 */
3
-  src: url('iconfont.woff2?t=1624348715748') format('woff2'),
4
-       url('iconfont.woff?t=1624348715748') format('woff'),
5
-       url('iconfont.ttf?t=1624348715748') format('truetype'),
6
-       url('iconfont.svg?t=1624348715748#icon_transport') format('svg');
3
+  src: url('iconfont.woff2?t=1663987617832') format('woff2'),
4
+       url('iconfont.woff?t=1663987617832') format('woff'),
5
+       url('iconfont.ttf?t=1663987617832') format('truetype'),
6
+       url('iconfont.svg?t=1663987617832#icon_transport') format('svg');
7 7
 }
8 8
 
9 9
 .icon_transport {
@@ -14,6 +14,10 @@
14 14
   -moz-osx-font-smoothing: grayscale;
15 15
 }
16 16
 
17
+.transport-arrow-right-full:before {
18
+  content: "\ea66";
19
+}
20
+
17 21
 .transport-zu1468:before {
18 22
   content: "\e6b6";
19 23
 }

File diff suppressed because it is too large
+ 1 - 1
src/assets/iconfont/iconfont.js


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

@@ -6,6 +6,13 @@
6 6
   "description": "",
7 7
   "glyphs": [
8 8
     {
9
+      "icon_id": "18175500",
10
+      "name": "单箭头,长箭头,右",
11
+      "font_class": "arrow-right-full",
12
+      "unicode": "ea66",
13
+      "unicode_decimal": 60006
14
+    },
15
+    {
9 16
       "icon_id": "19675369",
10 17
       "name": "急",
11 18
       "font_class": "zu1468",

File diff suppressed because it is too large
+ 215 - 318
src/assets/iconfont/iconfont.svg


BIN
src/assets/iconfont/iconfont.ttf


BIN
src/assets/iconfont/iconfont.woff


BIN
src/assets/iconfont/iconfont.woff2