浏览代码

解决冲突

maotao 6 月之前
父节点
当前提交
aadbb63971
共有 62 个文件被更改,包括 5917 次插入1339 次删除
  1. 6 2
      angular.json
  2. 27 0
      package-lock.json
  3. 1 0
      package.json
  4. 68 0
      src/app/components/bind-extension-number/bind-extension-number.component.html
  5. 192 0
      src/app/components/bind-extension-number/bind-extension-number.component.less
  6. 191 0
      src/app/components/bind-extension-number/bind-extension-number.component.ts
  7. 20 0
      src/app/components/bind-extension-number/bind-extension-number.module.ts
  8. 4 1
      src/app/components/configurationCenter/configuration-callcenter/configuration-callcenter.component.html
  9. 2 4
      src/app/components/configurationCenter/configuration-callcenter/configuration-callcenter.component.ts
  10. 7 12
      src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.component.ts
  11. 20 0
      src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.module.ts
  12. 4 11
      src/app/components/incidentManagement/incident-detail/incident-detail.component.ts
  13. 1 1
      src/app/components/incidentManagement/incident-handle/incident-handle.component.ts
  14. 14 0
      src/app/components/incidentManagement/incident-recording/incident-recording.component.html
  15. 173 0
      src/app/components/incidentManagement/incident-recording/incident-recording.component.less
  16. 29 0
      src/app/components/incidentManagement/incident-recording/incident-recording.component.ts
  17. 20 0
      src/app/components/incidentManagement/incident-recording/incident-recording.module.ts
  18. 77 0
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.html
  19. 240 0
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.less
  20. 100 0
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.ts
  21. 22 0
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.module.ts
  22. 73 0
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.html
  23. 240 0
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.less
  24. 181 0
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.ts
  25. 24 0
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.module.ts
  26. 37 0
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.html
  27. 155 0
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.less
  28. 123 0
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.ts
  29. 24 0
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.module.ts
  30. 0 1
      src/app/services/httpInterceptor.service.ts
  31. 1 1
      src/app/services/main.service.ts
  32. 19 0
      src/app/services/websocket-hjzx.service.ts
  33. 111 0
      src/app/services/websocket-incoming.service.ts
  34. 7 0
      src/app/services/websocket-phone.service.ts
  35. 6 0
      src/app/views/data-dictionary/data-dictionary.component.ts
  36. 362 701
      src/app/views/fuwutai/fuwutai.component.html
  37. 122 13
      src/app/views/fuwutai/fuwutai.component.less
  38. 1024 357
      src/app/views/fuwutai/fuwutai.component.ts
  39. 12 0
      src/app/views/fuwutai/fuwutai.module.ts
  40. 0 2
      src/app/views/hushijiandan/hushijiandan.component.ts
  41. 1 1
      src/app/views/incident-config/incident-config.component.html
  42. 11 0
      src/app/views/incident-config/incident-config.component.ts
  43. 3 3
      src/app/views/incident-config/incident-config.module.ts
  44. 1 1
      src/app/views/inspection-plan-config/inspection-plan-config.component.ts
  45. 1 0
      src/app/views/login/login.component.html
  46. 33 0
      src/app/views/login/login.component.ts
  47. 0 2
      src/app/views/main/main.component.ts
  48. 1 1
      src/app/views/other-config/other-config.component.html
  49. 6 1
      src/app/views/other-config/other-config.component.ts
  50. 3 1
      src/app/views/other-config/other-config.module.ts
  51. 72 74
      src/app/views/pathology/pathology.component.ts
  52. 66 68
      src/app/views/pathologyScan/pathologyScan.component.ts
  53. 0 2
      src/app/views/pharmacy/pharmacy.component.ts
  54. 0 2
      src/app/views/pharmacy2/pharmacy2.component.ts
  55. 28 28
      src/app/views/repository-manage/repository-manage.component.ts
  56. 35 37
      src/app/views/specimen-room-view/specimen-room-view.component.ts
  57. 0 2
      src/app/views/specimen-view2/specimen-view2.component.ts
  58. 3 3
      src/app/views/users-management/users-management.component.ts
  59. 1 0
      src/assets/js/http.ts
  60. 1473 0
      src/assets/libs/TLWebSocketAgent.js
  61. 418 0
      src/assets/libs/ola_api.js
  62. 22 7
      src/common.less

+ 6 - 2
angular.json

@@ -39,7 +39,9 @@
39 39
             ],
40 40
             "scripts": [
41 41
               "node_modules/echarts/dist/echarts.min.js",
42
-              "./node_modules/swiper/swiper-bundle.min.js"
42
+              "./node_modules/swiper/swiper-bundle.min.js",
43
+              "src/assets/libs/TLWebSocketAgent.js",
44
+              "src/assets/libs/ola_api.js"
43 45
             ]
44 46
           },
45 47
           "configurations": {
@@ -110,7 +112,9 @@
110 112
             ],
111 113
             "scripts": [
112 114
               "node_modules/echarts/dist/echarts.min.js",
113
-              "./node_modules/swiper/swiper-bundle.min.js"
115
+              "./node_modules/swiper/swiper-bundle.min.js",
116
+              "src/assets/libs/TLWebSocketAgent.js",
117
+              "src/assets/libs/ola_api.js"
114 118
             ]
115 119
           }
116 120
         },

+ 27 - 0
package-lock.json

@@ -32,6 +32,7 @@
32 32
         "ngx-echarts": "^4.2.2",
33 33
         "ngx-print": "~1.2.1",
34 34
         "ngx-sortablejs": "^3.1.3",
35
+        "ngx-virtual-scroller": "^4.0.3",
35 36
         "npm": "^6.14.15",
36 37
         "overlayscrollbars": "^1.11.0",
37 38
         "overlayscrollbars-ngx": "^0.1.1",
@@ -829,6 +830,12 @@
829 830
         "npm": ">= 6.2.0"
830 831
       }
831 832
     },
833
+    "node_modules/@tweenjs/tween.js": {
834
+      "version": "17.4.0",
835
+      "resolved": "https://registry.npmmirror.com/@tweenjs/tween.js/-/tween.js-17.4.0.tgz",
836
+      "integrity": "sha512-J3fzl1F6wvh8KXVVcIuHN12xi1ZDcPA/0Vix+ZcJYwZWVHUwfIqfvzYXXEw7ybeev6477KCTt9fKydU+ajUqcg==",
837
+      "license": "MIT"
838
+    },
832 839
     "node_modules/@types/big.js": {
833 840
       "version": "6.2.2",
834 841
       "resolved": "https://registry.npmmirror.com/@types/big.js/-/big.js-6.2.2.tgz",
@@ -947,6 +954,12 @@
947 954
       "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==",
948 955
       "dev": true
949 956
     },
957
+    "node_modules/@types/tween.js": {
958
+      "version": "17.2.0",
959
+      "resolved": "https://registry.npmmirror.com/@types/tween.js/-/tween.js-17.2.0.tgz",
960
+      "integrity": "sha512-mOsqurEtFEzwgkVc/jDVE2XrjZBYTbrmDUyCr9GXmnfc6q5otokxFtKvSY/B21zgz9LVRIvRTawKczjKi57wrA==",
961
+      "license": "MIT"
962
+    },
950 963
     "node_modules/@types/webpack-sources": {
951 964
       "version": "0.1.12",
952 965
       "resolved": "https://registry.npmmirror.com/@types/webpack-sources/-/webpack-sources-0.1.12.tgz",
@@ -7652,6 +7665,20 @@
7652 7665
         "sortablejs": ">=1.7.0"
7653 7666
       }
7654 7667
     },
7668
+    "node_modules/ngx-virtual-scroller": {
7669
+      "version": "4.0.3",
7670
+      "resolved": "https://registry.npmmirror.com/ngx-virtual-scroller/-/ngx-virtual-scroller-4.0.3.tgz",
7671
+      "integrity": "sha512-JBqUJ/f7GRCZDnI/JeiFoTmYR8rC/Hyv8L5I7ImePM6f/hwiFNRsrK8Abdd0E3TwklwgmZAK875te9XQJrgsyQ==",
7672
+      "license": "MIT",
7673
+      "dependencies": {
7674
+        "@tweenjs/tween.js": "17.4.0",
7675
+        "@types/tween.js": "17.2.0"
7676
+      },
7677
+      "peerDependencies": {
7678
+        "@angular/core": ">=6.0.0",
7679
+        "tslib": "^1.10.0"
7680
+      }
7681
+    },
7655 7682
     "node_modules/nice-try": {
7656 7683
       "version": "1.0.5",
7657 7684
       "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz",

+ 1 - 0
package.json

@@ -40,6 +40,7 @@
40 40
     "ngx-echarts": "^4.2.2",
41 41
     "ngx-print": "~1.2.1",
42 42
     "ngx-sortablejs": "^3.1.3",
43
+    "ngx-virtual-scroller": "^4.0.3",
43 44
     "npm": "^6.14.15",
44 45
     "overlayscrollbars": "^1.11.0",
45 46
     "overlayscrollbars-ngx": "^0.1.1",

+ 68 - 0
src/app/components/bind-extension-number/bind-extension-number.component.html

@@ -0,0 +1,68 @@
1
+<!-- 绑定分机 -->
2
+<div class="init recallOrder display_flex justify-content_flex-center align-items_center">
3
+  <div class="con modalBody">
4
+    <div class="title">
5
+      绑定分机<i class="icon_transport transport-guanbi" (click)="cancelInit()"></i>
6
+    </div>
7
+    <div class="content">
8
+      <div class="scopeTab">
9
+        <div class="scopeTabItem" [ngClass]="{ active: item.value == activeScopeTab.value }" *ngFor="let item of scopeTabs" (click)="activeScopeTab = item">
10
+          <label nz-checkbox [(ngModel)]="item.checked" (ngModelChange)="changeFlag($event, item)">{{item.name}}</label>
11
+        </div>
12
+      </div>
13
+      <!-- 分机绑定 -->
14
+      <div class="conditions" *ngIf="activeScopeTab.value == 1">
15
+        <div nz-row class="row">
16
+          <div nz-col nzSpan="3" class="name">院区:</div>
17
+          <div nz-col nzSpan="21">
18
+            <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择院区" [(ngModel)]="formData1.hospital" (ngModelChange)="changeHospital($event)">
19
+              <ng-container *ngFor="let option of hospitalList">
20
+                <nz-option *ngIf="!isLoading" [nzLabel]="option.hosName" [nzValue]="option.id"></nz-option>
21
+              </ng-container>
22
+              <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
23
+                <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
24
+              </nz-option>
25
+            </nz-select>
26
+          </div>
27
+        </div>
28
+        <div nz-row class="row">
29
+          <div nz-col nzSpan="3" class="name">分机号:</div>
30
+          <div nz-col nzSpan="21">
31
+            <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择分机号" [(ngModel)]="formData1.number">
32
+              <ng-container *ngFor="let option of phoneNumList">
33
+                <nz-option *ngIf="!isLoading" [nzLabel]="option.value" [nzValue]="option.value"></nz-option>
34
+              </ng-container>
35
+              <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
36
+                <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
37
+              </nz-option>
38
+            </nz-select>
39
+          </div>
40
+        </div>
41
+      </div>
42
+      <!-- 呼叫中心 -->
43
+      <div class="conditions" *ngIf="activeScopeTab.value == 2">
44
+        <div nz-row class="row">
45
+          <div nz-col nzSpan="3" class="name">分机号:</div>
46
+          <div nz-col nzSpan="21">
47
+            <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择分机号" [(ngModel)]="formData2.number">
48
+              <ng-container *ngFor="let option of hjzxCornetList">
49
+                <nz-option *ngIf="!isLoading" [nzLabel]="option.value" [nzValue]="option.value"></nz-option>
50
+              </ng-container>
51
+              <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
52
+                <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
53
+              </nz-option>
54
+            </nz-select>
55
+          </div>
56
+        </div>
57
+      </div>
58
+    </div>
59
+    <div class="btns display_flex justify-content_flex-center">
60
+      <button class="btn" nz-button nzType="primary" [nzLoading]="websocketLoading" (click)="saveOrderScope()">
61
+        {{activeScopeTab.value == 1 ? '绑定' : '签入'}}
62
+      </button>
63
+      <button class="btn cancel" nz-button nzType="default" (click)="cancelInit()">
64
+        取消
65
+      </button>
66
+    </div>
67
+  </div>
68
+</div>

+ 192 - 0
src/app/components/bind-extension-number/bind-extension-number.component.less

@@ -0,0 +1,192 @@
1
+@import "../../../../src/theme.less";
2
+:host {
3
+  ::ng-deep .ant-checkbox-wrapper + .ant-checkbox-wrapper{
4
+    margin-left: 0!important;
5
+  }
6
+  .formItem {
7
+    width: 290px;
8
+  }
9
+  .name{
10
+    line-height: 32px;
11
+  }
12
+  .row{
13
+    margin-bottom: 24px!important;
14
+  }
15
+  .required{
16
+    position: relative;
17
+    &::before{
18
+      font-family: icon_transport;
19
+      font-size: 10px;
20
+      content:'\e606';
21
+      color: red;
22
+      position: absolute;
23
+      right: 100%;
24
+      top: 50%;
25
+      transform: translateY(-50%);
26
+      margin-right: 2px;
27
+    }
28
+  }
29
+  // 撤回工单
30
+  .recallOrder {
31
+    position: fixed;
32
+    left: 0;
33
+    top: 0;
34
+    width: 100%;
35
+    height: 100%;
36
+    background: rgba(0, 0, 0, 0.4);
37
+    z-index: 9999999;
38
+
39
+    .modalBody {
40
+      width: 350px;
41
+      height: 220px;
42
+      background: #fff;
43
+      border-radius: 5px;
44
+      padding: 10px 20px;
45
+      color: #333;
46
+
47
+      .title {
48
+        width: 100%;
49
+        text-align: center;
50
+        font-size: 18px;
51
+        position: relative;
52
+
53
+        i {
54
+          position: absolute;
55
+          right: 0;
56
+          top: 0;
57
+          font-size: 20px;
58
+          color: #666;
59
+          cursor: pointer;
60
+          padding: 0 5px;
61
+        }
62
+      }
63
+
64
+      .content {
65
+        width: 310px;
66
+        height: 117px;
67
+        background: #f9fafb;
68
+        border: 1px solid #e5e9ed;
69
+        border-radius: 5px;
70
+        overflow: hidden;
71
+        margin-top: 12px;
72
+
73
+        div {
74
+          text-align: center;
75
+          margin: 0;
76
+
77
+          &.icon {
78
+            margin-top: 17px;
79
+
80
+            i {
81
+              color: #ff3b53;
82
+              font-size: 30px !important;
83
+
84
+              &.transport-wenhao {
85
+                color: #f5a523;
86
+              }
87
+            }
88
+          }
89
+
90
+          &.defeat {
91
+            color: #333;
92
+            font-size: 18px;
93
+          }
94
+
95
+          &:nth-child(3) {
96
+            font-size: 14px;
97
+            color: #666;
98
+          }
99
+        }
100
+
101
+        .conditions {
102
+          height: 235px;
103
+          overflow: auto;
104
+          padding: 48px 80px;
105
+
106
+          div {
107
+            text-align: left;
108
+          }
109
+        }
110
+      }
111
+
112
+      .btns {
113
+        button {
114
+          margin-top: 10px;
115
+          margin-left: 5px;
116
+        }
117
+
118
+        .recDelBtn {
119
+          width: 115px;
120
+        }
121
+      }
122
+    }
123
+  }
124
+
125
+  // 初始化设置
126
+  .init {
127
+    position: fixed;
128
+    left: 0;
129
+    top: 0;
130
+    width: 100%;
131
+    height: 100%;
132
+    background: rgba(0, 0, 0, 0.4);
133
+    z-index: 99;
134
+
135
+    .con {
136
+      width: 832px;
137
+      height: auto;
138
+      background: #fff;
139
+      border-radius: 5px;
140
+      padding: 10px 20px;
141
+      color: #333;
142
+
143
+      .content {
144
+        width: 100%;
145
+        height: auto;
146
+
147
+        .scopeTab{
148
+          display: flex;
149
+          height: 60px;
150
+          border-bottom: 1px solid #D9D9D9;
151
+          .scopeTabItem{
152
+            flex: 1;
153
+            display: flex;
154
+            justify-content: center;
155
+            align-items: center;
156
+            border-right: 1px solid #D9D9D9;
157
+            background-color: #fff;
158
+            cursor: pointer;
159
+            &:last-of-type{
160
+              border-right: none;
161
+            }
162
+            &.active{
163
+              background-color: #F0F6ED;
164
+            }
165
+          }
166
+        }
167
+
168
+        .remin {
169
+          font-size: 14px;
170
+          color: #666;
171
+          line-height: 48px;
172
+          border-bottom: 1px solid #e5e9ed;
173
+        }
174
+
175
+        .boxes {
176
+          color: #333;
177
+          padding: 8px 12px;
178
+
179
+          & > div:nth-child(1) {
180
+            color: #333;
181
+            text-align: left;
182
+          }
183
+
184
+          & > div:nth-child(2) {
185
+            color: #666;
186
+            text-align: left;
187
+          }
188
+        }
189
+      }
190
+    }
191
+  }
192
+}

+ 191 - 0
src/app/components/bind-extension-number/bind-extension-number.component.ts

@@ -0,0 +1,191 @@
1
+import { Component, OnInit, Output, Input } from '@angular/core';
2
+import { EventEmitter } from '@angular/core';
3
+import { MainService } from 'src/app/services/main.service';
4
+import { ToolService } from 'src/app/services/tool.service';
5
+import { NzMessageService } from 'ng-zorro-antd';
6
+import { WebsocketIncomingService } from 'src/app/services/websocket-incoming.service';
7
+
8
+@Component({
9
+  selector: 'app-bind-extension-number',
10
+  templateUrl: './bind-extension-number.component.html',
11
+  styleUrls: ['./bind-extension-number.component.less']
12
+})
13
+export class BindExtensionNumberComponent implements OnInit {
14
+  @Input() websocketLoading:boolean = false;
15
+  @Input() hsmsData:any = {
16
+    checkedHos: undefined,
17
+    scopeGroups: [],
18
+    orderScopeRadio: undefined,
19
+  }
20
+  @Input() itsmData:any = {
21
+    checkedHos: undefined,
22
+    scopeGroups: [],
23
+    orderScopeRadio: undefined,
24
+  }
25
+  @Output() confirmModal = new EventEmitter();
26
+  @Output() cancelModal = new EventEmitter();
27
+  constructor(
28
+    private mainService: MainService,
29
+    private tool: ToolService,
30
+    private message: NzMessageService,
31
+    private icomingService: WebsocketIncomingService,
32
+  ) { }
33
+
34
+  user = JSON.parse(localStorage.getItem("user")); //用户信息
35
+  isLoading:boolean = false;
36
+  formData1:any = {};
37
+  formData2:any = {};
38
+  hospitalList:any[] = [];
39
+
40
+  // 工单范选项卡
41
+  scopeTabs:any[] = [
42
+    { name: '分机绑定', value: 1, checked: false },
43
+    { name: '呼叫中心', value: 2, checked: false },
44
+  ];
45
+  activeScopeTab = this.scopeTabs[0];
46
+
47
+  ngOnInit() {
48
+    console.log('itsmData', this.itsmData);
49
+    console.log('hsmsData', this.hsmsData);
50
+    this.getHospitalList();
51
+    this.getHjzxCornetList();
52
+    this.getCallCenterConfig();
53
+  }
54
+
55
+  // 获取院区列表
56
+  getHospitalList() {
57
+    // 工单范围
58
+    // 运维不限制部门,则取权限下的所有院区和部门
59
+    // 运维限制部门,则取运维选中的部门和配送选中的院区
60
+    if(this.itsmData.mdv2Switch){
61
+      // 开通运维
62
+      if(this.itsmData.allDuty === 1){
63
+        // 不限制部门
64
+        let hospitals = this.user.infoPermission.hospitals || [];
65
+        let dutyList = this.user.infoPermission.dutyList || [];
66
+        this.hospitalList = hospitals.concat(dutyList);
67
+      }else{
68
+        // 限制部门
69
+        if(this.hsmsData.hsmsSwitch){
70
+          // 开通配送
71
+          this.hospitalList = this.itsmData.checkedHos.concat(this.hsmsData.checkedHosDTO);
72
+        }else{
73
+          // 未开通配送
74
+          this.hospitalList = this.itsmData.checkedHos;
75
+        }
76
+      }
77
+    }else{
78
+      // 未开通运维
79
+      if(this.hsmsData.hsmsSwitch){
80
+        // 开通配送
81
+        this.hospitalList = [this.hsmsData.checkedHosDTO];
82
+      }else{
83
+        // 未开通配送
84
+        this.hospitalList = [];
85
+      }
86
+    }
87
+  }
88
+
89
+  //获取呼叫中心分机号码
90
+  hjzxCornetList:any[] = [];
91
+  getHjzxCornetList() {
92
+    this.isLoading = true;
93
+    this.mainService.getDictionary('list', 'hjzx_cornet').subscribe((data) => {
94
+      this.isLoading = false;
95
+      this.hjzxCornetList = data || [];
96
+    });
97
+  }
98
+
99
+  // 获取呼叫中心服务连接地址
100
+  callCenterConfigObj:any = {};
101
+  getCallCenterConfig() {
102
+    let data = {
103
+      idx: 0,
104
+      sum: 9999,
105
+      callCenterConfig: {},
106
+    };
107
+    this.mainService
108
+      .getFetchDataList("simple/data", "callCenterConfig", data)
109
+      .subscribe((data) => {
110
+        if (data.status == 200) {
111
+          let list = data.list || [];
112
+          this.callCenterConfigObj = list.length ? list[0] : {};
113
+        }else{
114
+          this.message.error(data.msg || "请求数据失败");
115
+        }
116
+      });
117
+  }
118
+
119
+  // 修改院区
120
+  changeHospital(hosId){
121
+    this.phoneNumList = [];
122
+    this.getPhoneNumList(hosId);
123
+  }
124
+
125
+
126
+
127
+  // 修改选项卡-是否启动
128
+  changeFlag(flag, item){
129
+    if(flag){
130
+      this.scopeTabs.forEach(v => {
131
+        if(v.value != item.value){
132
+          v.checked = false;
133
+        }
134
+      })
135
+    }
136
+  }
137
+
138
+  //获取所有分机号码列表
139
+  phoneNumList:any[] = [];
140
+  getPhoneNumList(hosId) {
141
+    this.isLoading = true;
142
+    let postData = {
143
+      idx: 0,
144
+      sum: 100,
145
+      hospitalConfig: { hosId },
146
+    };
147
+    this.mainService
148
+      .getFetchDataList("simple/data", "hospitalConfig", postData)
149
+      .subscribe((result) => {
150
+        this.isLoading = false;
151
+        this.phoneNumList = result.list.filter((item) => item.key.includes("phone_num_port") && item.value);
152
+        console.log('this.phoneNumList:', this.phoneNumList)
153
+      });
154
+  }
155
+
156
+  // 保存工单范围设置
157
+  saveOrderScope() {
158
+    let startObj = this.scopeTabs.find((item) => item.checked);
159
+    if(startObj){
160
+      if(startObj.value == 1){
161
+        // 录音盒
162
+        if(!this.formData1.number){
163
+          this.message.warning('请选择【分机绑定】分机号码')
164
+          return;
165
+        }
166
+        this.icomingService.setSign('box');
167
+        this.confirmModal.emit(this.formData1.number);
168
+      }else if(startObj.value == 2){
169
+        // 呼叫中心
170
+        if(!this.formData2.number){
171
+          this.message.warning('请选择【呼叫中心】分机号码')
172
+          return;
173
+        }
174
+        if(!this.callCenterConfigObj.socketUrl.trim()){
175
+          this.message.warning('呼叫中心服务连接地址未配置,请前往配置中心->三方配置中配置')
176
+          return;
177
+        }
178
+        this.icomingService.setSign('callCenter');
179
+        this.icomingService.setSocketUrl(this.callCenterConfigObj.socketUrl);
180
+        this.confirmModal.emit(this.formData2.number);
181
+      }
182
+    }else{
183
+      this.message.warning('请启动分机号码或呼叫中心')
184
+    }
185
+  }
186
+
187
+  // 关闭弹窗
188
+  cancelInit() {
189
+    this.cancelModal.emit();
190
+  }
191
+}

+ 20 - 0
src/app/components/bind-extension-number/bind-extension-number.module.ts

@@ -0,0 +1,20 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { BindExtensionNumberComponent } from './bind-extension-number.component';
5
+import { ShareModule } from '../../share/share.module';
6
+
7
+
8
+@NgModule({
9
+  declarations: [
10
+    BindExtensionNumberComponent,
11
+  ],
12
+  imports: [
13
+    CommonModule,
14
+    ShareModule,
15
+  ],
16
+  exports: [
17
+    BindExtensionNumberComponent,
18
+  ]
19
+})
20
+export class BindExtensionNumberModule { }

+ 4 - 1
src/app/components/configurationCenter/configuration-callcenter/configuration-callcenter.component.html

@@ -3,7 +3,6 @@
3 3
     <div class="addressAssign">
4 4
       <overlay-scrollbars #osComponentRef2 class="contentBody2">
5 5
         <div class="contentBody">
6
-          <div class="hospital">{{currentHospital.hosName}}</div>
7 6
           <div class="classList">
8 7
             节假日班次:
9 8
             <nz-select class="select" [nzDropdownMatchSelectWidth]="false" nzAllowClear [(ngModel)]="dataInfo.holidayClassId"
@@ -28,6 +27,10 @@
28 27
               </nz-option>
29 28
             </nz-select>
30 29
           </div>
30
+          <div class="classList">
31
+            呼叫中心服务连接:
32
+            <input style="width: 270px;" nz-input placeholder="请填写呼叫中心服务连接" [(ngModel)]="dataInfo.socketUrl" />
33
+          </div>
31 34
         </div>
32 35
       </overlay-scrollbars>
33 36
       <div class="contentBtns">

+ 2 - 4
src/app/components/configurationCenter/configuration-callcenter/configuration-callcenter.component.ts

@@ -33,9 +33,9 @@ export class ConfigurationCallcenterComponent implements OnInit {
33 33
   submitMessageForm(): void {
34 34
     this.btnLoading = true;
35 35
     let postData:any = {
36
-      hosId: this.currentHospital.id,
37 36
       workdayClassId: this.dataInfo.workdayClassId,
38 37
       holidayClassId: this.dataInfo.holidayClassId,
38
+      socketUrl: this.dataInfo.socketUrl,
39 39
     };
40 40
     postData = { ...this.dataInfo, ...postData };
41 41
     this.mainService
@@ -80,9 +80,7 @@ export class ConfigurationCallcenterComponent implements OnInit {
80 80
     let data = {
81 81
       idx: 0,
82 82
       sum: 9999,
83
-      callCenterConfig: {
84
-        hosId: this.currentHospital.id,
85
-      },
83
+      callCenterConfig: {},
86 84
     };
87 85
     this.loading1 = true;
88 86
     this.mainService

+ 7 - 12
src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.component.ts

@@ -1,4 +1,4 @@
1
-import { Component, OnInit, ViewChild } from "@angular/core";
1
+import { Component, OnInit, ViewChild, Input } from "@angular/core";
2 2
 import { ActivatedRoute } from "@angular/router";
3 3
 import { MainService } from "../../../services/main.service";
4 4
 import { Validators, FormGroup, FormBuilder, FormControl } from '@angular/forms';
@@ -33,23 +33,16 @@ export class ConfigurationDictionaryComponent implements OnInit {
33 33
   osComponentRef2: OverlayScrollbarsComponent;
34 34
 
35 35
   ngOnInit() {
36
-    this.initDictionaryForm();
36
+    this.activeDictionaryKey = this.dictionaryKeyList[0];
37 37
     this.getDictionaryList();
38
+    this.initDictionaryForm();
38 39
   }
39 40
 
40 41
   // 数据字典key列表
41
-  dictionaryKeyList: any[] = [
42
-    { id: 1, name: '积分配置', key: "incident_category_score"},
43
-    { id: 2, name: '事件来源', key: "incident_source"},
44
-    { id: 3, name: '处理结果', key: "incident_closecode"},
45
-    { id: 4, name: '处理方式', key: "incident_handle_type"},
46
-    { id: 5, name: '状态', key: "incident_status"},
47
-    { id: 6, name: '维修记录', key: "repair_type"},
48
-    { id: 7, name: '满意度评价', key: "incident_degree"},
49
-  ];
42
+  @Input() dictionaryKeyList: any[] = [];
50 43
 
51 44
   // 点击数据字典key
52
-  activeDictionaryKey:any = this.dictionaryKeyList[0];
45
+  activeDictionaryKey:any;
53 46
   clickDictionaryKey(item){
54 47
     this.activeDictionaryKey = item;
55 48
     this.getDictionaryList();
@@ -107,6 +100,7 @@ export class ConfigurationDictionaryComponent implements OnInit {
107 100
           this.btnLoading = false;
108 101
           this.delModal = false;
109 102
           if (data.status == 200) {
103
+            this.mainService.clearDictionary();
110 104
             this.showPromptModal(this.tipsMsg2, true, "");
111 105
           } else {
112 106
             this.showPromptModal(this.tipsMsg2, false, data.msg);
@@ -247,6 +241,7 @@ export class ConfigurationDictionaryComponent implements OnInit {
247 241
       .subscribe((result) => {
248 242
         this.btnLoading = false;
249 243
         if (result.status == 200) {
244
+          this.mainService.clearDictionary();
250 245
           this.showPromptModal('保存', true, '');
251 246
         } else {
252 247
           this.showPromptModal('保存', false, result.msg || '');

+ 20 - 0
src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.module.ts

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

+ 4 - 11
src/app/components/incidentManagement/incident-detail/incident-detail.component.ts

@@ -228,11 +228,6 @@ export class IncidentDetailComponent implements OnInit {
228 228
     return this.incidentData.synergetic && this.incidentData.synergetic.length ? this.incidentData.synergetic.map(v => v.name).join(',') : '';
229 229
   }
230 230
 
231
-  // 是否进入汇总单
232
-  isInSummaryOrder(){
233
-    return this.incidentData.duty && this.itsmSummarySheet.value == 1 && (this.incidentData.handlingPersonnelUser.id == this.tool.getCurrentUserId());
234
-  }
235
-
236 231
   // 获取院区配置信息
237 232
   itsmSummarySheet:any = {};//是否需要填写汇总单
238 233
   getHospitalConfig() {
@@ -250,12 +245,10 @@ export class IncidentDetailComponent implements OnInit {
250 245
         let list = result.list || [];
251 246
         this.itsmSummarySheet = list.find(v => v.key == 'itsmSummarySheet') || {};
252 247
         console.log(this.itsmSummarySheet)
253
-        if(this.isInSummaryOrder()){
254
-          // 维修汇总单
255
-          if(this.incidentData.state.value == 'close' && this.incidentData.summaryId){
256
-            let flag = this.tabs.some(v => v.value === 4);
257
-            !flag && this.tabs.splice(2, 0, {name: '汇总单', value: 4});
258
-          }
248
+        // 维修汇总单
249
+        if(this.incidentData.state.value == 'close' && this.itsmSummarySheet.value == 1 && this.incidentData.summaryId){
250
+          let flag = this.tabs.some(v => v.value === 4);
251
+          !flag && this.tabs.splice(2, 0, {name: '汇总单', value: 4});
259 252
         }
260 253
       });
261 254
   }

+ 1 - 1
src/app/components/incidentManagement/incident-handle/incident-handle.component.ts

@@ -159,7 +159,7 @@ export class IncidentHandleComponent implements OnInit {
159 159
       idx: 0,
160 160
       sum: 9999,
161 161
       solution: {
162
-        category: categoryId,
162
+        categoryId,
163 163
 				status: this.solutionStatus,
164 164
 				type: this.solutionType,
165 165
       },

+ 14 - 0
src/app/components/incidentManagement/incident-recording/incident-recording.component.html

@@ -0,0 +1,14 @@
1
+<div class="save display_flex justify-content_flex-center align-items_center add">
2
+  <div class="modalBody">
3
+    <div class="title">回放录音<i class="icon_transport transport-guanbi" (click)="hideModal()"></i>
4
+    </div>
5
+    <div class="content audio">
6
+      <audio controls style="outline: none;">
7
+        <source [src]="audioPath" type="audio/wav">
8
+      </audio>
9
+    </div>
10
+    <div class=" display_flex justify-content_flex-center">
11
+      <button class="btn cancel" nz-button nzType="default" (click)="hideModal()">知道了</button>
12
+    </div>
13
+  </div>
14
+</div>

+ 173 - 0
src/app/components/incidentManagement/incident-recording/incident-recording.component.less

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

+ 29 - 0
src/app/components/incidentManagement/incident-recording/incident-recording.component.ts

@@ -0,0 +1,29 @@
1
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2
+
3
+@Component({
4
+  selector: 'app-incident-recording',
5
+  templateUrl: './incident-recording.component.html',
6
+  styleUrls: ['./incident-recording.component.less']
7
+})
8
+export class IncidentRecordingComponent implements OnInit {
9
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
10
+
11
+  @Input() path: any;
12
+
13
+  constructor() { }
14
+
15
+  audioPath = ""; //录音文件地址
16
+
17
+  ngOnInit() {
18
+    this.audioPath = location.origin + this.path;
19
+  }
20
+
21
+  // 关闭弹窗
22
+  hideModal() {
23
+    this.closeModelHs.emit(JSON.stringify({ show: false }));//emits(向上弹射)事件
24
+  }
25
+}
26
+
27
+
28
+
29
+

+ 20 - 0
src/app/components/incidentManagement/incident-recording/incident-recording.module.ts

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

+ 77 - 0
src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.html

@@ -0,0 +1,77 @@
1
+<div class="modal display_flex align-items_center">
2
+  <div class="modalBody">
3
+    <div class="title">通话记录<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4
+    <div class="content">
5
+      <div class="list-template w100" style="padding: 16px;">
6
+        <div class="list-template__content">
7
+          <div class="list-template__top" nz-row style="padding: 0;">
8
+            <div nz-col nzXl='18' class="list-template__searchBox">
9
+              <div class="list-template__searchItem">
10
+                <span class="label">主叫号码:</span>
11
+                <input nz-input class="formItem" placeholder="请输入主叫号码" [(ngModel)]="searchDTO.dTMFA" />
12
+              </div>
13
+              <div class="list-template__searchItem">
14
+                <span class="label">被叫号码:</span>
15
+                <input nz-input class="formItem" placeholder="请输入被叫号码" [(ngModel)]="searchDTO.dTMFB" />
16
+              </div>
17
+              <div class="list-template__searchItem">
18
+                <span class="label">开始时间:</span>
19
+                <nz-date-picker class="formItem" [ngModel]="searchDTO.responseTime" (ngModelChange)="searchDTO.responseTime = $event" nzShowTime></nz-date-picker>
20
+              </div>
21
+            </div>
22
+            <div nz-col nzXl='6' class="list-template__btns">
23
+              <button nz-button class="btn default ml8 mt0" (click)='search()'>搜索</button>
24
+              <button nz-button class="btn default ml8 mt0" (click)='reset()'>重置</button>
25
+            </div>
26
+          </div>
27
+        </div>
28
+      </div>
29
+      <div class="tableWrap">
30
+        <nz-table class="hospitalTable" [nzData]="messageList" nzSize="small" [nzShowPagination]="false" [nzLoading]="loading">
31
+          <thead>
32
+            <tr class="thead">
33
+              <th nzWidth="12.5%">主叫号码</th>
34
+              <th nzWidth="12.5%">被叫号码</th>
35
+              <th nzWidth="12.5%">开始时间</th>
36
+              <th nzWidth="12.5%">结束时间</th>
37
+              <th nzWidth="12.5%">通话时长</th>
38
+              <th nzWidth="12.5%">已接/未接</th>
39
+              <th nzWidth="12.5%">呼入/呼出</th>
40
+              <th nzWidth="12.5%">操作</th>
41
+            </tr>
42
+          </thead>
43
+          <tbody>
44
+            <tr *ngFor="let data of messageList;let i = index;">
45
+              <td>{{ data.dTMFA }}</td>
46
+              <td>{{ data.dTMFB }}</td>
47
+              <td>{{ data.responseTime}}</td>
48
+              <td>{{ data.overTime}}</td>
49
+              <td *ngIf="data.longTime!==undefined">{{data.longTime}}秒</td>
50
+              <td *ngIf="data.longTime===undefined"></td>
51
+              <td>{{data.callState == 1?'已接':'未接'}}</td>
52
+              <td>{{data.callType == 1?'呼入':(data.callType == 0?'呼出':'')}}</td>
53
+              <td>
54
+                <div class="coop">
55
+                  <span *ngIf="data.path" (click)="recordcall(data)">回访录音</span>
56
+                </div>
57
+              </td>
58
+            </tr>
59
+          </tbody>
60
+        </nz-table>
61
+        <div class="pagination">
62
+          <ng-template #totalTemplate let-total> 共 {{ total }} 条 </ng-template>
63
+          <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="total"
64
+            [(nzPageSize)]="pageSize" (nzPageIndexChange)="getList()"
65
+            (nzPageSizeChange)="getList()" [nzShowTotal]="totalTemplate">
66
+          </nz-pagination>
67
+        </div>
68
+      </div>
69
+    </div>
70
+  </div>
71
+</div>
72
+
73
+<!-- 回放录音模态框 -->
74
+<app-incident-recording [path]="coopData.relativePath" *ngIf="recordingModalShow" (closeModelHs)="closeRecordingModelOrder($event)"></app-incident-recording>
75
+
76
+<!-- 遮罩 -->
77
+<app-mask *ngIf="maskFlag"></app-mask>

+ 240 - 0
src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.less

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

+ 100 - 0
src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.ts

@@ -0,0 +1,100 @@
1
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2
+import { format, startOfDay, endOfDay } from 'date-fns';
3
+import { MainService } from 'src/app/services/main.service';
4
+import { ToolService } from 'src/app/services/tool.service';
5
+import { NzMessageService } from 'ng-zorro-antd';
6
+@Component({
7
+  selector: 'app-incident-ser-call',
8
+  templateUrl: './incident-ser-call.component.html',
9
+  styleUrls: ['./incident-ser-call.component.less']
10
+})
11
+export class IncidentSerCallComponent implements OnInit {
12
+  // 切换科室,切换弹窗
13
+  loading = false;
14
+  messageList: any = [];// 通话记录列表
15
+  pageIndex: number = 1;//表格当前页码
16
+  pageSize: number = 10;//表格每页展示条数
17
+  total: number = 0;//表格总数据量
18
+
19
+  searchDTO: any = {};
20
+
21
+  @Input() itsmData:any;
22
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
23
+
24
+  constructor(
25
+    private mainService: MainService,
26
+    private tool: ToolService,
27
+    private message: NzMessageService,
28
+  ) { }
29
+
30
+  ngOnInit() {
31
+    this.getMessageList(1);
32
+  }
33
+  // 关闭弹窗
34
+  hideModal() {
35
+    this.closeModelHs.emit({ show: false });//emits(向上弹射)事件
36
+  }
37
+
38
+  // 搜索
39
+  search() {
40
+    this.getMessageList(1);
41
+  }
42
+  // 重置
43
+  reset() {
44
+    this.searchDTO = {};
45
+    this.getMessageList(1);
46
+  }
47
+
48
+  // 回放录音
49
+  coopData:any = {};
50
+  recordingModalShow = false; //弹窗开关
51
+  maskFlag:any = false;
52
+  recordcall(data) {
53
+    this.maskFlag = this.message.loading("正在加载中..", {
54
+      nzDuration: 0,
55
+    }).messageId;
56
+    this.mainService.getCallLogPath({ path: data.path, hosId: data.hosId }).subscribe((result) => {
57
+      this.message.remove(this.maskFlag);
58
+      this.maskFlag = false;
59
+      if (result["state"] == 200) {
60
+        this.coopData = { relativePath: result["relativePath"] };
61
+        this.recordingModalShow = true;
62
+      }
63
+    });
64
+  }
65
+  // 关闭弹窗
66
+  closeRecordingModelOrder(e) {
67
+    this.recordingModalShow = JSON.parse(e).show;
68
+  }
69
+
70
+  // 分页获取数据
71
+  getList(){
72
+    this.getMessageList();
73
+  }
74
+
75
+  // 获取通话记录列表
76
+  getMessageList(idx?) {
77
+    if (idx) {
78
+      this.pageIndex = 1;
79
+    }
80
+    let postData = {
81
+      idx: this.pageIndex - 1,
82
+      sum: this.pageSize,
83
+      callLog: {
84
+        "hosIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.checkedHos.map(v => v.id).toString() || undefined),
85
+        dTMFA: this.searchDTO.dTMFA || undefined,
86
+        dTMFB: this.searchDTO.dTMFB || undefined,
87
+        responseTime: this.searchDTO.responseTime ? format(this.searchDTO.responseTime, 'yyyy-MM-dd HH:mm:ss') : undefined,
88
+      }
89
+    }
90
+    this.loading = true;
91
+    this.mainService.getFetchDataList('simple/data','callLog',postData).subscribe(data => {
92
+      this.loading = false;
93
+      this.messageList = data.list || [];
94
+      this.total = data.totalNum;
95
+    })
96
+  }
97
+}
98
+
99
+
100
+

+ 22 - 0
src/app/components/incidentManagement/incident-ser-call/incident-ser-call.module.ts

@@ -0,0 +1,22 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { IncidentSerCallComponent } from './incident-ser-call.component';
5
+import { ShareModule } from 'src/app/share/share.module';
6
+import { IncidentRecordingModule } from '../incident-recording/incident-recording.module';
7
+
8
+
9
+@NgModule({
10
+  declarations: [
11
+    IncidentSerCallComponent,
12
+  ],
13
+  imports: [
14
+    CommonModule,
15
+    ShareModule,
16
+    IncidentRecordingModule,
17
+  ],
18
+  exports: [
19
+    IncidentSerCallComponent,
20
+  ]
21
+})
22
+export class IncidentSerCallModule { }

+ 73 - 0
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.html

@@ -0,0 +1,73 @@
1
+<div class="modal display_flex align-items_center">
2
+  <div class="modalBody">
3
+    <div class="title">留言记录<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4
+    <div class="content">
5
+      <div class="tabs">
6
+        <div class="tab" *ngFor="let item of tabs" (click)="clickTbab(item)" [ngClass]="{ active: activeTabValue === item.value }">{{ item.name }}</div>
7
+      </div>
8
+      <div class="list-template w100" style="padding: 16px;">
9
+        <div class="list-template__content">
10
+          <div class="list-template__top" nz-row style="padding: 0;">
11
+            <div nz-col nzXl='18' class="list-template__searchBox">
12
+              <div class="list-template__searchItem">
13
+                <span class="label">留言时间</span>:
14
+                <nz-range-picker style="width: 373px;" nzShowTime [(ngModel)]="searchDTO.dateRange" (nzOnCalendarChange)="onCalendarChangeDate($event)"></nz-range-picker>
15
+              </div>
16
+            </div>
17
+            <div nz-col nzXl='6' class="list-template__btns">
18
+              <button nz-button class="btn default ml8 mt0" (click)='search()'>搜索</button>
19
+              <button nz-button class="btn default ml8 mt0" (click)='reset()'>重置</button>
20
+            </div>
21
+          </div>
22
+        </div>
23
+      </div>
24
+      <div class="tableWrap">
25
+        <nz-table class="hospitalTable" [nzData]="messageList" nzSize="small" [nzShowPagination]="false" [nzLoading]="loading">
26
+          <thead>
27
+            <tr class="thead">
28
+              <th nzWidth="8%">序号</th>
29
+              <th nzWidth="23%">留言时间</th>
30
+              <th nzWidth="23%">来电号码</th>
31
+              <th nzWidth="23%">处理状态</th>
32
+              <th nzWidth="23%">操作</th>
33
+            </tr>
34
+          </thead>
35
+          <tbody>
36
+            <tr *ngFor="let data of messageList;let i = index;">
37
+              <td>{{ (pageIndex - 1) * pageSize + i + 1 }}</td>
38
+              <td>{{ data.recTime | date:'yyyy-MM-dd HH:mm' }}</td>
39
+              <td>{{ data.ano}}</td>
40
+              <td>{{ data.isExcute == 1 ? '已受理' : (data.isExcute == 2 ? '不受理' : '未受理') }}</td>
41
+              <td>
42
+                <div class="coop">
43
+                  <span *ngIf="data.isExcute === 0" (click)="createOrder(data)">生成工单</span>
44
+                  <span *ngIf="data.isExcute === 0 || data.isExcute === 1" (click)="recordcall(data)">回访录音</span>
45
+                  <span *ngIf="data.isExcute === 0" (click)="showDelModal(data, '确认不受理后,将无法转换为事件工单!', '不受理', 'notAccepted')">不受理</span>
46
+                  <span *ngIf="data.isExcute === 1" (click)="openItsmDetails(data.incidentDTO)">查看故障单</span>
47
+                </div>
48
+              </td>
49
+            </tr>
50
+          </tbody>
51
+        </nz-table>
52
+        <div class="pagination">
53
+          <ng-template #totalTemplate let-total> 共 {{ total }} 条 </ng-template>
54
+          <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="total"
55
+            [(nzPageSize)]="pageSize" (nzPageIndexChange)="getList()"
56
+            (nzPageSizeChange)="getList()" [nzShowTotal]="totalTemplate">
57
+          </nz-pagination>
58
+        </div>
59
+      </div>
60
+    </div>
61
+  </div>
62
+</div>
63
+
64
+<!-- 回放录音模态框 -->
65
+<app-incident-recording [path]="coopData.recFileName" *ngIf="recordingModalShow" (closeModelHs)="closeRecordingModelOrder($event)"></app-incident-recording>
66
+
67
+<!-- 操作成功/失败提示框 -->
68
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow" [info]="promptInfo"></app-prompt-modal>
69
+
70
+<app-dialog-delete [delModal]="delModal" (hideDelModalEvent)="hideDelModal()" [btnLoading]="btnLoading" (confirmDelEvent)="confirmDelFn()" [content]="tipsMsg1"></app-dialog-delete>
71
+
72
+<!-- 详情 -->
73
+<app-incident-detail [id]="coopData.id" *ngIf="detailModalShow" (closeModelHs)="closeDetailModelOrder($event)" (confirmModelHs)="confirmDetailModelOrder($event)"></app-incident-detail>

+ 240 - 0
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.less

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

+ 181 - 0
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.ts

@@ -0,0 +1,181 @@
1
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2
+import { format, startOfDay, endOfDay } from 'date-fns';
3
+import { MainService } from 'src/app/services/main.service';
4
+import { ToolService } from 'src/app/services/tool.service';
5
+@Component({
6
+  selector: 'app-incident-ser-message',
7
+  templateUrl: './incident-ser-message.component.html',
8
+  styleUrls: ['./incident-ser-message.component.less']
9
+})
10
+export class IncidentSerMessageComponent implements OnInit {
11
+  // 切换科室,切换弹窗
12
+  loading = false;
13
+  messageList: any = [];// 留言列表
14
+  pageIndex: number = 1;//表格当前页码
15
+  pageSize: number = 10;//表格每页展示条数
16
+  total: number = 0;//表格总数据量
17
+
18
+  tabs:any[] = [
19
+    {id: 1, name: '全部', value: '', num: ''},
20
+    {id: 2, name: '未受理', value: 0, num: ''},
21
+    {id: 3, name: '已受理', value: 1, num: ''},
22
+    {id: 4, name: '不受理', value: 2, num: ''},
23
+  ]
24
+
25
+  searchDTO: any = {};
26
+
27
+  @Input() itsmData:any;
28
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
29
+
30
+  constructor(private mainService: MainService, private tool: ToolService) { }
31
+
32
+  ngOnInit() {
33
+    this.clickTbab(this.tabs[1]);
34
+  }
35
+  // 关闭弹窗
36
+  hideModal() {
37
+    this.closeModelHs.emit({ show: false });//emits(向上弹射)事件
38
+  }
39
+
40
+  // 点击tab
41
+  activeTabValue:any;
42
+  clickTbab(item){
43
+    this.activeTabValue = item.value;
44
+    this.getMessageList(1);
45
+  }
46
+
47
+  onCalendarChangeDate(dateArr){
48
+    console.log(dateArr)
49
+    if(dateArr.length == 2){
50
+      let dateStart = new Date(dateArr[0]);
51
+      let dateEnd = new Date(dateArr[1]);
52
+      dateStart.setHours(0,0,0);
53
+      dateEnd.setHours(23,59,59);
54
+      this.searchDTO.dateRange = [dateStart,dateEnd];
55
+    }
56
+  }
57
+
58
+  // 搜索
59
+  search() {
60
+    this.getMessageList(1);
61
+  }
62
+  // 重置
63
+  reset() {
64
+    this.searchDTO = {};
65
+    this.getMessageList(1);
66
+  }
67
+
68
+  delModal: boolean = false; //删除模态框
69
+  tipsMsg1: string; //提示框信息
70
+  tipsMsg2: string; //操作后信息
71
+  confirmDelType: string; //确认的类型(启用/停用,删除)
72
+  coopData:any = {};
73
+  showDelModal(data, tipsMsg1: string, tipsMsg2: string, type: string) {
74
+    this.confirmDelType = type;
75
+    this.delModal = true;
76
+    this.coopData = data;
77
+    this.tipsMsg1 = tipsMsg1;
78
+    this.tipsMsg2 = tipsMsg2;
79
+  }
80
+  // 隐藏删除框
81
+  hideDelModal() {
82
+    this.delModal = false;
83
+  }
84
+  // 确认删除
85
+  btnLoading: boolean = false; //确认按钮loading状态
86
+  confirmDelFn() {
87
+    this.btnLoading = true;
88
+    if (this.confirmDelType === "notAccepted") {
89
+      //不受理
90
+      this.mainService
91
+        .simplePost("updData", "hjzxRecord", { ...this.coopData, item: undefined, isExcute: 2 })
92
+        .subscribe((data) => {
93
+          this.btnLoading = false;
94
+          this.delModal = false;
95
+          if (data.status == 200) {
96
+            this.showPromptModal(this.tipsMsg2, true, "");
97
+          } else {
98
+            this.showPromptModal(this.tipsMsg2, false, data.msg);
99
+          }
100
+        });
101
+    }
102
+  }
103
+
104
+  // 生成工单
105
+  createOrder(data){
106
+    this.closeModelHs.emit({ show: false, data: data });
107
+  }
108
+
109
+  // 回放录音
110
+  recordingModalShow = false; //弹窗开关
111
+  recordcall(data) {
112
+    this.coopData = data;
113
+    this.recordingModalShow = true;
114
+  }
115
+  // 关闭弹窗
116
+  closeRecordingModelOrder(e) {
117
+    this.recordingModalShow = JSON.parse(e).show;
118
+  }
119
+
120
+  // 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
121
+  promptContent: string; //操作提示框提示信息
122
+  ifSuccess: boolean; //操作成功/失败
123
+  promptInfo: string; //操作结果提示信息
124
+  promptModalShow: boolean; //是否展示提示框
125
+  showPromptModal(con, success, promptInfo?) {
126
+    this.promptModalShow = false;
127
+    this.promptContent = con;
128
+    this.ifSuccess = success;
129
+    this.promptInfo = promptInfo;
130
+    setTimeout(() => {
131
+      this.promptModalShow = true;
132
+      this.getList();
133
+    }, 100);
134
+  }
135
+
136
+  // 分页获取数据
137
+  getList(){
138
+    this.getMessageList();
139
+  }
140
+
141
+  // 获取留言列表
142
+  getMessageList(idx?) {
143
+    if (idx) {
144
+      this.pageIndex = 1;
145
+    }
146
+    let postData = {
147
+      idx: this.pageIndex - 1,
148
+      sum: this.pageSize,
149
+      hjzxRecord: {
150
+        isExcute: this.activeTabValue === '' ? undefined : this.activeTabValue,
151
+        startTime: this.searchDTO.dateRange ? format(startOfDay(this.searchDTO.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined,
152
+        endTime: this.searchDTO.dateRange ? format(endOfDay(this.searchDTO.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined,
153
+      }
154
+    }
155
+    this.loading = true;
156
+    this.mainService.getFetchDataList('simple/data','hjzxRecord',postData).subscribe(data => {
157
+      this.loading = false;
158
+      this.messageList = data.list || [];
159
+      this.total = data.totalNum;
160
+    })
161
+  }
162
+
163
+  // 查看ITSM工单详情
164
+  detailModalShow = false; //弹窗开关
165
+  openItsmDetails(data) {
166
+    this.coopData = data;
167
+    this.detailModalShow = true;
168
+  }
169
+  // 关闭弹窗
170
+  closeDetailModelOrder(e) {
171
+    this.detailModalShow = JSON.parse(e).show;
172
+  }
173
+  // 弹窗确定
174
+  confirmDetailModelOrder(e){
175
+    console.log(e);
176
+    this.detailModalShow = false;
177
+  }
178
+}
179
+
180
+
181
+

+ 24 - 0
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.module.ts

@@ -0,0 +1,24 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { IncidentSerMessageComponent } from './incident-ser-message.component';
5
+import { ShareModule } from 'src/app/share/share.module';
6
+import { IncidentDetailModule } from '../incident-detail/incident-detail.module';
7
+import { IncidentRecordingModule } from '../incident-recording/incident-recording.module';
8
+
9
+
10
+@NgModule({
11
+  declarations: [
12
+    IncidentSerMessageComponent,
13
+  ],
14
+  imports: [
15
+    CommonModule,
16
+    ShareModule,
17
+    IncidentDetailModule,
18
+    IncidentRecordingModule,
19
+  ],
20
+  exports: [
21
+    IncidentSerMessageComponent,
22
+  ]
23
+})
24
+export class IncidentSerMessageModule { }

+ 37 - 0
src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.html

@@ -0,0 +1,37 @@
1
+<div class="modal display_flex align-items_center">
2
+  <div class="modalBody">
3
+    <div class="title">待回访<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4
+    <overlay-scrollbars #osComponentRef1 class="content">
5
+      <nz-spin nzSimple [nzSpinning]="loading" class="mt8 text_align_center"></nz-spin>
6
+      <ng-container *ngIf="!loading">
7
+        <div class="items" *ngFor="let item of visitList">
8
+          <div class="row">
9
+            <div class="col">单号:{{item.incidentsign}}</div>
10
+            <div class="col">优先级:<span [ngClass]="priorityColor(item.priorityId)">{{item.priorityDTO?.name}}</span></div>
11
+            <div class="col">院区-科室名称:{{item.hosName}}-{{item.department?.dept}}</div>
12
+          </div>
13
+          <div class="row">
14
+            <div class="col">故障描述:{{item.description}}</div>
15
+          </div>
16
+          <div class="row">
17
+            <div class="col">详细地址:{{ item.place ? item.place.building.buildingName : '' }}{{ item.place ? item.place.floorName : '' }}{{ item.houseNumber }}</div>
18
+          </div>
19
+          <div class="row">
20
+            <div class="col">申请时间:{{ item.startDate | date: 'yyyy-MM-dd HH:mm'}}</div>
21
+            <div class="col">处理人:{{computedHandlerUser(item)}}</div>
22
+            <div class="col btns">
23
+              <input type="button" class="mid_bot mr8" value="回访" (click)="visit(item)" />
24
+              <input type="button" class="btm_bot" value="查看" (click)="openItsmDetails(item)" />
25
+            </div>
26
+          </div>
27
+        </div>
28
+      </ng-container>
29
+    </overlay-scrollbars>
30
+  </div>
31
+</div>
32
+
33
+<!-- 详情 -->
34
+<app-incident-detail [id]="coopData.id" *ngIf="detailModalShow" (closeModelHs)="closeDetailModelOrder($event)" (confirmModelHs)="confirmDetailModelOrder($event)"></app-incident-detail>
35
+
36
+<!-- 回访 -->
37
+<app-incident-visit [id]="coopData.id" *ngIf="visitModalShow" (closeModelHs)="closeVisitModelOrder($event)" (confirmModelHs)="confirmVisitModelOrder($event)"></app-incident-visit>

+ 155 - 0
src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.less

@@ -0,0 +1,155 @@
1
+@import "../../../../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
+      position: relative;
15
+      word-break: break-all;
16
+    }
17
+    .thead {
18
+      background-image: linear-gradient(to right, @bg-start, @bg-end);
19
+      th {
20
+        text-align: center !important;
21
+        color: #fff;
22
+        background: transparent;
23
+      }
24
+    }
25
+  }
26
+
27
+  .ji {
28
+    position: absolute;
29
+    right: 0px;
30
+    top: -3px;
31
+    width: 30px;
32
+  }
33
+
34
+  .list-template__top{
35
+    div{
36
+      text-align: left!important;
37
+    }
38
+  }
39
+
40
+  .tab {
41
+    width: 100%;
42
+    height: 60px;
43
+    border-bottom: 1px solid #e5e9ed;
44
+    background-color: #fff;
45
+
46
+    .item {
47
+      text-align: center;
48
+      line-height: 60px;
49
+      height: 100%;
50
+      border-right: 1px solid #e5e9ed;
51
+
52
+      &:nth-last-child(1) {
53
+        border: none;
54
+      }
55
+
56
+      &.checked {
57
+        background: #f0f6ed;
58
+      }
59
+    }
60
+  }
61
+
62
+  .modalBody {
63
+    width: 742px;
64
+    height: 707px;
65
+    background: #fff;
66
+    border-radius: 5px;
67
+    padding-bottom: 30px;
68
+    color: #333;
69
+    &.modalBody-search {
70
+      width: 480px;
71
+      min-height: 250px;
72
+    }
73
+
74
+    .title {
75
+      width: 100%;
76
+      height: 40px;
77
+      line-height: 40px;
78
+      text-align: center;
79
+      font-size: 16px;
80
+      position: relative;
81
+
82
+      i {
83
+        position: absolute;
84
+        right: 0;
85
+        top: 0;
86
+        font-size: 16px;
87
+        color: #666;
88
+        cursor: pointer;
89
+        padding: 0 16px;
90
+      }
91
+    }
92
+
93
+    .content {
94
+      height: calc(100% - 40px);
95
+      border-top: 1px solid #D9D9D9;
96
+      border-bottom: 1px solid #D9D9D9;
97
+      .items{
98
+        border-bottom: 1px solid #D9D9D9;
99
+        padding: 16px 48px;
100
+        font-size: 14px;
101
+        &:last-of-type{
102
+          border-bottom: none;
103
+        }
104
+        .row{
105
+          position: relative;
106
+          display: flex;
107
+          margin-top: 12px;
108
+          &:first-of-type{
109
+            margin-top: 0;
110
+          }
111
+          .col{
112
+            margin-right: 48px;
113
+            &:last-of-type{
114
+              margin-right: 0;
115
+            }
116
+            &.btns{
117
+              position: absolute;
118
+              bottom: 0;
119
+              right: 0;
120
+            }
121
+          }
122
+        }
123
+        /* 中按钮 */
124
+        .mid_bot {
125
+          width: 65px;
126
+          border-radius: 4px;
127
+          color: white;
128
+          background-color: @primary-color;
129
+          border: 1px @primary-color solid;
130
+          cursor: pointer;
131
+          height: 27px;
132
+        }
133
+
134
+        /* 下按钮 */
135
+        .btm_bot {
136
+          width: 65px;
137
+          border-radius: 4px;
138
+          color: #78797a;
139
+          background-color: #FFF;
140
+          border: 1px #e5e9ed solid;
141
+          cursor: pointer;
142
+          height: 27px;
143
+        }
144
+      }
145
+    }
146
+
147
+    button {
148
+      margin-top: 10px;
149
+
150
+      &.btn {
151
+        margin-left: 8px;
152
+      }
153
+    }
154
+  }
155
+}

+ 123 - 0
src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.ts

@@ -0,0 +1,123 @@
1
+import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+import { ToolService } from 'src/app/services/tool.service';
3
+import { MainService } from 'src/app/services/main.service';
4
+import { OverlayScrollbarsComponent } from 'overlayscrollbars-ngx';
5
+@Component({
6
+  selector: 'app-incident-ser-visit',
7
+  templateUrl: './incident-ser-visit.component.html',
8
+  styleUrls: ['./incident-ser-visit.component.less']
9
+})
10
+export class IncidentSerVisitComponent implements OnInit {
11
+  @ViewChild("osComponentRef1", {
12
+    read: OverlayScrollbarsComponent,
13
+    static: false,
14
+  })
15
+  osComponentRef1: OverlayScrollbarsComponent;
16
+  // 切换科室,切换弹窗
17
+  loading = false;
18
+  visitList: any = [];// 列表
19
+  pageIndex: number = 1;//表格当前页码
20
+  pageSize: number = 10;//表格每页展示条数
21
+  total: number = 0;//表格总数据量
22
+
23
+  @Input() itsmData:any;
24
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
25
+
26
+  constructor(private mainService: MainService, private tool: ToolService) { }
27
+
28
+  ngOnInit() {
29
+    this.getVisitList();
30
+  }
31
+  // 关闭弹窗
32
+  hideModal() {
33
+    this.closeModelHs.emit(JSON.stringify({ show: false }));//emits(向上弹射)事件
34
+  }
35
+
36
+  // 优先级颜色
37
+  priorityColor(priorityId) {
38
+    // 极低|低
39
+    if(priorityId == 1 || priorityId == 2){
40
+      return '';
41
+    } else if(priorityId == 3){
42
+      return 'yellow';
43
+    } else if(priorityId == 4 || priorityId == 5){
44
+      return 'red';
45
+    }
46
+  }
47
+
48
+  // 处理人
49
+  computedHandlerUser(item){
50
+    if(item.state.value == 'pending' && item.currentLog){
51
+      return item.currentLog.workerName;
52
+    }
53
+    if(item.state.value != 'pending' && item.handlingPersonnelUser){
54
+      return item.handlingPersonnelUser.name;
55
+    }
56
+  }
57
+
58
+  // 查看ITSM工单详情
59
+  detailModalShow = false; //弹窗开关
60
+  coopData:any = {};
61
+  openItsmDetails(data) {
62
+    this.coopData = data;
63
+    this.detailModalShow = true;
64
+  }
65
+  // 关闭弹窗
66
+  closeDetailModelOrder(e) {
67
+    this.detailModalShow = JSON.parse(e).show;
68
+  }
69
+  // 弹窗确定
70
+  confirmDetailModelOrder(e){
71
+    console.log(e);
72
+    this.detailModalShow = false;
73
+  }
74
+
75
+  // 回访-弹窗
76
+  visitModalShow = false; //弹窗开关
77
+  visit(data) {
78
+    this.coopData = data;
79
+    this.visitModalShow = true;
80
+  }
81
+  // 关闭弹窗
82
+  closeVisitModelOrder(e) {
83
+    this.visitModalShow = JSON.parse(e).show;
84
+  }
85
+  // 弹窗确定
86
+  confirmVisitModelOrder(e){
87
+    console.log(e);
88
+    this.visitModalShow = false;
89
+    this.getList();
90
+  }
91
+
92
+  // 分页获取数据
93
+  getList(){
94
+    this.getVisitList();
95
+  }
96
+
97
+  // 获取回访列表
98
+  getVisitList(){
99
+    this.loading = true;
100
+    let postData: any = {
101
+      idx: 0,
102
+      sum: 9999,
103
+      incident: {
104
+        "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
105
+        "hosIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.checkedHos.map(v => v.id).toString() || undefined),
106
+        "urgentType": +this.itsmData.orderScopeRadio + 1,
107
+        "queryTask": "callback",
108
+        "assignee": this.tool.getCurrentUserId(),
109
+        "deleteFlag": 0,
110
+      },
111
+    };
112
+
113
+    this.mainService
114
+      .getFetchDataList("simple/data", "incident", postData)
115
+      .subscribe((result) => {
116
+        this.loading = false;
117
+        this.visitList = result.list.map(v => ({...v, endDeptsName: v.endDepts ? v.endDepts.map(v => v.dept).toString() : ''}));
118
+      });
119
+  }
120
+}
121
+
122
+
123
+

+ 24 - 0
src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.module.ts

@@ -0,0 +1,24 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { IncidentSerVisitComponent } from './incident-ser-visit.component';
5
+import { ShareModule } from 'src/app/share/share.module';
6
+import { IncidentDetailModule } from '../incident-detail/incident-detail.module';
7
+import { IncidentVisitModule } from '../incident-visit/incident-visit.module';
8
+
9
+
10
+@NgModule({
11
+  declarations: [
12
+    IncidentSerVisitComponent,
13
+  ],
14
+  imports: [
15
+    CommonModule,
16
+    ShareModule,
17
+    IncidentDetailModule,
18
+    IncidentVisitModule,
19
+  ],
20
+  exports: [
21
+    IncidentSerVisitComponent,
22
+  ]
23
+})
24
+export class IncidentSerVisitModule { }

+ 0 - 1
src/app/services/httpInterceptor.service.ts

@@ -38,7 +38,6 @@ export class HttpInterceptorService implements HttpInterceptor {
38 38
               this.message.info('登录失效,请重新登录!').onClose!.subscribe(() => {
39 39
                 localStorage.removeItem("user");
40 40
                 localStorage.removeItem("menu");
41
-                localStorage.removeItem("phones");
42 41
                 localStorage.removeItem("index");
43 42
                 this.router.navigate(['/login']);
44 43
               })

+ 1 - 1
src/app/services/main.service.ts

@@ -993,7 +993,7 @@ export class MainService {
993 993
 	    headers: this.headers,
994 994
 	  });
995 995
 	}
996
-	
996
+
997 997
 	// 调度台工单列表
998 998
 	orderList(data) {
999 999
 	  return this.http.post(host.host + `/ser/merge/orderList`,data, {

+ 19 - 0
src/app/services/websocket-hjzx.service.ts

@@ -0,0 +1,19 @@
1
+/*
2
+ * @Author: seimin
3
+ * @Date: 2024-09-24 16:34:47
4
+ * @LastEditors: seimin
5
+ * @LastEditTime: 2024-09-29 15:38:58
6
+ * @Description: 呼叫中心websocket服务
7
+ */
8
+import { Injectable } from "@angular/core";
9
+declare const tlwsa: any;
10
+@Injectable({
11
+  providedIn: "root",
12
+})
13
+export class WebsocketHjzxService {
14
+  constructor() { }
15
+
16
+  closeWs(flag: boolean = false){
17
+    flag && tlwsa.tlaClose();
18
+  }
19
+}

+ 111 - 0
src/app/services/websocket-incoming.service.ts

@@ -0,0 +1,111 @@
1
+/*
2
+ * @Author: seimin
3
+ * @Date: 2024-09-24 16:34:47
4
+ * @LastEditors: seimin
5
+ * @LastEditTime: 2024-09-29 15:41:54
6
+ * @Description: 来电弹屏websocket服务
7
+ */
8
+import { Injectable } from "@angular/core";
9
+import { Observable } from "rxjs";
10
+import { WebsocketPhoneService } from './websocket-phone.service';
11
+import { WebsocketHjzxService } from './websocket-hjzx.service';
12
+import { MainService } from './main.service';
13
+import http from "../../assets/js/http";
14
+
15
+@Injectable({
16
+  providedIn: "root",
17
+})
18
+export class WebsocketIncomingService {
19
+  constructor(
20
+    private mainService: MainService,
21
+    private phoneService: WebsocketPhoneService,
22
+    private hjzxService: WebsocketHjzxService,
23
+  ) { }
24
+
25
+  // 连接websocket { userCount }
26
+  private user = JSON.parse(localStorage.getItem("user")); //用户信息
27
+  connectWs(): Observable<any> {
28
+    let userCount = this.user.user.account + "|" + this.getPhoneNumber();
29
+    if(this.getSign() === 'box'){
30
+      return this.phoneService.connectWs(http.phoneWs, { userCount });
31
+    }
32
+  }
33
+  // 断开websocket
34
+  closeWs(flag: boolean = false) {
35
+    console.log('sign', this.getSign())
36
+    if(this.getSign() === 'box'){
37
+      this.phoneService.closeWs(flag);
38
+    }else if(this.getSign() === 'callCenter'){
39
+      this.hjzxService.closeWs(flag);
40
+    }
41
+  }
42
+
43
+  // 绑定的分机号码
44
+  private phoneNumber:string = '';
45
+  // 获取绑定分机号码
46
+  getPhoneNumber() {
47
+    return this.phoneNumber || sessionStorage.getItem('phoneNumber');
48
+  }
49
+  // 设置绑定分机号码
50
+  setPhoneNumber(phoneNumber: string) {
51
+    this.phoneNumber = phoneNumber;
52
+    sessionStorage.setItem('phoneNumber', phoneNumber);
53
+  }
54
+  // 删除绑定分机号码
55
+  removePhoneNumber() {
56
+    this.phoneNumber = '';
57
+    sessionStorage.removeItem('phoneNumber');
58
+  }
59
+
60
+  // 上次绑定的分机号码
61
+  private phoneNumberPre:string = '';
62
+  // 获取上次绑定分机号码
63
+  getPhoneNumberPre() {
64
+    return this.phoneNumberPre || sessionStorage.getItem('phoneNumberPre');
65
+  }
66
+  // 设置上次绑定分机号码
67
+  setPhoneNumberPre(phoneNumberPre: string) {
68
+    this.phoneNumberPre = phoneNumberPre;
69
+    sessionStorage.setItem('phoneNumberPre', phoneNumberPre);
70
+  }
71
+  // 删除上次绑定分机号码
72
+  removePhoneNumberPre() {
73
+    this.phoneNumberPre = '';
74
+    sessionStorage.removeItem('phoneNumberPre');
75
+  }
76
+
77
+  // 标识(呼叫中心或录音盒)
78
+  // callCenter|box
79
+  private sign:string = '';
80
+  // 获取绑定标识
81
+  getSign() {
82
+    return this.sign || sessionStorage.getItem('sign');
83
+  }
84
+  // 设置绑定标识
85
+  setSign(sign: string) {
86
+    this.sign = sign;
87
+    sessionStorage.setItem('sign', sign);
88
+  }
89
+  // 删除绑定标识
90
+  removeSign() {
91
+    this.sign = '';
92
+    sessionStorage.removeItem('sign');
93
+  }
94
+
95
+  // 呼叫中心服务地址
96
+  private socketUrl:string = '';
97
+  // 获取呼叫中心服务地址
98
+  getSocketUrl() {
99
+    return this.socketUrl || sessionStorage.getItem('socketUrl');
100
+  }
101
+  // 设置呼叫中心服务地址
102
+  setSocketUrl(socketUrl: string) {
103
+    this.socketUrl = socketUrl;
104
+    sessionStorage.setItem('socketUrl', socketUrl);
105
+  }
106
+  // 删除呼叫中心服务地址
107
+  removeSocketUrl() {
108
+    this.socketUrl = '';
109
+    sessionStorage.removeItem('socketUrl');
110
+  }
111
+}

+ 7 - 0
src/app/services/websocket-phone.service.ts

@@ -1,3 +1,10 @@
1
+/*
2
+ * @Author: seimin
3
+ * @Date: 2024-03-11 11:11:09
4
+ * @LastEditors: seimin
5
+ * @LastEditTime: 2024-09-24 16:38:23
6
+ * @Description: 录音盒websocket服务
7
+ */
1 8
 import { Injectable } from "@angular/core";
2 9
 import { Subject, Observable, from } from "rxjs";
3 10
 import * as Atmosphere from "atmosphere.js";

+ 6 - 0
src/app/views/data-dictionary/data-dictionary.component.ts

@@ -321,6 +321,9 @@ export class DataDictionaryComponent implements OnInit {
321 321
         this.hideModal();
322 322
         this.btnLoading = false;
323 323
         if (result["status"] == 200) {
324
+          if(this.checkedDictionary.type === 'dictionary'){
325
+            this.mainService.clearDictionary();
326
+          }
324 327
           this.showPromptModal(this.add ? "新增" : "编辑", true, "");
325 328
         } else {
326 329
           this.showPromptModal(
@@ -359,6 +362,9 @@ export class DataDictionaryComponent implements OnInit {
359 362
       this.hideDelDictionaryModal();
360 363
       this.btnLoading = false;
361 364
       if (result.status == 200) {
365
+        if(this.checkedDictionary.type === 'dictionary'){
366
+          this.mainService.clearDictionary();
367
+        }
362 368
         this.showPromptModal("删除", true, "");
363 369
       } else {
364 370
         this.showPromptModal("删除", false, result.msg);

文件差异内容过多而无法显示
+ 362 - 701
src/app/views/fuwutai/fuwutai.component.html


+ 122 - 13
src/app/views/fuwutai/fuwutai.component.less

@@ -255,7 +255,7 @@
255 255
       border-top: 0;
256 256
       border-radius: 0 0 4px 4px;
257 257
       cursor: pointer;
258
-      z-index: 9;
258
+      z-index: 8;
259 259
     }
260 260
   }
261 261
 
@@ -428,7 +428,7 @@
428 428
     padding: 0 15px;
429 429
     border-bottom: 1px rgb(225, 229, 232) solid;
430 430
     position: relative;
431
-    z-index: 9;
431
+    z-index: 8;
432 432
   }
433 433
 
434 434
   .lists .head .last_time {
@@ -485,7 +485,7 @@
485 485
     padding: 10px 2%;
486 486
     background: #f9fafb;
487 487
     position: relative;
488
-    z-index: 9;
488
+    z-index: 8;
489 489
     display: flex;
490 490
     justify-content: space-between;
491 491
     align-items: center;
@@ -671,7 +671,7 @@
671 671
     width: 70%;
672 672
     border-radius: 4px;
673 673
     color: #78797a;
674
-    background-color: #F0F6ED;
674
+    background-color: #FFF;
675 675
     border: 1px #e5e9ed solid;
676 676
     cursor: pointer;
677 677
     height: 27px;
@@ -951,10 +951,6 @@
951 951
     position: relative;
952 952
     overflow: hidden;
953 953
     display: flex;
954
-
955
-    .left_cots {
956
-      width: 98%;
957
-    }
958 954
   }
959 955
 
960 956
   /* 急标 */
@@ -1257,7 +1253,7 @@
1257 1253
     margin-top: 4px;
1258 1254
     border-radius: 4px;
1259 1255
     color: #78797a;
1260
-    background-color: #F0F6ED;
1256
+    background-color: #FFF;
1261 1257
     border: 1px #e5e9ed solid;
1262 1258
     cursor: pointer;
1263 1259
     height: 27px;
@@ -1557,6 +1553,19 @@
1557 1553
     z-index: 9;
1558 1554
     border-radius: 5px 0 0 5px;
1559 1555
 
1556
+    &.maskFull{
1557
+      &::after{
1558
+        content: '';
1559
+        position: absolute;
1560
+        top: 0;
1561
+        left: 0;
1562
+        width: 100%;
1563
+        height: 100%;
1564
+        z-index: 8;
1565
+        cursor: move;
1566
+      }
1567
+    }
1568
+
1560 1569
     .fixedMark {
1561 1570
       position: fixed;
1562 1571
       left: 0;
@@ -1701,18 +1710,107 @@
1701 1710
       // opacity: .5;
1702 1711
       width: 80px;
1703 1712
       float: left;
1704
-      background: rgba(255, 255, 255, 0.5);
1713
+      // background: rgba(255, 255, 255, 0.5);
1705 1714
       border-radius: 5px 0 0 5px;
1706 1715
       position: relative;
1707 1716
       z-index: 8;
1708 1717
 
1718
+      .fixedMenuWrap{
1719
+        border-radius: 5px;
1720
+        margin-bottom: 16px;
1721
+        .fixedMenu{
1722
+          border-radius: 0!important;
1723
+        }
1724
+      }
1725
+
1709 1726
       .fixedMenu {
1710 1727
         border: 1px solid #e5e9ed;
1711 1728
         color: @primary-color;
1712
-        background: rgba(255, 255, 255, 0.5);
1729
+        background: rgb(255, 255, 255);
1713 1730
         text-align: center;
1714 1731
         border-radius: 5px 0 0 5px;
1715
-        // box-shadow: -3px 4px 15px rgba(234, 233, 233, .5);
1732
+
1733
+        .menuItems {
1734
+          .call-icon{
1735
+            font-size: 26px;
1736
+            color: @primary-color;
1737
+            padding: 16px 0;
1738
+            &.transport-shimang1{
1739
+              color: red;
1740
+            }
1741
+          }
1742
+          .call-status{
1743
+            background-color: @primary-color;
1744
+            color: #fff;
1745
+            width: 100%;
1746
+          }
1747
+          .item {
1748
+            height: 35px;
1749
+            line-height: 35px;
1750
+            padding: 0 6px;
1751
+            cursor: pointer;
1752
+            border-bottom: 1px solid #e5e9ed;
1753
+            user-select: none;
1754
+            &.itemLink {
1755
+              border-bottom: none;
1756
+            }
1757
+
1758
+            &.checked {
1759
+              background: #fff;
1760
+              color: #52ab77;
1761
+              opacity: 1;
1762
+              box-shadow: -3px 4px 7px #eae9e9;
1763
+            }
1764
+          }
1765
+
1766
+          .others {
1767
+            transition: height 0.4s linear;
1768
+            overflow: hidden;
1769
+          }
1770
+        }
1771
+
1772
+        .arrow {
1773
+          cursor: pointer;
1774
+        }
1775
+      }
1776
+    }
1777
+  }
1778
+
1779
+  // 左侧悬浮菜单
1780
+  .fixedLeft {
1781
+    position: fixed;
1782
+    top: 40%;
1783
+    left: 0;
1784
+    z-index: 8;
1785
+    border-radius: 5px 0 0 5px;
1786
+
1787
+    &.maskFull{
1788
+      &::after{
1789
+        content: '';
1790
+        position: absolute;
1791
+        top: 0;
1792
+        left: 0;
1793
+        width: 100%;
1794
+        height: 100%;
1795
+        z-index: 8;
1796
+        cursor: move;
1797
+      }
1798
+    }
1799
+
1800
+    .right {
1801
+      width: 80px;
1802
+      float: left;
1803
+      // background: rgba(255, 255, 255, 0.5);
1804
+      border-radius: 5px 0 0 5px;
1805
+      position: relative;
1806
+      z-index: 8;
1807
+
1808
+      .fixedMenu {
1809
+        border: 1px solid #e5e9ed;
1810
+        color: @primary-color;
1811
+        background: rgb(255, 255, 255);
1812
+        text-align: center;
1813
+        border-radius: 0 5px 5px 0;
1716 1814
 
1717 1815
         &.hujiaozhongxin {
1718 1816
           margin-bottom: 5px;
@@ -1723,9 +1821,10 @@
1723 1821
             height: 35px;
1724 1822
             line-height: 35px;
1725 1823
             padding: 0 6px;
1726
-            cursor: default;
1824
+            cursor: pointer;
1727 1825
             border-bottom: 1px solid #e5e9ed;
1728 1826
             user-select: none;
1827
+            text-align: left;
1729 1828
             &.itemLink {
1730 1829
               border-bottom: none;
1731 1830
             }
@@ -1952,6 +2051,16 @@
1952 2051
                     &.flex7{
1953 2052
                       flex: 7;
1954 2053
                     }
2054
+                    .ant-input-clear-icon{
2055
+                      align-self: center;
2056
+                      font-style: normal;
2057
+                      cursor: pointer;
2058
+                      margin-left: 8px;
2059
+                      font-size: 12px;
2060
+                      border-bottom: 1px solid #49b856;
2061
+                      color: #49b856;
2062
+                      flex-shrink: 0;
2063
+                    }
1955 2064
                     .name{
1956 2065
                       flex-shrink: 0;
1957 2066
                       width: 6em;

文件差异内容过多而无法显示
+ 1024 - 357
src/app/views/fuwutai/fuwutai.component.ts


+ 12 - 0
src/app/views/fuwutai/fuwutai.module.ts

@@ -12,6 +12,12 @@ import { KnowledgeLookModule } from 'src/app/components/knowledge-look/knowledge
12 12
 import { IncidentDetailModule } from 'src/app/components/incidentManagement/incident-detail/incident-detail.module';
13 13
 import { IncidentRejectModule } from 'src/app/components/incidentManagement/incident-reject/incident-reject.module';
14 14
 import { IncidentSubstitutionModule } from 'src/app/components/incidentManagement/incident-substitution/incident-substitution.module';
15
+import { IncidentHandleModule } from 'src/app/components/incidentManagement/incident-handle/incident-handle.module';
16
+import { IncidentSerVisitModule } from 'src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.module';
17
+import { IncidentSerMessageModule } from 'src/app/components/incidentManagement/incident-ser-message/incident-ser-message.module';
18
+import { IncidentSerCallModule } from 'src/app/components/incidentManagement/incident-ser-call/incident-ser-call.module';
19
+import { VirtualScrollerModule } from 'ngx-virtual-scroller';
20
+import { BindExtensionNumberModule } from 'src/app/components/bind-extension-number/bind-extension-number.module';
15 21
 
16 22
 
17 23
 @NgModule({
@@ -29,6 +35,12 @@ import { IncidentSubstitutionModule } from 'src/app/components/incidentManagemen
29 35
     IncidentDetailModule,
30 36
     IncidentRejectModule,
31 37
     IncidentSubstitutionModule,
38
+    IncidentHandleModule,
39
+    IncidentSerVisitModule,
40
+    IncidentSerMessageModule,
41
+    IncidentSerCallModule,
42
+    VirtualScrollerModule,
43
+    BindExtensionNumberModule,
32 44
   ]
33 45
 })
34 46
 export class FuwutaiModule { }

+ 0 - 2
src/app/views/hushijiandan/hushijiandan.component.ts

@@ -4473,7 +4473,6 @@ export class HushijiandanComponent implements OnInit {
4473 4473
     }
4474 4474
     localStorage.removeItem("user");
4475 4475
     localStorage.removeItem("menu");
4476
-    localStorage.removeItem("phones");
4477 4476
     localStorage.removeItem("index");
4478 4477
 
4479 4478
     // 假退出
@@ -4486,7 +4485,6 @@ export class HushijiandanComponent implements OnInit {
4486 4485
         }
4487 4486
         localStorage.removeItem("user");
4488 4487
         localStorage.removeItem("menu");
4489
-        localStorage.removeItem("phones");
4490 4488
         localStorage.removeItem("index");
4491 4489
       }
4492 4490
     });

+ 1 - 1
src/app/views/incident-config/incident-config.component.html

@@ -18,7 +18,7 @@
18 18
   </ng-container>
19 19
   <!-- 数据字典 -->
20 20
   <ng-container *ngIf="activeTagId === 3">
21
-    <app-configuration-dictionary></app-configuration-dictionary>
21
+    <app-configuration-dictionary [dictionaryKeyList]="dictionaryKeyList"></app-configuration-dictionary>
22 22
   </ng-container>
23 23
   <!-- 消息通知 -->
24 24
   <ng-container *ngIf="activeTagId === 4">

+ 11 - 0
src/app/views/incident-config/incident-config.component.ts

@@ -22,6 +22,17 @@ export class IncidentConfigComponent implements OnInit, AfterViewInit {
22 22
     { id: 7, name: '院区配置',},
23 23
   ];
24 24
 
25
+  // 数据字典
26
+  dictionaryKeyList:any[] = [
27
+    { id: 1, name: '积分配置', key: "incident_category_score"},
28
+    { id: 2, name: '事件来源', key: "incident_source"},
29
+    { id: 3, name: '处理结果', key: "incident_closecode"},
30
+    { id: 4, name: '处理方式', key: "incident_handle_type"},
31
+    { id: 5, name: '状态', key: "incident_status"},
32
+    { id: 6, name: '维修记录', key: "repair_type"},
33
+    { id: 7, name: '满意度评价', key: "incident_degree"},
34
+  ]
35
+
25 36
   ngOnInit(): void {}
26 37
 
27 38
   ngAfterViewInit(){

+ 3 - 3
src/app/views/incident-config/incident-config.module.ts

@@ -6,11 +6,11 @@ import { IncidentConfigComponent } from './incident-config.component';
6 6
 import { ShareModule } from 'src/app/share/share.module';
7 7
 import { ConfigurationCategoryComponent } from 'src/app/components/configurationCenter/configuration-category/configuration-category.component';
8 8
 import { ConfigurationPriorityComponent } from 'src/app/components/configurationCenter/configuration-priority/configuration-priority.component';
9
-import { ConfigurationDictionaryComponent } from 'src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.component';
10 9
 import { ConfigurationManHourComponent } from 'src/app/components/configurationCenter/configuration-manHour/configuration-manHour.component';
11 10
 import { ConfigurationDeptUserComponent } from 'src/app/components/configurationCenter/configuration-deptUser/configuration-deptUser.component';
12 11
 import { ConfigurationMessageComponent } from 'src/app/components/configurationCenter/configuration-message/configuration-message.component';
13 12
 import { ConfigurationHospitalComponent } from 'src/app/components/configurationCenter/configuration-hospital/configuration-hospital.component';
13
+import { ConfigurationDictionaryModule } from 'src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.module';
14 14
 
15 15
 
16 16
 @NgModule({
@@ -18,7 +18,6 @@ import { ConfigurationHospitalComponent } from 'src/app/components/configuration
18 18
     IncidentConfigComponent,
19 19
     ConfigurationCategoryComponent,
20 20
     ConfigurationPriorityComponent,
21
-    ConfigurationDictionaryComponent,
22 21
 		ConfigurationManHourComponent,
23 22
 		ConfigurationDeptUserComponent,
24 23
     ConfigurationMessageComponent,
@@ -27,7 +26,8 @@ import { ConfigurationHospitalComponent } from 'src/app/components/configuration
27 26
   imports: [
28 27
     CommonModule,
29 28
     IncidentConfigRoutingModule,
30
-    ShareModule
29
+    ShareModule,
30
+    ConfigurationDictionaryModule,
31 31
   ]
32 32
 })
33 33
 export class IncidentConfigModule { }

+ 1 - 1
src/app/views/inspection-plan-config/inspection-plan-config.component.ts

@@ -207,7 +207,7 @@ export class InspectionPlanConfigComponent implements OnInit, AfterViewInit {
207 207
       group2: {
208 208
         groupName: keyword,
209 209
         hospitals: this.currentHospital.id,
210
-        type: 1,
210
+        type: 3,
211 211
       },
212 212
       idx: 0,
213 213
       sum: 10,

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

@@ -46,6 +46,7 @@
46 46
       <strong>点击下载谷歌浏览器👉</strong>
47 47
       <a [href]="http.domain+'/chrome64/ChromeSetup32.exe'">win32</a>
48 48
       <a [href]="http.domain+'/chrome64/ChromeSetup64.exe'">win64</a>
49
+      <a href="javascript:;" (click)="showScreen($event)">录屏</a>
49 50
     </div>
50 51
   </div>
51 52
 </div>

+ 33 - 0
src/app/views/login/login.component.ts

@@ -9,6 +9,8 @@ import { baseUrlType } from "src/app/type/types";
9 9
 import { ToolService } from 'src/app/services/tool.service';
10 10
 import { Title } from '@angular/platform-browser';
11 11
 import { MarkingService } from 'src/app/services/marking.service';
12
+
13
+declare var MediaRecorder: any;
12 14
 @Component({
13 15
   selector: "app-login",
14 16
   templateUrl: "./login.component.html",
@@ -301,4 +303,35 @@ export class LoginComponent implements OnInit {
301 303
     });
302 304
     return parents;
303 305
   }
306
+
307
+  // 录屏
308
+  isRecording:boolean = false;
309
+  async showScreen(e){
310
+    if(this.isRecording || !navigator.mediaDevices){
311
+      return;
312
+    }
313
+    e.preventDefault();
314
+    let stream = await (navigator.mediaDevices as any).getDisplayMedia({ video: true });
315
+    let mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9") ? "video/webm; codecs=vp9" : "video/webm";
316
+
317
+    let mediaRecorder = new MediaRecorder(stream, { mimeType: mime });
318
+    let chunks = [];
319
+    //录制
320
+    mediaRecorder.addEventListener('dataavailable', (e) => {
321
+      this.isRecording = true;
322
+      chunks.push(e.data)
323
+    })
324
+    //停止
325
+    mediaRecorder.addEventListener('stop', () => {
326
+      let blob = new Blob(chunks, { type: chunks[0].type });
327
+      let url = URL.createObjectURL(blob);
328
+      let a = document.createElement('a');
329
+      a.href = url;
330
+      a.download = 'video.webm';
331
+      a.click();
332
+      this.isRecording = false;
333
+    })
334
+    //手动启动
335
+    mediaRecorder.start()
336
+  }
304 337
 }

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

@@ -504,7 +504,6 @@ export class MainComponent implements OnInit {
504 504
     }
505 505
     localStorage.removeItem("user");
506 506
     localStorage.removeItem("menu");
507
-    localStorage.removeItem("phones");
508 507
     localStorage.removeItem("index");
509 508
 
510 509
     // 假退出
@@ -517,7 +516,6 @@ export class MainComponent implements OnInit {
517 516
         }
518 517
         localStorage.removeItem("user");
519 518
         localStorage.removeItem("menu");
520
-        localStorage.removeItem("phones");
521 519
         localStorage.removeItem("index");
522 520
       }
523 521
     });

+ 1 - 1
src/app/views/other-config/other-config.component.html

@@ -18,7 +18,7 @@
18 18
   </ng-container>
19 19
   <!-- 数据字典 -->
20 20
   <ng-container *ngIf="activeTagId === 3">
21
-    <!-- <app-configuration-dictionary></app-configuration-dictionary> -->
21
+    <app-configuration-dictionary [dictionaryKeyList]="dictionaryKeyList"></app-configuration-dictionary>
22 22
   </ng-container>
23 23
 </div>
24 24
 

+ 6 - 1
src/app/views/other-config/other-config.component.ts

@@ -15,9 +15,14 @@ export class OtherConfigComponent implements OnInit, AfterViewInit {
15 15
   tagList:any = [
16 16
     { id: 1, name: '呼叫中心',},
17 17
     { id: 2, name: '微信配置',},
18
-    // { id: 3, name: '数据字典',},
18
+    { id: 3, name: '数据字典',},
19 19
   ];
20 20
 
21
+  // 数据字典
22
+  dictionaryKeyList:any[] = [
23
+    { id: 1, name: '呼叫中心分机号', key: "hjzx_cornet"},
24
+  ]
25
+
21 26
   ngOnInit(): void {}
22 27
 
23 28
   ngAfterViewInit(){

+ 3 - 1
src/app/views/other-config/other-config.module.ts

@@ -6,6 +6,7 @@ import { OtherConfigComponent } from './other-config.component';
6 6
 import { ShareModule } from 'src/app/share/share.module';
7 7
 import { ConfigurationWechatComponent } from 'src/app/components/configurationCenter/configuration-wechat/configuration-wechat.component';
8 8
 import { ConfigurationCallcenterComponent } from 'src/app/components/configurationCenter/configuration-callcenter/configuration-callcenter.component';
9
+import { ConfigurationDictionaryModule } from 'src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.module';
9 10
 
10 11
 
11 12
 @NgModule({
@@ -17,7 +18,8 @@ import { ConfigurationCallcenterComponent } from 'src/app/components/configurati
17 18
   imports: [
18 19
     CommonModule,
19 20
     OtherConfigRoutingModule,
20
-    ShareModule
21
+    ShareModule,
22
+    ConfigurationDictionaryModule,
21 23
   ]
22 24
 })
23 25
 export class OtherConfigModule { }

+ 72 - 74
src/app/views/pathology/pathology.component.ts

@@ -48,8 +48,8 @@ export class PathologyComponent implements OnInit, OnDestroy {
48 48
   })
49 49
   osComponentRef5: OverlayScrollbarsComponent;
50 50
   constructor(
51
-	private mainService: MainService, 
52
-	public router: Router, 
51
+	private mainService: MainService,
52
+	public router: Router,
53 53
 	private route: ActivatedRoute,
54 54
 	public tool: ToolService,
55 55
 	private fb: FormBuilder,
@@ -95,7 +95,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
95 95
   completedFlag = false;
96 96
   completedSearchKey = "";
97 97
   completedLoad = false;
98
-	
98
+
99 99
 	barCode:any; //条码搜索
100 100
   // other
101 101
   loginUser: any = localStorage.getItem("user")
@@ -117,7 +117,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
117 117
 	fixationModal:boolean = false //标本接收固定
118 118
 	verificationMoadl:boolean = false //标本核验
119 119
 	specimenCode:any; //标本条码
120
-	listOneData:any=[]; 
120
+	listOneData:any=[];
121 121
 	listOneLength:any;
122 122
 	pageOneIndex:any = 1;
123 123
 	pageSize:any = 10;
@@ -223,7 +223,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
223 223
       this.runTime();
224 224
     }, 500);
225 225
   }
226
-	
226
+
227 227
 	//tab切换
228 228
 	tabClick(type){
229 229
 		this.activeIndex = type
@@ -237,7 +237,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
237 237
 			this.getHospitalData()
238 238
 		}
239 239
 	}
240
-	
240
+
241 241
 	// 获取今日接收数据
242 242
 	getToday(){
243 243
 		this.mainService
@@ -252,7 +252,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
252 252
 	changeUserInp(e){
253 253
 		this.changeInpSubjectUser.next([e]);
254 254
 	}
255
-	
255
+
256 256
 	// 获取配送人
257 257
 	getUserData(e){
258 258
 		let query={
@@ -269,7 +269,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
269 269
 			this.userData = res.list
270 270
 		});
271 271
 	}
272
-	
272
+
273 273
 	// 搜索
274 274
 	search() {
275 275
 	  this.pageOneIndex = 1;
@@ -308,7 +308,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
308 308
 	      that.listOneLength = data.totalNum;
309 309
 	    });
310 310
 	}
311
-	
311
+
312 312
 	// 实时术中快速数据
313 313
 	getSpeedinessList() {
314 314
 		var that = this;
@@ -330,7 +330,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
330 330
 		    that.listTwoLength = data.totalNum;
331 331
 		  });
332 332
 	}
333
-	
333
+
334 334
 	// 打包配送
335 335
 	getPackList() {
336 336
 	  var that = this;
@@ -350,7 +350,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
350 350
 	      that.listThreeLength = data.totalNum;
351 351
 	    });
352 352
 	}
353
-	
353
+
354 354
 	// 查看
355 355
 	project:any = [];
356 356
 	oneLook(e,data){
@@ -372,7 +372,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
372 372
 			}
373 373
 		});
374 374
 	}
375
-	
375
+
376 376
 	// 关闭查看
377 377
 	closeDetail(){
378 378
 		this.listDetailMoadl = false
@@ -380,7 +380,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
380 380
 			document.getElementById('Binput').focus();
381 381
 		},200)
382 382
 	}
383
-	
383
+
384 384
 	// 接收
385 385
 	connect(){
386 386
 		this.mainService.generateBatchNumber()
@@ -395,7 +395,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
395 395
 			}
396 396
 		})
397 397
 	}
398
-	
398
+
399 399
 	// 打包
400 400
 	packaging(){
401 401
 		this.mainService.generateBatchNumber()
@@ -410,14 +410,14 @@ export class PathologyComponent implements OnInit, OnDestroy {
410 410
 			}
411 411
 		})
412 412
 	}
413
-	
413
+
414 414
 	//打包查看标本
415 415
 	threeLook(e,data){
416 416
 		localStorage.setItem("pathologyActiveIndex",this.activeIndex)
417 417
 		localStorage.setItem("dataType",'');
418 418
 		this.router.navigateByUrl(`/pathologyScan?packId=${data.id}&businessType=packagLook`);
419 419
 	}
420
-	
420
+
421 421
 	// 配送
422 422
 	distributionModal:boolean = false
423 423
 	distribution(e,data){
@@ -431,7 +431,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
431 431
 		this.handoverUserId = null
432 432
 		this.distributionModal = true
433 433
 	}
434
-	
434
+
435 435
 	// 确定配送
436 436
 	submitDistributionForm(){
437 437
 		for (const i in this.validateForm.controls) {
@@ -459,9 +459,9 @@ export class PathologyComponent implements OnInit, OnDestroy {
459 459
 		      this.message.error(data.msg)
460 460
 		    }
461 461
 		  });
462
-		
462
+
463 463
 	}
464
-	
464
+
465 465
 	// 取消配送
466 466
 	hideDistributionModal(){
467 467
 		this.distributionModal = false
@@ -469,16 +469,16 @@ export class PathologyComponent implements OnInit, OnDestroy {
469 469
 			document.getElementById('Binput').focus();
470 470
 		},200)
471 471
 	}
472
-	
472
+
473 473
 	changeHospitalInp(e){
474 474
 		// this.changeInpSubjectHospital.next([e]);
475 475
 	}
476
-	
476
+
477 477
 	changeDepartmentInp(e){
478 478
 		this.isDeptLoading = true
479 479
 		this.changeInpSubjectDepartment.next([e]);
480 480
 	}
481
-	
481
+
482 482
 	// 获取院区
483 483
 	getHospitalData(){
484 484
 		let arr = this.tool.getHospitalList().filter(i=>i.parent==undefined)
@@ -496,7 +496,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
496 496
 		//     this.hospital = res.list;
497 497
 		//   });
498 498
 	}
499
-	
499
+
500 500
 	// 选择院区
501 501
 	hospitalId:any=null;
502 502
 	changeHospDate(e){
@@ -504,7 +504,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
504 504
 		this.hospitalId = e
505 505
 		this.getDepartmentData('',e)
506 506
 	}
507
-	
507
+
508 508
 	// 获取科室
509 509
 	isDeptLoading:boolean = false;
510 510
 	getDepartmentData(e,hospital){
@@ -527,7 +527,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
527 527
 			  });
528 528
 		});
529 529
 	}
530
-	
530
+
531 531
 	// 补打
532 532
 	printModal:boolean = false;
533 533
 	parintLoading:boolean = false;
@@ -535,7 +535,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
535 535
 		this.rowData = item
536 536
 		this.printModal = true
537 537
 	}
538
-	
538
+
539 539
 	// 取消补打
540 540
 	hidePrintModal(){
541 541
 		this.printModal = false
@@ -543,7 +543,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
543 543
 			document.getElementById('Binput').focus();
544 544
 		},200)
545 545
 	}
546
-	
546
+
547 547
 	// 确定补打
548 548
 	confirmPrintDel(){
549 549
 		this.parintLoading = true
@@ -571,9 +571,9 @@ export class PathologyComponent implements OnInit, OnDestroy {
571 571
 				this.message.error(data.msg)
572 572
 			}
573 573
 		});
574
-		
574
+
575 575
 	}
576
-	
576
+
577 577
 	// 接收时间
578 578
 	startDate:any;
579 579
 	endDate:any;
@@ -582,12 +582,12 @@ export class PathologyComponent implements OnInit, OnDestroy {
582 582
 		this.endDate = format(result[1], 'yyyy-MM-dd' +' '+'23:59:59');
583 583
 		this.acceptTime = [this.startDate,this.endDate]
584 584
 	}
585
-	
585
+
586 586
 	// 获取批次号
587 587
 	generateBatchNumber(){
588 588
 
589 589
 	}
590
-	
590
+
591 591
 	// 标本条码搜索
592 592
 	errorcODEMsg:any = null
593 593
 	batchNo:any = null;
@@ -625,7 +625,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
625 625
 				})
626 626
 			}
627 627
 		})
628
-		
628
+
629 629
 	}
630 630
 	// 获取标本接收数据
631 631
 	pageReceptionIndex:any = 1;
@@ -661,7 +661,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
661 661
 				this.listReceptionLength = res.totalNum;
662 662
 		  });
663 663
 	}
664
-	
664
+
665 665
 	// 确定接收包
666 666
 	submitReceptionForm(){
667 667
 		for (const i in this.validateConnectForm.controls) {
@@ -692,7 +692,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
692 692
 		    }
693 693
 		  });
694 694
 	}
695
-	
695
+
696 696
 	// 关闭配送接收
697 697
 	hideReceptionModal(){
698 698
 		this.receptionModal = false
@@ -700,12 +700,12 @@ export class PathologyComponent implements OnInit, OnDestroy {
700 700
 			document.getElementById('Binput').focus();
701 701
 		},200)
702 702
 	}
703
-	
703
+
704 704
 	// 选择固定时间
705 705
 	formChangeDate(result){
706 706
 	  this.startDate = format(result, 'yyyy-MM-dd HH:mm:ss');
707 707
 	}
708
-	
708
+
709 709
 	// 监听人员交接接收人工号输入
710 710
 	connectUserId:any = null;
711 711
 	receptionName:any = null;
@@ -729,7 +729,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
729 729
 				}
730 730
 		  });
731 731
 	}
732
-	
732
+
733 733
 	// 监听人员交接配送人工号输入
734 734
 	dispatchingUserId:any = null;
735 735
 	dispatchingName:any = null;
@@ -753,7 +753,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
753 753
 				}
754 754
 		  });
755 755
 	}
756
-	
756
+
757 757
 	// 确定交接
758 758
 	mustReceived:any = null;
759 759
 	currReceived:any = null;
@@ -779,7 +779,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
779 779
 				this.dispatchingName = null;
780 780
 				this.dispatchingUserId = null
781 781
 			}
782
-			
782
+
783 783
 			this.receptionName = null;
784 784
 			this.connectUserId = null
785 785
 			this.connectModal = true
@@ -789,7 +789,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
789 789
 	hideConnectModal(){
790 790
 		this.connectModal = false
791 791
 	}
792
-	
792
+
793 793
 	// 确定人员交接
794 794
 	btnConnectLoading:boolean = false;
795 795
 	submitConnectForm(){
@@ -815,21 +815,21 @@ export class PathologyComponent implements OnInit, OnDestroy {
815 815
 		    }
816 816
 		  });
817 817
 	}
818
-	
818
+
819 819
 	// 确定打包
820 820
 	packModal:boolean = false;
821 821
 	submitScanForm(){
822 822
 		this.packModal = true
823 823
 		// this.hideSpecimenModal()
824 824
 	}
825
-	
825
+
826 826
 	// 确定打包并打印
827 827
 	btnPackLoading:boolean = false;
828 828
 	printData:any = [];
829 829
 	submitPackForm(){
830 830
 		let that = this
831 831
 		let data: any = {
832
-			
832
+
833 833
 		};
834 834
 
835 835
 		this.btnPackLoading = true;
@@ -857,7 +857,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
857 857
 				}
858 858
 		  });
859 859
 	}
860
-	
860
+
861 861
 	// 关闭打包并打印
862 862
 	hidePackModal(){
863 863
 		this.packModal = false
@@ -865,7 +865,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
865 865
 			document.getElementById('specimen').focus();
866 866
 		},200)
867 867
 	}
868
-	
868
+
869 869
 	// 关闭交接/打包
870 870
 	hideSpecimenModal(){
871 871
 		this.barCode = null;
@@ -875,7 +875,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
875 875
 			document.getElementById('Binput').focus();
876 876
 		},200)
877 877
 	}
878
-	
878
+
879 879
 	// 获取标本详情
880 880
 	getSampleData(item){
881 881
 		// this.isSpinning = true
@@ -896,7 +896,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
896 896
 			}
897 897
 		});
898 898
 	}
899
-	
899
+
900 900
 	// 获取科室
901 901
 	getDept(){
902 902
 		this.setSpecimen()
@@ -925,7 +925,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
925 925
 			  .subscribe((res) => {
926 926
 			    that.operationData = res.list;
927 927
 			  });
928
-				
928
+
929 929
 			that.mainService
930 930
 			  .getFetchDataList("data", "department", data2)
931 931
 			  .subscribe((res) => {
@@ -934,7 +934,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
934 934
 			  });
935 935
 		});
936 936
 	}
937
-	
937
+
938 938
 	// 获取关联科室详情
939 939
 	getDeptDetail(){
940 940
 		this.mainService
@@ -954,7 +954,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
954 954
 				}
955 955
 		  });
956 956
 	}
957
-	
957
+
958 958
 	// 获取是否关联标本间
959 959
 	setSpecimen(){
960 960
 		this.validateForm = this.fb.group({
@@ -964,7 +964,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
964 964
 		});
965 965
 		this.relevanceModal = true
966 966
 	}
967
-	
967
+
968 968
 	// 确定关联科室
969 969
 	btnLoading:boolean = false;
970 970
 	submitForm(){
@@ -998,7 +998,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
998 998
 		    }
999 999
 		  });
1000 1000
 	}
1001
-	
1001
+
1002 1002
 	getNewDept(){
1003 1003
 		let postData = {
1004 1004
 		  currentHosId: this.hosId,
@@ -1024,12 +1024,12 @@ export class PathologyComponent implements OnInit, OnDestroy {
1024 1024
 		  }
1025 1025
 		});
1026 1026
 	}
1027
-	
1027
+
1028 1028
 	// 获取当前用户信息
1029 1029
 	getCurrentUserNow() {
1030 1030
 	  this.mainService.getCurrentUser1().subscribe((data:any) => {
1031 1031
 	    if (data["status"] == 200) {
1032
-				this.loginUser = data.data 
1032
+				this.loginUser = data.data
1033 1033
 	      let user = JSON.parse(localStorage.getItem("user"));
1034 1034
 	      user.user.dept = data["data"].dept;
1035 1035
 	      user.user.currentHospital = data["data"].currentHospital;
@@ -1037,7 +1037,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1037 1037
 	    }
1038 1038
 	  });
1039 1039
 	}
1040
-	
1040
+
1041 1041
 	// 输入工号查询姓名
1042 1042
 	handoverUserId:any = null;
1043 1043
 	numberChange(e){
@@ -1060,7 +1060,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1060 1060
 				}
1061 1061
 		  });
1062 1062
 	}
1063
-	
1063
+
1064 1064
 	// 提交固定标本接收
1065 1065
 	submitVerificationForm(){
1066 1066
 		for (const i in this.validateVerificationForm.controls) {
@@ -1068,7 +1068,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1068 1068
 		  this.validateVerificationForm.controls[i].updateValueAndValidity();
1069 1069
 		}
1070 1070
 		if (this.validateVerificationForm.invalid) return;
1071
-		
1071
+
1072 1072
 		let data: any = {
1073 1073
 			id:this.codeData.id,
1074 1074
 			specimenDeptId:this.validateForm.value.specimen,
@@ -1092,14 +1092,14 @@ export class PathologyComponent implements OnInit, OnDestroy {
1092 1092
 			}
1093 1093
 		});
1094 1094
 	}
1095
-	
1095
+
1096 1096
 	// 成功/失败提示框
1097 1097
 	closeModel(){
1098 1098
 		this.hideReceptionModal()
1099 1099
 		this.hideConnectModal()
1100 1100
 		this.hideSpecimenModal()
1101 1101
 	}
1102
-	
1102
+
1103 1103
 	// 关闭配送信息
1104 1104
 	hideVerificationModal(){
1105 1105
 		this.verificationMoadl = false
@@ -1113,13 +1113,13 @@ export class PathologyComponent implements OnInit, OnDestroy {
1113 1113
 		this.businessType = 'connect'
1114 1114
 		this.changeInpSubjectSpecimen.next([e]);
1115 1115
 	}
1116
-	
1116
+
1117 1117
 	// 监听交接/打包扫描条码
1118 1118
 	tableLoading:boolean = false;
1119 1119
 	codeChange(e){
1120 1120
 		this.changeInpSubject.next([e]);
1121 1121
 	}
1122
-	
1122
+
1123 1123
 	// 标本接收搜索条码
1124 1124
 	errorMsg:any = null;
1125 1125
 	searchSpecimenData(e){
@@ -1154,7 +1154,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1154 1154
 			}
1155 1155
 		})
1156 1156
 	}
1157
-	
1157
+
1158 1158
 	// 关闭多只标本
1159 1159
 	hideMultiModal(){
1160 1160
 		this.multiModal = false
@@ -1162,7 +1162,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1162 1162
 			document.getElementById('specimen').focus();
1163 1163
 		},200)
1164 1164
 	}
1165
-	
1165
+
1166 1166
 	// 监听多只标本扫描
1167 1167
 	codeMultiChange(e){
1168 1168
 		if(!e){
@@ -1191,7 +1191,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1191 1191
 			})
1192 1192
 		},500)
1193 1193
 	}
1194
-	
1194
+
1195 1195
 	// 多只标本确定接受
1196 1196
 	btnMultiLoading:boolean = false;
1197 1197
 	submitMultiForm(){
@@ -1199,7 +1199,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1199 1199
 		this.btnMultiLoading = false
1200 1200
 		this.hideMultiModal()
1201 1201
 	}
1202
-	
1202
+
1203 1203
 	pathologyLogs:any=[];
1204 1204
 	specimenList:any=[]
1205 1205
 	stepLength:any = 0;
@@ -1208,19 +1208,19 @@ export class PathologyComponent implements OnInit, OnDestroy {
1208 1208
 	// 	this.getSampleData(item)
1209 1209
 	// 	clearInterval(this.logTimer);
1210 1210
 	// 	if(type==1){
1211
-			
1211
+
1212 1212
 	// 	}else if(type==2){
1213
-			
1213
+
1214 1214
 	// 	}else{
1215
-			
1215
+
1216 1216
 	// 	}
1217 1217
 	// }
1218
-	
1218
+
1219 1219
 	closeDetailMoadl(){
1220 1220
 		this.detailMoadl = false
1221 1221
 	}
1222
-	
1223
- 
1222
+
1223
+
1224 1224
   // 自动刷新倒计时
1225 1225
   autoUpdate(flag = true) {
1226 1226
     if (flag) {
@@ -1246,7 +1246,6 @@ export class PathologyComponent implements OnInit, OnDestroy {
1246 1246
     }
1247 1247
     localStorage.removeItem("user");
1248 1248
     localStorage.removeItem("menu");
1249
-    localStorage.removeItem("phones");
1250 1249
     localStorage.removeItem("index");
1251 1250
 		localStorage.removeItem("scanCodeData");
1252 1251
 		localStorage.removeItem("dataType");
@@ -1261,7 +1260,6 @@ export class PathologyComponent implements OnInit, OnDestroy {
1261 1260
         }
1262 1261
         localStorage.removeItem("user");
1263 1262
         localStorage.removeItem("menu");
1264
-        localStorage.removeItem("phones");
1265 1263
         localStorage.removeItem("index");
1266 1264
 				localStorage.removeItem("scanCodeData");
1267 1265
 				localStorage.removeItem("dataType");
@@ -1357,7 +1355,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1357 1355
       }
1358 1356
     }, 1000);
1359 1357
   }
1360
-	
1358
+
1361 1359
 	promptModalShow:boolean = false;
1362 1360
 	promptContent:any = null;
1363 1361
 	ifSuccess:any = null;

+ 66 - 68
src/app/views/pathologyScan/pathologyScan.component.ts

@@ -48,14 +48,14 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
48 48
   })
49 49
   osComponentRef5: OverlayScrollbarsComponent;
50 50
   constructor(
51
-	private mainService: MainService, 
52
-	public router: Router, 
51
+	private mainService: MainService,
52
+	public router: Router,
53 53
 	private route: ActivatedRoute,
54 54
 	public tool: ToolService,
55 55
 	private fb: FormBuilder,
56 56
 	private message: NzMessageService,
57 57
 	private sanitizer: DomSanitizer,
58
-	
58
+
59 59
 	) {}
60 60
   // 今日药单量
61 61
   todayTotal: undefined;
@@ -96,7 +96,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
96 96
   completedFlag = false;
97 97
   completedSearchKey = "";
98 98
   completedLoad = false;
99
-	
99
+
100 100
 	barCode:any; //条码搜索
101 101
   // other
102 102
   loginUser: any = localStorage.getItem("user")
@@ -118,7 +118,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
118 118
 	fixationModal:boolean = false //标本接收固定
119 119
 	verificationMoadl:boolean = false //标本核验
120 120
 	specimenCode:any; //标本条码
121
-	listOneData:any=[]; 
121
+	listOneData:any=[];
122 122
 	listOneLength:any;
123 123
 	pageOneIndex:any = 1;
124 124
 	pageSize:any = 10;
@@ -210,7 +210,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
210 210
 			if(this.dataType=='pathologyPack'){
211 211
 				this.getJsData(4)
212 212
 			}
213
-			if(this.scanCodeData.pathologySpecimenDTOList && 
213
+			if(this.scanCodeData.pathologySpecimenDTOList &&
214 214
 			this.scanCodeData.pathologySpecimenDTOList.length>1){
215 215
 				this.muArr = []
216 216
 				for(let i of this.scanCodeData.pathologySpecimenDTOList){
@@ -219,7 +219,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
219 219
 					}
220 220
 				}
221 221
 				this.getJsData(3)
222
-			}else if(this.scanCodeData.pathologySpecimenDTOList && 
222
+			}else if(this.scanCodeData.pathologySpecimenDTOList &&
223 223
 			this.scanCodeData.pathologySpecimenDTOList.length==1){
224 224
 				this.getJsData(1)
225 225
 			}
@@ -233,9 +233,9 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
233 233
 			}
234 234
 			this.getJsData(1)
235 235
 		}
236
-		
236
+
237 237
   }
238
-	
238
+
239 239
 	// 分页
240 240
 	noType:any='none';
241 241
 	pageChange(){
@@ -248,7 +248,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
248 248
 			this.getJsData(1)
249 249
 		}
250 250
 	}
251
-	
251
+
252 252
   // 当前时间日期
253 253
   runTime() {
254 254
     clearTimeout(this.timer);
@@ -266,7 +266,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
266 266
 			document.getElementById('specimen').focus();
267 267
 		},200)
268 268
 	}
269
-	
269
+
270 270
 	// 打包
271 271
 	packaging(){
272 272
 		this.fixationModal = true
@@ -275,7 +275,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
275 275
 			document.getElementById('specimen').focus();
276 276
 		},200)
277 277
 	}
278
-	
278
+
279 279
 	// 配送
280 280
 	distributionModal:boolean = false
281 281
 	distribution(e,data){
@@ -288,14 +288,14 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
288 288
 		this.handoverUserId = null
289 289
 		this.distributionModal = true
290 290
 	}
291
-	
291
+
292 292
 	// 确定配送
293 293
 	submitDistributionForm(){
294 294
 		this.btnLoading = true
295 295
 		this.btnLoading = false
296 296
 		this.hideDistributionModal()
297 297
 	}
298
-	
298
+
299 299
 	// 取消配送
300 300
 	hideDistributionModal(){
301 301
 		this.distributionModal = false
@@ -303,23 +303,23 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
303 303
 			document.getElementById('Binput').focus();
304 304
 		},200)
305 305
 	}
306
-	
306
+
307 307
 	changeHospitalInp(e){
308 308
 		// this.changeInpSubjectHospital.next([e]);
309 309
 	}
310
-	
310
+
311 311
 	changeDepartmentInp(e){
312 312
 		// this.isDeptLoading = true
313 313
 		// this.changeInpSubjectDepartment.next([e]);
314 314
 	}
315
-	
315
+
316 316
 	// 补打
317 317
 	printModal:boolean = false;
318 318
 	parintLoading:boolean = false;
319 319
 	reprint(e,data){
320 320
 		this.printModal = true
321 321
 	}
322
-	
322
+
323 323
 	// 取消补打
324 324
 	hidePrintModal(){
325 325
 		this.printModal = false
@@ -327,7 +327,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
327 327
 			document.getElementById('Binput').focus();
328 328
 		},200)
329 329
 	}
330
-	
330
+
331 331
 	// 确定补打
332 332
 	confirmPrintDel(){
333 333
 		this.parintLoading = true
@@ -338,9 +338,9 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
338 338
 		// } else {
339 339
 		// 	this.showPromptModal("操作", false, res.msg);
340 340
 		// }
341
-		
341
+
342 342
 	}
343
-	
343
+
344 344
 	// 接收时间
345 345
 	startDate:any;
346 346
 	endDate:any;
@@ -348,12 +348,12 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
348 348
 		this.startDate = format(result[0], 'yyyy-MM-dd HH:mm:ss');
349 349
 		this.endDate = format(result[1], 'yyyy-MM-dd HH:mm:ss');
350 350
 	}
351
-	
351
+
352 352
 	// 获取批次号
353 353
 	generateBatchNumber(){
354 354
 
355 355
 	}
356
-	
356
+
357 357
 	// 获取标本接收数据
358 358
 	pageReceptionIndex:any = 1;
359 359
 	listReceptionLength:any = 0;
@@ -403,7 +403,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
403 403
 				this.listReceptionLength = res.totalNum;
404 404
 		  });
405 405
 	}
406
-	
406
+
407 407
 	// 配送中包交接完成
408 408
 	connectAccomplish(){
409 409
 		this.validateConnectForm = this.fb.group({
@@ -412,14 +412,14 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
412 412
 		});
413 413
 		this.dispatchingName = this.scanCodeData.deliveryUserDTO.name;
414 414
 		this.dispatchingUserId = this.scanCodeData.deliveryUserDTO.id
415
-		
415
+
416 416
 		this.receptionName = this.userInfo.name;
417 417
 		this.connectUserId = this.userInfo.id;
418
-		
418
+
419 419
 		this.receptionModal = true
420 420
 		this.barCode = null
421 421
 	}
422
-	
422
+
423 423
 	// 确定接收包
424 424
 	submitReceptionForm(){
425 425
 		for (const i in this.validateConnectForm.controls) {
@@ -448,17 +448,17 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
448 448
 				}
449 449
 		  });
450 450
 	}
451
-	
451
+
452 452
 	// 关闭配送接收
453 453
 	hideReceptionModal(){
454 454
 		this.receptionModal = false
455 455
 	}
456
-	
456
+
457 457
 	// 选择固定时间
458 458
 	formChangeDate(result){
459 459
 	  this.startDate = format(result, 'yyyy-MM-dd HH:mm:ss');
460 460
 	}
461
-	
461
+
462 462
 	// 监听人员交接接收人工号输入
463 463
 	connectUserId:any = null;
464 464
 	receptionName:any = null;
@@ -482,7 +482,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
482 482
 				}
483 483
 		  });
484 484
 	}
485
-	
485
+
486 486
 	// 监听人员交接配送人工号输入
487 487
 	dispatchingUserId:any = null;
488 488
 	dispatchingName:any = null;
@@ -506,7 +506,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
506 506
 				}
507 507
 		  });
508 508
 	}
509
-	
509
+
510 510
 	// 确定交接
511 511
 	mustReceived:any = null;
512 512
 	currReceived:any = null;
@@ -541,7 +541,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
541 541
 	hideConnectModal(){
542 542
 		this.connectModal = false
543 543
 	}
544
-	
544
+
545 545
 	// 确定人员交接
546 546
 	btnConnectLoading:boolean = false;
547 547
 	submitConnectForm(){
@@ -568,21 +568,21 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
568 568
 		    }
569 569
 		  });
570 570
 	}
571
-	
571
+
572 572
 	// 确定打包
573 573
 	packModal:boolean = false;
574 574
 	submitScanForm(){
575 575
 		this.packModal = true
576 576
 		// this.hideSpecimenModal()
577 577
 	}
578
-	
578
+
579 579
 	// 确定打包并打印
580 580
 	btnPackLoading:boolean = false;
581 581
 	printData:any = [];
582 582
 	submitPackForm(){
583 583
 		let that = this
584 584
 		let data: any = {
585
-			batchNo:this.batchNo, 
585
+			batchNo:this.batchNo,
586 586
 			deptId:this.deptId
587 587
 		};
588 588
 
@@ -613,7 +613,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
613 613
 				}
614 614
 		  });
615 615
 	}
616
-	
616
+
617 617
 	// 关闭打包并打印
618 618
 	hidePackModal(){
619 619
 		this.packModal = false
@@ -621,14 +621,14 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
621 621
 			document.getElementById('specimen').focus();
622 622
 		},200)
623 623
 	}
624
-	
624
+
625 625
 	// 关闭交接/打包
626 626
 	hideSpecimenModal(){
627 627
 		// 清空data
628 628
 		localStorage.setItem("scanCodeData",'')
629 629
 		this.router.navigateByUrl(`/pathology?type=detail`)
630 630
 	}
631
-	
631
+
632 632
 	// 获取标本详情
633 633
 	project:any = [];
634 634
 	getSampleData(item){
@@ -649,7 +649,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
649 649
 			}
650 650
 		});
651 651
 	}
652
-	
652
+
653 653
 	// 获取科室
654 654
 	getDept(){
655 655
 		this.setSpecimen()
@@ -678,7 +678,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
678 678
 			  .subscribe((res) => {
679 679
 			    that.operationData = res.list;
680 680
 			  });
681
-				
681
+
682 682
 			that.mainService
683 683
 			  .getFetchDataList("data", "department", data2)
684 684
 			  .subscribe((res) => {
@@ -687,7 +687,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
687 687
 			  });
688 688
 		});
689 689
 	}
690
-	
690
+
691 691
 	// 获取关联科室详情
692 692
 	getDeptDetail(){
693 693
 		this.mainService
@@ -707,7 +707,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
707 707
 				}
708 708
 		  });
709 709
 	}
710
-	
710
+
711 711
 	// 获取是否关联标本间
712 712
 	setSpecimen(){
713 713
 		this.validateForm = this.fb.group({
@@ -717,7 +717,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
717 717
 		});
718 718
 		this.relevanceModal = true
719 719
 	}
720
-	
720
+
721 721
 	// 确定关联科室
722 722
 	btnLoading:boolean = false;
723 723
 	submitForm(){
@@ -751,7 +751,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
751 751
 		    }
752 752
 		  });
753 753
 	}
754
-	
754
+
755 755
 	getNewDept(){
756 756
 		let postData = {
757 757
 		  currentHosId: this.hosId,
@@ -777,12 +777,12 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
777 777
 		  }
778 778
 		});
779 779
 	}
780
-	
780
+
781 781
 	// 获取当前用户信息
782 782
 	getCurrentUserNow() {
783 783
 	  this.mainService.getCurrentUser1().subscribe((data:any) => {
784 784
 	    if (data["status"] == 200) {
785
-				this.loginUser = data.data 
785
+				this.loginUser = data.data
786 786
 	      let user = JSON.parse(localStorage.getItem("user"));
787 787
 	      user.user.dept = data["data"].dept;
788 788
 	      user.user.currentHospital = data["data"].currentHospital;
@@ -790,7 +790,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
790 790
 	    }
791 791
 	  });
792 792
 	}
793
-	
793
+
794 794
 	// 输入工号查询姓名
795 795
 	handoverUserId:any = null;
796 796
 	numberChange(e){
@@ -813,7 +813,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
813 813
 				}
814 814
 		  });
815 815
 	}
816
-	
816
+
817 817
 	// 提交固定标本接收
818 818
 	submitVerificationForm(){
819 819
 		for (const i in this.validateVerificationForm.controls) {
@@ -821,7 +821,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
821 821
 		  this.validateVerificationForm.controls[i].updateValueAndValidity();
822 822
 		}
823 823
 		if (this.validateVerificationForm.invalid) return;
824
-		
824
+
825 825
 		let data: any = {
826 826
 			id:this.codeData.id,
827 827
 			specimenDeptId:this.validateForm.value.specimen,
@@ -845,13 +845,13 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
845 845
 			}
846 846
 		});
847 847
 	}
848
-	
848
+
849 849
 	// 成功/失败提示框
850 850
 	closeModel(){
851 851
 		localStorage.setItem("scanCodeData",'')
852 852
 		this.router.navigateByUrl(`/pathology?type=detail`);
853 853
 	}
854
-	
854
+
855 855
 	// 关闭配送信息
856 856
 	hideVerificationModal(){
857 857
 		this.verificationMoadl = false
@@ -860,13 +860,13 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
860 860
 		},200)
861 861
 	}
862 862
 
863
-	
863
+
864 864
 	// 监听交接/打包扫描条码
865 865
 	tableLoading:boolean = false;
866 866
 	codeChange(e){
867 867
 		this.changeInpSubject.next([e]);
868 868
 	}
869
-	
869
+
870 870
 	// 标本接收搜索条码
871 871
 	errorMsg:any = null;
872 872
 	searchSpecimenData(e){
@@ -916,7 +916,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
916 916
 			}
917 917
 		})
918 918
 	}
919
-	
919
+
920 920
 	// 关闭多只标本
921 921
 	hideMultiModal(){
922 922
 		localStorage.setItem("scanCodeData",'');
@@ -928,7 +928,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
928 928
 			document.getElementById('specimen').focus();
929 929
 		},200)
930 930
 	}
931
-	
931
+
932 932
 	// 监听多只标本扫描
933 933
 	codeMultiChange(e){
934 934
 		if(!e){
@@ -975,7 +975,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
975 975
 			})
976 976
 		},500)
977 977
 	}
978
-	
978
+
979 979
 	// 多只标本确定接受
980 980
 	btnMultiLoading:boolean = false;
981 981
 	submitMultiForm(){
@@ -1003,7 +1003,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
1003 1003
 			},500)
1004 1004
 		});
1005 1005
 	}
1006
-	
1006
+
1007 1007
 	// 多只标本打包
1008 1008
 	submitMultiScanForm(){
1009 1009
 		let data1 = JSON.parse(localStorage.getItem("scanCodeData"))
@@ -1030,7 +1030,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
1030 1030
 			},500)
1031 1031
 		});
1032 1032
 	}
1033
-	
1033
+
1034 1034
 	// 查看详情
1035 1035
 	pathologyLogs:any=[];
1036 1036
 	specimenList:any=[]
@@ -1040,19 +1040,19 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
1040 1040
 		this.getSampleData(item)
1041 1041
 		clearInterval(this.logTimer);
1042 1042
 		if(type==1){
1043
-			
1043
+
1044 1044
 		}else if(type==2){
1045
-			
1045
+
1046 1046
 		}else{
1047
-			
1047
+
1048 1048
 		}
1049 1049
 	}
1050
-	
1050
+
1051 1051
 	closeDetailMoadl(){
1052 1052
 		this.detailMoadl = false
1053 1053
 	}
1054
-	
1055
- 
1054
+
1055
+
1056 1056
   // 自动刷新倒计时
1057 1057
   autoUpdate(flag = true) {
1058 1058
     if (flag) {
@@ -1078,7 +1078,6 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
1078 1078
     }
1079 1079
     localStorage.removeItem("user");
1080 1080
     localStorage.removeItem("menu");
1081
-    localStorage.removeItem("phones");
1082 1081
     localStorage.removeItem("index");
1083 1082
     // 假退出
1084 1083
     this.mainService.logOut().subscribe((data) => {
@@ -1090,7 +1089,6 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
1090 1089
         }
1091 1090
         localStorage.removeItem("user");
1092 1091
         localStorage.removeItem("menu");
1093
-        localStorage.removeItem("phones");
1094 1092
         localStorage.removeItem("index");
1095 1093
       }
1096 1094
     });
@@ -1183,7 +1181,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
1183 1181
       }
1184 1182
     }, 1000);
1185 1183
   }
1186
-	
1184
+
1187 1185
 	promptModalShow:boolean = false;
1188 1186
 	promptContent:any = null;
1189 1187
 	ifSuccess:any = null;

+ 0 - 2
src/app/views/pharmacy/pharmacy.component.ts

@@ -256,7 +256,6 @@ export class PharmacyComponent implements OnInit {
256 256
     }
257 257
     localStorage.removeItem("user");
258 258
     localStorage.removeItem("menu");
259
-    localStorage.removeItem("phones");
260 259
     localStorage.removeItem("index");
261 260
 
262 261
     // 假退出
@@ -269,7 +268,6 @@ export class PharmacyComponent implements OnInit {
269 268
         }
270 269
         localStorage.removeItem("user");
271 270
         localStorage.removeItem("menu");
272
-        localStorage.removeItem("phones");
273 271
         localStorage.removeItem("index");
274 272
       }
275 273
     });

+ 0 - 2
src/app/views/pharmacy2/pharmacy2.component.ts

@@ -427,7 +427,6 @@ export class Pharmacy2Component implements OnInit, OnDestroy {
427 427
     }
428 428
     localStorage.removeItem("user");
429 429
     localStorage.removeItem("menu");
430
-    localStorage.removeItem("phones");
431 430
     localStorage.removeItem("index");
432 431
 
433 432
     // 假退出
@@ -440,7 +439,6 @@ export class Pharmacy2Component implements OnInit, OnDestroy {
440 439
         }
441 440
         localStorage.removeItem("user");
442 441
         localStorage.removeItem("menu");
443
-        localStorage.removeItem("phones");
444 442
         localStorage.removeItem("index");
445 443
       }
446 444
     });

+ 28 - 28
src/app/views/repository-manage/repository-manage.component.ts

@@ -41,7 +41,7 @@ export class RepositoryManageComponent implements OnInit {
41 41
   ) {}
42 42
   ngOnInit() {
43 43
     this.searchParentDeptSubject.pipe(debounceTime(500)).subscribe((e) => {
44
-			
44
+
45 45
     });
46 46
 		this.hosId = this.tool.getCurrentHospital().id;
47 47
     this.coopBtns = this.tool.initCoopBtns(this.route);
@@ -58,7 +58,7 @@ export class RepositoryManageComponent implements OnInit {
58 58
   validateForm: FormGroup; //新增/编辑表单
59 59
   coopId: number; //表格中执行操作的id
60 60
   department: number; //所属科室
61
-	hosId: number; 
61
+	hosId: number;
62 62
 	loadAllConsumeDept: boolean = true;//是否加载所有消耗科室
63 63
   solutionNumber; //编号
64 64
 	title; //标题
@@ -115,7 +115,7 @@ export class RepositoryManageComponent implements OnInit {
115 115
   hideDelModal1() {
116 116
     this.editModal = false;
117 117
   }
118
-	
118
+
119 119
   // 编辑保存
120 120
   confirmDel1() {
121 121
     var that = this;
@@ -180,7 +180,7 @@ export class RepositoryManageComponent implements OnInit {
180 180
         that.listLength = data.totalNum;
181 181
       });
182 182
   }
183
-	
183
+
184 184
 	// 版本号点击
185 185
 	versionsClick(data, index){
186 186
 		this.vIndex = index
@@ -192,14 +192,14 @@ export class RepositoryManageComponent implements OnInit {
192 192
 			this.richText = ''
193 193
 		}
194 194
 	}
195
-	
195
+
196 196
 	// 点击附件
197 197
 	fileClick(data){
198 198
 		console.log(222,data)
199 199
 		let a: any = document.createElement('a') // 创建一个元素
200 200
 		a.style = 'display: none' // 不能在页面中被看到,把他隐藏起来
201 201
 		a.style.height = '0px' // 给个0高度,避免影响页面布局
202
-		a.download = data.name; 
202
+		a.download = data.name;
203 203
 		a.href = data.url // 文件url地址
204 204
 		document.body.appendChild(a)  //  将其绑定在body上才能发挥作用
205 205
 		a.click() // 触发a标签的click事件
@@ -209,7 +209,7 @@ export class RepositoryManageComponent implements OnInit {
209 209
   hideModal() {
210 210
     this.modal = false;
211 211
   }
212
-	
212
+
213 213
 	// 审核通过
214 214
 	confirmDel4() {
215 215
 		let data: any = {
@@ -229,16 +229,16 @@ export class RepositoryManageComponent implements OnInit {
229 229
 				}
230 230
 			});
231 231
 	}
232
-	
232
+
233 233
 	hideDelModal4() {
234 234
 	  this.auditModal = false;
235 235
 	}
236
-	
236
+
237 237
 	// 审核驳回
238 238
 	rejectCancel(){
239 239
 		this.rejectModal = false
240 240
 	}
241
-	
241
+
242 242
 	// 审核驳回
243 243
 	rejectOk(){
244 244
 		if(this.rejectData==null){
@@ -263,11 +263,11 @@ export class RepositoryManageComponent implements OnInit {
263 263
 				}
264 264
 			});
265 265
 	}
266
-	
266
+
267 267
 	closeModel(){
268 268
 		this.hideModal()
269 269
 	}
270
-	
270
+
271 271
   // 表单提交
272 272
 	auditModal = false;
273 273
   submitForm(type): void {
@@ -279,18 +279,18 @@ export class RepositoryManageComponent implements OnInit {
279 279
 			this.rejectModal = true
280 280
 		}
281 281
   }
282
-	
282
+
283 283
 	// 升级
284 284
 	upgrade(e, data){
285 285
 		e.stopPropagation();
286 286
 		this.router.navigateByUrl(`/repositoryManageAdd/${data.id}?type=upgrade`);
287 287
 	}
288
-	
288
+
289 289
 	// 新增
290 290
 	addForm(){
291 291
 		this.router.navigateByUrl(`/repositoryManageAdd/0`);
292 292
 	}
293
-	
293
+
294 294
 	// 查看
295 295
 	look(e, data){
296 296
 		e.stopPropagation();
@@ -334,7 +334,7 @@ export class RepositoryManageComponent implements OnInit {
334 334
 				this.isSpinning = false
335 335
 			});
336 336
 	}
337
-	
337
+
338 338
 	getFile(){
339 339
 		this.mainService
340 340
 			.getPreviewImage('solution', this.rowId)
@@ -347,7 +347,7 @@ export class RepositoryManageComponent implements OnInit {
347 347
 				});
348 348
 			});
349 349
 	}
350
-	
350
+
351 351
 	// 审核
352 352
 	rowId=null;
353 353
 	audit(e, data){
@@ -375,22 +375,22 @@ export class RepositoryManageComponent implements OnInit {
375 375
 				this.detailData = data
376 376
 				this.richText = this.sanitizer.bypassSecurityTrustHtml(data[0].content);
377 377
 				for(let i of data[0].solutionLogs){
378
-					i.time = format(i.operationTime, 'yyyy-MM-dd HH:mm') 
378
+					i.time = format(i.operationTime, 'yyyy-MM-dd HH:mm')
379 379
 				}
380 380
 				this.lookData = data[0]
381 381
 				this.solutionLogs = data[0].solutionLogs
382 382
 				this.stepLength = this.solutionLogs.length
383 383
 				this.isSpinning = false
384 384
 			});
385
-	
385
+
386 386
 	}
387
-	
387
+
388 388
 	// 编辑
389 389
 	edit(e, data) {
390 390
 	  e.stopPropagation();
391 391
 	  this.router.navigateByUrl(`/repositoryManageAdd/${data.id}?type=edit`);
392 392
 	}
393
-	
393
+
394 394
 	// 停用
395 395
 	pauseModal = false;
396 396
 	pause(e, data){
@@ -398,7 +398,7 @@ export class RepositoryManageComponent implements OnInit {
398 398
 		this.pauseModal = true;
399 399
 		this.coopId = data.id;
400 400
 	}
401
-	
401
+
402 402
 	// 确认停用
403 403
 	confirmDel2() {
404 404
 	  var that = this;
@@ -419,12 +419,12 @@ export class RepositoryManageComponent implements OnInit {
419 419
 				}
420 420
 			});
421 421
 	}
422
-	
422
+
423 423
 	hideDelModal2() {
424 424
 	  this.pauseModal = false;
425 425
 	}
426
-	
427
-	
426
+
427
+
428 428
 	// 恢复
429 429
 	renewModal = false;
430 430
 	renew(e, data){
@@ -432,7 +432,7 @@ export class RepositoryManageComponent implements OnInit {
432 432
 		this.renewModal = true;
433 433
 		this.coopId = data.id;
434 434
 	}
435
-	
435
+
436 436
 	// 确认恢复
437 437
 	confirmDel3() {
438 438
 	  var that = this;
@@ -453,11 +453,11 @@ export class RepositoryManageComponent implements OnInit {
453 453
 				}
454 454
 			});
455 455
 	}
456
-	
456
+
457 457
 	hideDelModal3() {
458 458
 	  this.renewModal = false;
459 459
 	}
460
-	
460
+
461 461
 
462 462
   // 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
463 463
   showPromptModal(con, success, promptInfo?) {

+ 35 - 37
src/app/views/specimen-room-view/specimen-room-view.component.ts

@@ -47,8 +47,8 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
47 47
   })
48 48
   osComponentRef5: OverlayScrollbarsComponent;
49 49
   constructor(
50
-	private mainService: MainService, 
51
-	public router: Router, 
50
+	private mainService: MainService,
51
+	public router: Router,
52 52
 	public tool: ToolService,
53 53
 	private fb: FormBuilder,
54 54
 	private message: NzMessageService,
@@ -92,7 +92,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
92 92
   completedFlag = false;
93 93
   completedSearchKey = "";
94 94
   completedLoad = false;
95
-	
95
+
96 96
 	barCode:any; //条码搜索
97 97
   // other
98 98
   loginUser: any = localStorage.getItem("user")
@@ -113,7 +113,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
113 113
 	fixationModal:boolean = false //标本接收固定
114 114
 	verificationMoadl:boolean = false //标本核验
115 115
 	specimenCode:any; //标本条码
116
-	listOfData:any=[]; 
116
+	listOfData:any=[];
117 117
 	fixativeData:any = []; //固体液类型
118 118
 	hosId:any;
119 119
 	userId:any;
@@ -161,7 +161,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
161 161
       this.runTime();
162 162
     }, 500);
163 163
   }
164
-	
164
+
165 165
 	// 标本条码搜索
166 166
 	searchSpecimen(e){
167 167
 		if(!this.barCode){
@@ -199,12 +199,12 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
199 199
 			}
200 200
 		})
201 201
 	}
202
-	
202
+
203 203
 	// 选择固定时间
204 204
 	formChangeDate(result){
205 205
 	  this.startDate = format(result, 'yyyy-MM-dd HH:mm:ss');
206 206
 	}
207
-	
207
+
208 208
 	// 确定接受固定标本
209 209
 	startDate:any;
210 210
 	submitFixationForm(){
@@ -224,7 +224,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
224 224
 			this.verificationMoadl = true
225 225
 		});
226 226
 	}
227
-	
227
+
228 228
 	// 关闭接受固定标本
229 229
 	hideSpecimenModal(){
230 230
 		this.autoUpdate()
@@ -236,7 +236,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
236 236
 			document.getElementById('Binput').focus();
237 237
 		},200)
238 238
 	}
239
-	
239
+
240 240
 	// 获取标本详情
241 241
 	project:any = [];
242 242
 	getSampleData(item){
@@ -256,7 +256,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
256 256
 		  this.detailMoadl = true
257 257
 		});
258 258
 	}
259
-	
259
+
260 260
 	// 获取科室
261 261
 	getDept(){
262 262
 		this.setSpecimen()
@@ -285,7 +285,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
285 285
 			  .subscribe((res) => {
286 286
 			    that.operationData = res.list;
287 287
 			  });
288
-				
288
+
289 289
 			that.mainService
290 290
 			  .getFetchDataList("data", "department", data2)
291 291
 			  .subscribe((res) => {
@@ -294,7 +294,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
294 294
 			  });
295 295
 		});
296 296
 	}
297
-	
297
+
298 298
 	// 获取关联科室详情
299 299
 	getDeptDetail(){
300 300
 		this.mainService
@@ -314,7 +314,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
314 314
 				}
315 315
 		  });
316 316
 	}
317
-	
317
+
318 318
 	// 获取是否关联标本间
319 319
 	setSpecimen(){
320 320
 		this.validateForm = this.fb.group({
@@ -324,7 +324,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
324 324
 		});
325 325
 		this.relevanceModal = true
326 326
 	}
327
-	
327
+
328 328
 	// 确定关联科室
329 329
 	btnLoading:boolean = false;
330 330
 	submitForm(){
@@ -364,7 +364,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
364 364
 		    }
365 365
 		  });
366 366
 	}
367
-	
367
+
368 368
 	getNewDept(){
369 369
 		let postData = {
370 370
 		  currentHosId: this.hosId,
@@ -390,12 +390,12 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
390 390
 		  }
391 391
 		});
392 392
 	}
393
-	
393
+
394 394
 	// 获取当前用户信息
395 395
 	getCurrentUserNow() {
396 396
 	  this.mainService.getCurrentUser1().subscribe((data:any) => {
397 397
 	    if (data["status"] == 200) {
398
-				this.loginUser = data.data 
398
+				this.loginUser = data.data
399 399
 	      let user = JSON.parse(localStorage.getItem("user"));
400 400
 	      user.user.dept = data["data"].dept;
401 401
 	      user.user.currentHospital = data["data"].currentHospital;
@@ -403,7 +403,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
403 403
 	    }
404 404
 	  });
405 405
 	}
406
-	
406
+
407 407
 	// 输入工号查询姓名
408 408
 	handoverUserId:any = null;
409 409
 	numberChange(e){
@@ -427,7 +427,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
427 427
 				}
428 428
 		  });
429 429
 	}
430
-	
430
+
431 431
 	// 提交固定标本接收
432 432
 	submitVerificationForm(){
433 433
 		for (const i in this.validateVerificationForm.controls) {
@@ -435,7 +435,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
435 435
 		  this.validateVerificationForm.controls[i].updateValueAndValidity();
436 436
 		}
437 437
 		if (this.validateVerificationForm.invalid) return;
438
-		
438
+
439 439
 		let data: any = {
440 440
 			id:this.codeData.id,
441 441
 			specimenDeptId:this.validateForm.value.specimen,
@@ -466,7 +466,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
466 466
 			}
467 467
 		});
468 468
 	}
469
-	
469
+
470 470
 	closeModel(){
471 471
 		this.verificationMoadl = false
472 472
 		this.fixationModal = false
@@ -474,7 +474,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
474 474
 			document.getElementById('Binput').focus();
475 475
 		},200)
476 476
 	}
477
-	
477
+
478 478
 	// 关闭固定接受标本
479 479
 	hideVerificationModal(){
480 480
 		this.verificationMoadl = false
@@ -482,19 +482,19 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
482 482
 			document.getElementById('Binput').focus();
483 483
 		},200)
484 484
 	}
485
-	
485
+
486 486
 
487 487
 	// 监听标本条码
488 488
 	specimenCodeChange(e){
489 489
 		this.changeInpSubjectSpecimen.next([e]);
490 490
 	}
491
-	
491
+
492 492
 	// 监听接受固定标本条码
493 493
 	tableLoading:boolean = false;
494 494
 	codeChange(e){
495 495
 		this.changeInpSubject.next([e]);
496 496
 	}
497
-	
497
+
498 498
 	fixationError:any;
499 499
 	searchSpecimenData(e){
500 500
 		if(!e){
@@ -514,13 +514,13 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
514 514
 			this.specimenCode = null
515 515
 			if(res.status==200){
516 516
 				this.codeData = res.data[0]
517
-				this.fixationError = null 
517
+				this.fixationError = null
518 518
 			}else{
519
-				this.fixationError = res.msg 
519
+				this.fixationError = res.msg
520 520
 			}
521 521
 		})
522 522
 	}
523
-	
523
+
524 524
 	// 查看详情
525 525
 	detailMoadl:boolean = false;
526 526
 	pathologyLogs:any=[];
@@ -531,14 +531,14 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
531 531
 		this.getSampleData(item)
532 532
 		clearInterval(this.logTimer);
533 533
 		if(type==1){
534
-			
534
+
535 535
 		}else if(type==2){
536
-			
536
+
537 537
 		}else{
538
-			
538
+
539 539
 		}
540 540
 	}
541
-	
541
+
542 542
 	closeDetailMoadl(){
543 543
 		setTimeout(_=>{
544 544
 			document.getElementById('Binput').focus();
@@ -546,7 +546,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
546 546
 		this.detailMoadl = false
547 547
 		this.autoUpdate(false);
548 548
 	}
549
-	
549
+
550 550
   // 统计
551 551
   // total() {
552 552
   //   let launch = JSON.parse(localStorage.getItem("user")).user.dept.id;
@@ -570,7 +570,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
570 570
   //   console.log(item);
571 571
   //   this.router.navigateByUrl(`specimenView2/detailSample/${item.id}`);
572 572
   // }
573
-	
573
+
574 574
   // // 查看流程信息弹窗
575 575
   // logPromptModalShow = false; //弹窗开关
576 576
   // scode = ""; //查看记录携带
@@ -807,7 +807,6 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
807 807
     }
808 808
     localStorage.removeItem("user");
809 809
     localStorage.removeItem("menu");
810
-    localStorage.removeItem("phones");
811 810
     localStorage.removeItem("index");
812 811
     // 假退出
813 812
     this.mainService.logOut().subscribe((data) => {
@@ -819,7 +818,6 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
819 818
         }
820 819
         localStorage.removeItem("user");
821 820
         localStorage.removeItem("menu");
822
-        localStorage.removeItem("phones");
823 821
         localStorage.removeItem("index");
824 822
       }
825 823
     });
@@ -906,7 +904,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
906 904
       }
907 905
     }, 1000);
908 906
   }
909
-	
907
+
910 908
 	promptModalShow:boolean = false;
911 909
 	promptContent:any = null;
912 910
 	ifSuccess:any = null;

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

@@ -461,7 +461,6 @@ export class SpecimenView2Component implements OnInit, OnDestroy {
461 461
     }
462 462
     localStorage.removeItem("user");
463 463
     localStorage.removeItem("menu");
464
-    localStorage.removeItem("phones");
465 464
     localStorage.removeItem("index");
466 465
     // 假退出
467 466
     this.mainService.logOut().subscribe((data) => {
@@ -473,7 +472,6 @@ export class SpecimenView2Component implements OnInit, OnDestroy {
473 472
         }
474 473
         localStorage.removeItem("user");
475 474
         localStorage.removeItem("menu");
476
-        localStorage.removeItem("phones");
477 475
         localStorage.removeItem("index");
478 476
       }
479 477
     });

+ 3 - 3
src/app/views/users-management/users-management.component.ts

@@ -257,7 +257,7 @@ export class UsersManagementComponent implements OnInit {
257 257
     let groupData = {
258 258
       group2: {
259 259
         hospitals: hid,
260
-        type:1
260
+        typeIds: '1,3',
261 261
       },
262 262
       idx: 0,
263 263
       sum: 9999,
@@ -303,7 +303,7 @@ export class UsersManagementComponent implements OnInit {
303 303
     let groupData = {
304 304
       group2: {
305 305
         hospitals: id,
306
-        type:1
306
+        typeIds: '1,3',
307 307
       },
308 308
       idx: 0,
309 309
       sum: 9999,
@@ -469,7 +469,7 @@ export class UsersManagementComponent implements OnInit {
469 469
     let groupData = {
470 470
       group2: {
471 471
         hospitals: hid,
472
-        type:1
472
+        typeIds: '1,3',
473 473
       },
474 474
       idx: 0,
475 475
       sum: 9999,

+ 1 - 0
src/assets/js/http.ts

@@ -15,5 +15,6 @@ const baseUrl: baseUrlType = {
15 15
   nurseWs: `${wsName}://${domainName}:${port}/webSocket/message/nurse`, //websocket护士端地址
16 16
   fwtWs: `${wsName}://${domainName}:${port}/webSocket/message/ser`, //websocket服务台地址
17 17
   phoneWs: `${wsName}://${domainName}:${port}/webSocket/message/phone`, //websocket服务台来电地址
18
+  // phoneWs: `${wsName}://192.168.3.108:29999/webSocket/message/phone`, //websocket服务台来电地址-测试
18 19
 };
19 20
 export default baseUrl;

文件差异内容过多而无法显示
+ 1473 - 0
src/assets/libs/TLWebSocketAgent.js


+ 418 - 0
src/assets/libs/ola_api.js

@@ -0,0 +1,418 @@
1
+/**
2
+201606
3
+
4
+基于WebSocket的坐席客户端范例
5
+
6
+1 验证码赋值 这个是向服务端验证身份的 变量名称固定为 authCode
7
+2 new一个TLWSA对象,每个页面只能有一个实例
8
+3 在页面载入完成后,调用一次 tlwsa的 initTLWSA方法,用于初始化
9
+4 写事件callack函数,并赋值给tlwsa的callback
10
+
11
+5 依次调用tlwsa的tlaOpen 方法连接服务器,tlaLogin方法登录,如果是IP坐席,还要调用 tlaSetPhoneNumber方法报告坐席使用的ip话机的电话号码
12
+6 等待呼入,或者调用 tlwsa的 tlaCallagc方法/tlaCall方法呼叫坐席和外线
13
+
14
+其他功能的调用方法请参考相关代码
15
+
16
+**/
17
+// var phoneNumber = '';
18
+var authCode="tlwsab"; //验证码,必须与服务端配置的验证码相同,否则不能通过验证,无法登录到服务器
19
+
20
+var tlwsa=new TLWSA(); //生成一个坐席客户端实例 每个页面只能有一个实例
21
+window.onload=function() //必须第一个调用的方法,初始化websocket相关变量
22
+{
23
+	tlwsa.initTLWSA();
24
+}
25
+
26
+//函数调用的应答  注意 是类TLWSA 不是实例tlwsa
27
+// TLWSA.onOpenreturn=onopenreturn;
28
+TLWSA.onOpenslaveserverreturn=onopenslaveserverreturn;
29
+
30
+// TLWSA.onLoginreturn=onloginreturn;
31
+TLWSA.onMutereturn=onmutereturn;
32
+TLWSA.onUnmutereturn=onunmutereturn;
33
+// TLWSA.onSetphonenumberreturn=onsetphonenumberreturn;
34
+// TLWSA.onLogoffreturn=onlogoffreturn; //主动注销结果
35
+// TLWSA.onAcwreturn=onacwreturn;
36
+// TLWSA.onWcareturn=onwcareturn;
37
+
38
+// TLWSA.onCallreturn=oncallreturn;
39
+TLWSA.onCancelcallreturn=oncancelcallreturn;
40
+// TLWSA.onTransferreturn=ontransferreturn;//调用转移方法之后,返回该事件 如果错误码为0,仅仅表示开始转移,不代表转移目标已经接听或已经拒绝
41
+TLWSA.onCanceltransferreturn=oncanceltransferreturn;
42
+TLWSA.onBlindtransferreturn=onblindtransferreturn;
43
+TLWSA.onTransfertoivrreturn=ontransfertoivrreturn;
44
+TLWSA.onTransfertoivrandwaitreturn=ontransfertoivrandwaitreturn;
45
+TLWSA.onStartlistenreturn=onstartlistenreturn;
46
+TLWSA.onStoplistenreturn=onstoplistenreturn;
47
+// TLWSA.onKillreturn=onkillreturn;
48
+TLWSA.onForceonhookreturn=onforceonhookreturn;
49
+TLWSA.onIntrudereturn=onintrudereturn;
50
+TLWSA.onGetcallreturn=ongetcallreturn;
51
+TLWSA.onAnswercallreturn=onanswercallreturn;
52
+TLWSA.onOnhookreturn=ononhookreturn;
53
+TLWSA.onHoldcallreturn=onholdcallreturn;
54
+TLWSA.onSwapcallreturn=onswapcallreturn;
55
+TLWSA.onActivatecallreturn=onactivatecallreturn;
56
+TLWSA.onUnholdcallreturn=onunholdcallreturn;
57
+TLWSA.onLoginotheragentreturn=onloginotheragentreturn;
58
+TLWSA.onSendmessagetoagentreturn=onsendmessagetoagentreturn;
59
+TLWSA.onAnswerqueuereturn=onanswerqueuereturn;
60
+// TLWSA.onSubscribestateinforeturn=onsubscribestateinforeturn;
61
+
62
+TLWSA.onConsulttransferreturn=onconsulttransferreturn;
63
+TLWSA.onCompleteconsulttransferreturn=oncompleteconsulttransferreturn;
64
+TLWSA.onGetnodestatereturn=ongetnodestatereturn;
65
+TLWSA.onTransfernodereturn=ontransfernodereturn;
66
+//会议相关
67
+TLWSA.onConferencestartreturn=onconferencestartreturn;
68
+TLWSA.onConferenceappendmemberreturn=onconferenceappendmemberreturn;
69
+TLWSA.onConferencequeryreturn=onconferencequeryreturn;
70
+TLWSA.onConferencedismissreturn=onconferencedismissreturn;
71
+TLWSA.onConferencekickoutreturn=onconferencekickoutreturn;
72
+TLWSA.onConferencechangememberstatereturn=onconferencechangememberstatereturn;
73
+//主动事件
74
+// TLWSA.onCallin=oncallin;
75
+// TLWSA.onCallend=oncallend;
76
+// TLWSA.onAcw=onacw;
77
+// TLWSA.onWca = onwca;
78
+TLWSA.onLogoff = onlogoff; //被强制注销事件
79
+// TLWSA.onCallresult=oncallresult;
80
+// TLWSA.onTransferresult=ontransferresult;
81
+TLWSA.onConsulttransfercalleeanswer=onconsulttransfercalleeanswer;
82
+TLWSA.onBlindtransferresult=onblindtransferresult;
83
+// TLWSA.onAnswer=onanswer;
84
+// TLWSA.onClosed=onclosed;
85
+TLWSA.onSlaveserverclosed=onslaveserverclosed; //备用服务器网络中断
86
+TLWSA.onHoldcallreleased=onholdcallreleased;
87
+TLWSA.onKeepcallreleased=onkeepcallreleased;
88
+TLWSA.onCalleealerting=oncalleealerting;
89
+TLWSA.onQueue=onqueue;
90
+TLWSA.onQuitqueue=onquitqueue;
91
+TLWSA.onRecvmsg=onrecvmsg;
92
+TLWSA.onHookstate=onhookstate;
93
+TLWSA.onHardwarefail=onhardwarefail;
94
+// TLWSA.onMisscall=onmisscall;
95
+TLWSA.onConferencememberstate=onconferencememberstate;
96
+TLWSA.onSlaveserverfail=onslaveserverfail; //备用服务器故障 例如硬件故障或者中继失步
97
+TLWSA.onSwitchtoslaveserver=onswitchtoslaveserver;
98
+// TLWSA.onStatechange=onstatechange;
99
+//应答回调
100
+// function onopenreturn(err)
101
+// {
102
+// 	err = Number(err);
103
+// 	if(!err){
104
+// 		console.log('呼叫中心连接成功-----seimin');
105
+// 		//如果设置过话机
106
+// 		if(localStorage.getItem('phoneNumber')){
107
+// 			// 登录并设置号码
108
+// 			phoneNumber = localStorage.getItem('phoneNumber');
109
+// 			tlwsa.tlaLogin(phoneNumber,1,-1);
110
+// 		}
111
+// 	}else{
112
+// 		console.log('呼叫中心连接失败-----seimin');
113
+// 	}
114
+// 	// console.log('应答:连接服务器结果 '+err);
115
+// }
116
+function onopenslaveserverreturn(err)
117
+{
118
+	console.log('应答:连接备用服务器结果 '+err);
119
+}
120
+
121
+// function onloginreturn(err) //登录结果
122
+// {
123
+// 	err = Number(err);
124
+// 	if(!err){
125
+// 		console.log('登录成功-----seimin');
126
+// 		setTimeout(function(){
127
+// 			console.log('开始设置号码【'+phoneNumber+'】-----seimin');
128
+// 			tlwsa.tlaSetphonenumber(phoneNumber);
129
+// 		},0)
130
+// 	}else{
131
+// 		console.log('登录失败-----seimin');
132
+// 	}
133
+// 	console.log('应答:登录请求结果 '+err);
134
+// }
135
+function onmutereturn(err)
136
+{
137
+	console.log('应答:静音请求结果 '+err);
138
+}
139
+function onunmutereturn(err)
140
+{
141
+	console.log('应答:取消静音请求结果 '+err);
142
+}
143
+// function onsetphonenumberreturn(err)
144
+// {
145
+// 	err = Number(err);
146
+// 	if(!err){
147
+// 		console.log('设置号码成功-----seimin');
148
+// 	}else{
149
+// 		console.log('设置号码失败-----seimin');
150
+// 	}
151
+// 	console.log('应答:报告坐席电话号码请求结果 '+err);
152
+// }
153
+// function onlogoffreturn(err) //注销请求结果
154
+// {
155
+// 	console.log('应答:注销请求结果 '+err);
156
+// }
157
+
158
+// function onacwreturn(err)
159
+// {
160
+// 	console.log('应答:离席请求结果 '+err);
161
+// }
162
+// function onwcareturn(err)
163
+// {
164
+// 	console.log('应答:复席请求结果 '+err);
165
+// }
166
+// function oncallreturn(err)
167
+// {
168
+// 	console.log('应答:呼叫请求结果 '+err);
169
+// }
170
+function oncancelcallreturn(err) {
171
+    console.log('应答:停止呼叫请求结果 ' + err);
172
+}
173
+// function ontransferreturn(err) {
174
+//     console.log('应答:转移请求结果 ' + err);
175
+// }
176
+function oncanceltransferreturn(err) {
177
+    console.log('应答:停止转移请求结果 ' + err);
178
+}
179
+function onblindtransferreturn(err) {
180
+    console.log('应答:盲转请求结果 ' + err);
181
+}
182
+function ontransfertoivrreturn(err) {
183
+    console.log('应答:转ivr请求结果 ' + err);
184
+}
185
+function ontransfertoivrandwaitreturn(err) {
186
+    console.log('应答:转ivr并等待请求结果 ' + err);
187
+}
188
+function onstartlistenreturn(err) {
189
+    console.log('应答:监听请求结果 ' + err);
190
+}
191
+function onstoplistenreturn(err) {
192
+    console.log('应答:停止监听请求结果 ' + err);
193
+}
194
+// function onkillreturn(err) {
195
+//     console.log('应答:强制处理请求结果 ' + err);
196
+// }
197
+function onforceonhookreturn(err) {
198
+    console.log('应答:强拆坐席请求结果 ' + err);
199
+}
200
+function onintrudereturn(err) {
201
+    console.log('应答:强插请求结果 ' + err);
202
+}
203
+function ongetcallreturn(err,caller,callee,data,crs) {
204
+    console.log('应答:代接请求结果 ' + err+' '+caller);
205
+}
206
+function onanswercallreturn(err) {
207
+    console.log('应答:应答请求结果 ' + err);
208
+}
209
+function ononhookreturn(err) {
210
+    console.log('应答:挂机请求结果 ' + err);
211
+}
212
+function onholdcallreturn(err) {
213
+    console.log('应答:保持请求结果 ' + err);
214
+}
215
+function onswapcallreturn(err) {
216
+    console.log('应答:切换呼叫请求结果 ' + err);
217
+}
218
+function onactivatecallreturn(err) {
219
+    console.log('应答:激活呼叫请求结果 ' + err);
220
+}
221
+function onunholdcallreturn(err) {
222
+    console.log('应答:取回保持呼叫请求结果 ' + err);
223
+}
224
+function onloginotheragentreturn(err) {
225
+    console.log('应答:登录其他坐席请求结果 ' + err);
226
+}
227
+function onsendmessagetoagentreturn(err) {
228
+    console.log('应答:发送消息请求结果 ' + err);
229
+}
230
+function onanswerqueuereturn(err) {
231
+    console.log('应答:应答队列中的外线请求结果 ' + err);
232
+}
233
+// function onsubscribestateinforeturn(err){
234
+// 	console.log('应答:订阅状态变化消息请求结果 ' + err);
235
+// }
236
+function onconsulttransferreturn(err){
237
+	console.log('应答:咨询转移请求结果 '+err);
238
+}
239
+
240
+function oncompleteconsulttransferreturn(err){
241
+	console.log('应答:完成咨询转移请求结果 '+err);
242
+}
243
+function ongetnodestatereturn(jso)
244
+{
245
+	console.log('node state 结果 '+JSON.stringify(jso));
246
+}
247
+function ontransfernodereturn(jso)
248
+{
249
+	console.log('transfer node 结果 '+JSON.stringify(jso))
250
+}
251
+function onconferencestartreturn(jso)
252
+{
253
+	console.log('启动会议 结果 '+jso.err+' 会议ID='+jso.conferenceid);
254
+	if(jso.err == 0)
255
+		conferenceid.value=jso.conferenceid;
256
+}
257
+function onconferenceappendmemberreturn(jso)
258
+{
259
+	console.log('添加会议成员 结果 '+JSON.stringify(jso))
260
+}
261
+function onconferencequeryreturn(jso)
262
+{
263
+	console.log('会议状态查询 结果 '+JSON.stringify(jso))
264
+}
265
+function onconferencedismissreturn(jso)
266
+{
267
+	console.log('解散会议 结果 '+JSON.stringify(jso))
268
+}
269
+function onconferencekickoutreturn(jso)
270
+{
271
+	console.log('踢出成员 结果 '+JSON.stringify(jso))
272
+}
273
+function onconferencechangememberstatereturn(jso)
274
+{
275
+	console.log('改变成员状态 结果 '+jso.err)
276
+}
277
+//主动事件回调
278
+// function oncallin(jso) //呼入通知
279
+// {
280
+// 	console.log('事件:呼入通知,相关数据:  '+JSON.stringify(jso));
281
+// }
282
+// function oncallend(jso) //呼叫结束通知
283
+// {
284
+// 	console.log('事件:通话结束' + JSON.stringify(jso));
285
+// }
286
+// function onacw()
287
+// {
288
+// 	console.log('事件:你已经进入离席状态');
289
+// }
290
+// function onwca()
291
+// {
292
+// 	console.log('事件:你已经进入就绪状态');
293
+// }
294
+function onlogoff() //被动注销事件(网络中断 / 被踢)
295
+{
296
+    console.log('事件:您已经被注销');
297
+}
298
+// function oncallresult(err)
299
+// {
300
+// 	console.log('事件:呼叫结果 '+JSON.stringify(err));
301
+// }
302
+// function ontransferresult(err) {
303
+//     console.log('事件:转移结果 ' + JSON.stringify(err));
304
+// }
305
+function onconsulttransfercalleeanswer(crs){
306
+	console.log('事件:咨询转移被叫应答 crs=' + crs);
307
+}
308
+function onblindtransferresult(err) {
309
+    console.log('事件:盲转结果 ' + JSON.stringify(err));
310
+}
311
+// function onanswer(err) {
312
+//     console.log('事件:应答'+err);
313
+// }
314
+// function onclosed(err) {
315
+//     console.log('事件:与服务器的网络连接中断');
316
+// }
317
+function onslaveserverclosed(err)
318
+{
319
+	console.log('事件:与备用服务器的网络连接中断');
320
+}
321
+function onholdcallreleased(err) {
322
+    console.log('事件:被保持的对方已挂机');
323
+}
324
+function onkeepcallreleased(err) {
325
+    console.log('事件:转回ivr并等待的外线已挂机');
326
+}
327
+function oncalleealerting(err) {
328
+    console.log('事件:呼叫的外线已经开始振铃');
329
+}
330
+function onqueue(crs,caller,callee,data)
331
+{
332
+    console.log('事件:外线进入队列,crs,caller,callee,data= '+crs+' '+caller+' '+callee+' '+data)
333
+}
334
+// function onstatechange()
335
+// {
336
+// 	console.log('事件:状态变化----------------------------------------------------');
337
+// 	queryAgentState();
338
+// }
339
+function onmystatechange(jso)
340
+{
341
+	console.log('事件:状态变化----------------------------------------------------');
342
+	console.log(JSON.stringify(jso));
343
+}
344
+function onquitqueue(crs)
345
+{
346
+    console.log('事件:外线退出队列,crs= '+crs)
347
+}
348
+function onrecvmsg(msg, from) {
349
+    console.log('事件:收到来自'+ from+'的消息:' + msg);
350
+}
351
+function onhookstate(jso) {
352
+    console.log('事件:坐席叉簧状态'+JSON.stringify(jso));
353
+}
354
+function onhardwarefail(err) {
355
+    console.log('事件:keygoe交换机硬件故障');
356
+}
357
+// function onmisscall(err) {
358
+//     console.log('事件:呼损');
359
+// }
360
+//新状态 1-呼叫失败  2-呼叫应答进入会议 3-会议中挂机退出会议
361
+function onconferencememberstate(jso)
362
+{
363
+	console.log('会议成员状态发生变化 ' + JSON.stringify(jso));
364
+}
365
+function onslaveserverfail(jso)
366
+{
367
+	console.log('注意:备用服务器已失联');
368
+}
369
+function onswitchtoslaveserver(jso)
370
+{
371
+	console.log('注意:主服务器故障,已经切换到备用服务器');
372
+}
373
+//事件回调函数结束
374
+
375
+function queryAgentState()
376
+{
377
+	console.log('排队外线数量 '+tlwsa.tlaGetacdlength());
378
+
379
+	console.log('外线总数量 '+tlwsa.tlaGettrknumber());
380
+
381
+	var agcount=tlwsa.tlaGetagentcount();
382
+	console.log('登录坐席数量 '+agcount);
383
+	for(var ind=0;ind<agcount;ind++)
384
+	{
385
+		console.log('agnet No. ' + ind + ' workid is '+tlwsa.tlaGetagentwid(ind) + ' state is ' + tlwsa.tlaGetagentstate(ind) + '  '+getStateInfo(tlwsa.tlaGetagentstate(ind) ) )
386
+	}
387
+}
388
+
389
+function getLicenseInfo()
390
+{
391
+	ajo=tlwsa.tlaGetlicenseinfo();
392
+	console.log('授权有效期 '+ajo.validdate+' 授权线数 '+ajo.lines+' 卡号 '+ajo.cardno);
393
+
394
+}
395
+function getStateInfo(state)
396
+{
397
+	switch(state)
398
+	{
399
+		case '0':
400
+		return '未登录';
401
+		case '1':
402
+		return '空闲';
403
+		case '2':
404
+		return '离席';
405
+		case '3':
406
+		return '正在振铃';
407
+		case '4':
408
+		return '播报工号';
409
+		case '5':
410
+		return '通话中';
411
+		case '6':
412
+		return '正在外呼';
413
+		case '7':
414
+		return '正在转移';
415
+		case '8':
416
+		return '正在监听';
417
+	}
418
+}

+ 22 - 7
src/common.less

@@ -16,6 +16,9 @@
16 16
 .mt8 {
17 17
   margin-top: 8px !important;
18 18
 }
19
+.mt0 {
20
+  margin-top: 0 !important;
21
+}
19 22
 .ml16 {
20 23
   margin-left: 16px !important;
21 24
 }
@@ -165,6 +168,14 @@
165 168
   word-break: break-all;
166 169
 }
167 170
 
171
+.fl {
172
+  float: left !important;
173
+}
174
+
175
+.fr {
176
+  float: right !important;
177
+}
178
+
168 179
 .ellipsis-multiline {
169 180
   display: -webkit-box;
170 181
   -webkit-box-orient: vertical;
@@ -172,6 +183,16 @@
172 183
   overflow: hidden;
173 184
   text-overflow: ellipsis;
174 185
 }
186
+
187
+.ellipsis-oneline {
188
+  overflow: hidden;
189
+  text-overflow: ellipsis;
190
+  white-space: nowrap;
191
+}
192
+
193
+.cursorDefault{
194
+  cursor: default!important;
195
+}
175 196
 // list模板样式 end
176 197
 
177 198
 // button
@@ -237,13 +258,7 @@
237 258
     cursor: not-allowed;
238 259
     border: 1px solid rgba(0, 0, 0, 0.25);
239 260
   }
240
-  .fl {
241
-    float: left !important;
242
-  }
243 261
 
244
-  .fr {
245
-    float: right !important;
246
-  }
247 262
   .clearfixer :after {
248 263
     content: "";
249 264
     display: block;
@@ -261,7 +276,7 @@
261 276
 // list模板样式 start
262 277
 .list-template {
263 278
   padding: 8px;
264
-  .ant-calendar-picker {
279
+  nz-range-picker {
265 280
     width: 373px!important;
266 281
   }
267 282
   .list-template__content {