瀏覽代碼

Merge branch 'master' into develop

maotao 6 月之前
父節點
當前提交
37ffe5caae
共有 51 個文件被更改,包括 1387 次插入292 次删除
  1. 1 0
      package.json
  2. 8 0
      proxy.conf.json
  3. 2 2
      src/app/components/configurationCenter/configuration-category/configuration-category.component.ts
  4. 2 2
      src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.component.html
  5. 5 1
      src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.component.ts
  6. 5 4
      src/app/components/incidentManagement/incident-detail/incident-detail.component.html
  7. 15 5
      src/app/components/incidentManagement/incident-detail/incident-detail.component.ts
  8. 2 2
      src/app/components/incidentManagement/incident-handle-info-simple/incident-handle-info-simple.component.html
  9. 42 8
      src/app/components/incidentManagement/incident-handle-info-simple/incident-handle-info-simple.component.ts
  10. 2 2
      src/app/components/incidentManagement/incident-handle-info/incident-handle-info.component.html
  11. 28 8
      src/app/components/incidentManagement/incident-handle-info/incident-handle-info.component.ts
  12. 30 3
      src/app/components/incidentManagement/incident-handle-order/incident-handle-order.component.ts
  13. 2 2
      src/app/components/incidentManagement/incident-handle-repair/incident-handle-repair.component.html
  14. 15 5
      src/app/components/incidentManagement/incident-handle-repair/incident-handle-repair.component.ts
  15. 1 1
      src/app/components/incidentManagement/incident-handle/incident-handle.component.html
  16. 2 4
      src/app/components/incidentManagement/incident-handle/incident-handle.component.less
  17. 1 0
      src/app/components/incidentManagement/incident-handle/incident-handle.component.ts
  18. 1 1
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.html
  19. 23 1
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.ts
  20. 1 1
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.html
  21. 3 4
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.html
  22. 22 2
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.ts
  23. 16 1
      src/app/components/incidentManagement/incident-substitutio-assign/incident-substitution-assign.component.ts
  24. 1 1
      src/app/components/incidentManagement/incident-substitutio-redeploy/incident-substitution-redeploy.component.ts
  25. 1 1
      src/app/components/knowledge-look/knowledge-look.component.less
  26. 1 1
      src/app/components/knowledge-look/knowledge-look.component.ts
  27. 4 2
      src/app/components/order-scope/order-scope.component.ts
  28. 73 67
      src/app/views/fuwutai/fuwutai.component.html
  29. 234 2
      src/app/views/fuwutai/fuwutai.component.less
  30. 192 28
      src/app/views/fuwutai/fuwutai.component.ts
  31. 1 1
      src/app/views/hospital-config/hospital-config.component.ts
  32. 11 10
      src/app/views/incident-management/incident-management.component.html
  33. 33 22
      src/app/views/incident-management/incident-management.component.ts
  34. 33 41
      src/app/views/main/main.component.html
  35. 76 22
      src/app/views/main/main.component.less
  36. 14 3
      src/app/views/main/main.component.ts
  37. 24 0
      src/app/views/pathology/pathology.component.html
  38. 109 8
      src/app/views/pathology/pathology.component.less
  39. 32 0
      src/app/views/pathology/pathology.component.ts
  40. 2 1
      src/app/views/pathology/pathology.module.ts
  41. 1 1
      src/app/views/specimen-room-view/specimen-room-view.component.html
  42. 8 10
      src/app/views/specimen-room-view/specimen-room-view.component.less
  43. 13 5
      src/app/views/specimen-room-view/specimen-room-view.component.ts
  44. 164 3
      src/assets/iconfont/demo_index.html
  45. 31 3
      src/assets/iconfont/iconfont.css
  46. 1 1
      src/assets/iconfont/iconfont.js
  47. 49 0
      src/assets/iconfont/iconfont.json
  48. 二進制
      src/assets/iconfont/iconfont.ttf
  49. 二進制
      src/assets/iconfont/iconfont.woff
  50. 二進制
      src/assets/iconfont/iconfont.woff2
  51. 50 0
      upload/development120.js

+ 1 - 0
package.json

@@ -7,6 +7,7 @@
7 7
     "start:17": "set NODE_OPTIONS=--openssl-legacy-provider && ng serve --proxy-config proxy.conf.json --port 4210 --disable-host-check --public-host=dashitech.com --host 0.0.0.0",
8 8
     "build:17": "set NODE_OPTIONS=--openssl-legacy-provider --max_old_space_size=4096 && npm run build",
9 9
     "development": "node ./upload/development.js",
10
+    "development120": "node ./upload/development120.js",
10 11
     "production": "node ./upload/production.js",
11 12
     "test": "ng test",
12 13
     "lint": "ng lint",

+ 8 - 0
proxy.conf.json

@@ -14,5 +14,13 @@
14 14
     "pathRewrite": {
15 15
       "^/file": "/file"
16 16
     }
17
+  },
18
+  "/record": {
19
+    "target": "http://192.168.3.108",
20
+    "logLevel": "debug",
21
+    "changeOrigin": true,
22
+    "pathRewrite": {
23
+      "^/record": "/record"
24
+    }
17 25
   }
18 26
 }

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

@@ -169,7 +169,7 @@ export class ConfigurationCategoryComponent implements OnInit {
169 169
       group2: {
170 170
         groupName: keyword,
171 171
         hospitals: this.validateConfigForm.value.dutyId,
172
-        type: 1,
172
+        type: 3,
173 173
       },
174 174
       idx: 0,
175 175
       sum: 10,
@@ -653,7 +653,7 @@ export class ConfigurationCategoryComponent implements OnInit {
653 653
           userGroup: this.validateConfigForm.value.userGroup,
654 654
           groupId: this.validateConfigForm.value.groupId || undefined,
655 655
           userId: this.validateConfigForm.value.userGroup === 1 ? this.validateConfigForm.value.userId : undefined,
656
-          hosId: this.currentHospital.id,
656
+          hosId: this.hospitalConfig === 1 ? this.currentHospital.id  : this.validateConfigForm.value.hosId,
657 657
         }
658 658
       };
659 659
     } else {

+ 2 - 2
src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.component.html

@@ -41,8 +41,8 @@
41 41
                     </nz-input-group>
42 42
                   </nz-form-control>
43 43
                 </nz-form-item>
44
-                <i class="icon_transport transport-tag27fuben ml8" (click)="addField(i)"></i>
45
-                <i class="icon_transport transport-shanchu1 ml8" *ngIf="dictionaryList.length > 1 && !data.system" (click)="removeField(data, i)"></i>
44
+                <i class="icon_transport transport-tag27fuben ml8" (click)="addField(i)" *ngIf="!(activeDictionaryKey.key === 'incident_status' || activeDictionaryKey.key === 'incident_degree')"></i>
45
+                <i class="icon_transport transport-shanchu1 ml8" *ngIf="dictionaryList.length > 1 && !data.system && !(activeDictionaryKey.key === 'incident_status' || activeDictionaryKey.key === 'incident_degree')" (click)="removeField(data, i)"></i>
46 46
               </div>
47 47
             </div>
48 48
           </form>

+ 5 - 1
src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.component.ts

@@ -165,7 +165,11 @@ export class ConfigurationDictionaryComponent implements OnInit {
165 165
       this.dictionaryList.forEach((obj, i) => {
166 166
         for (const key in obj) {
167 167
           if(key !== 'id' && key !== 'system'){
168
-            this.validateDictionaryForm.addControl(key + '_' + obj.id, new FormControl({value: obj[key], disabled: key === 'value' ? obj.system : false}, [Validators.required]))
168
+            if(this.activeDictionaryKey.key === 'incident_status' || this.activeDictionaryKey.key === 'incident_degree'){
169
+              this.validateDictionaryForm.addControl(key + '_' + obj.id, new FormControl({value: obj[key], disabled: true}, [Validators.required]))
170
+            }else{
171
+              this.validateDictionaryForm.addControl(key + '_' + obj.id, new FormControl({value: obj[key], disabled: key === 'value' ? obj.system : false}, [Validators.required]))
172
+            }
169 173
           }
170 174
         }
171 175
       })

+ 5 - 4
src/app/components/incidentManagement/incident-detail/incident-detail.component.html

@@ -35,8 +35,8 @@
35 35
             </div>
36 36
             <div class="row">
37 37
               <div class="col">来电电话:{{incidentData.incomingPhone}}</div>
38
-              <div class="col"><audio class="audio" controls style="outline: none;" *ngIf="incidentData.callID"><source [src]="audioSrc"></audio></div>
39
-              <div class="col">关联资产:{{incidentData.assetDTO?.name}}</div>
38
+              <div class="col"><audio class="audio" controls style="outline: none;" *ngIf="incidentData.callID && audioSrc"><source [src]="audioSrc" type="audio/wav"></audio></div>
39
+              <div class="col"><ng-container *ngIf="incidentData.assetDTO">关联资产:{{incidentData.assetDTO?.name}}</ng-container></div>
40 40
             </div>
41 41
             <div class="row">
42 42
               <div class="col">报修科室:{{incidentData.department?.dept}}</div>
@@ -59,8 +59,9 @@
59 59
               <div class="col">解决方案:{{incidentData.handleDescription}}</div>
60 60
             </div>
61 61
             <div class="row">
62
-              <div class="col">是否生成知识库:{{incidentData.transSolution == 1 ? '是' : '否'}}</div>
63
-              <div class="col flex2">是否引用知识库:{{incidentData.solutionNo ? '是' : '否'}}</div>
62
+              <div class="col">是否生成知识库:{{incidentData.solutionCode ? '是' : '否'}}</div>
63
+              <div class="col">生成知识库编号:{{incidentData.solutionCode}}</div>
64
+              <div class="col">是否引用知识库:{{incidentData.solutionNo ? '是' : '否'}}</div>
64 65
             </div>
65 66
             <div class="row">
66 67
               <div class="col thumbs">

+ 15 - 5
src/app/components/incidentManagement/incident-detail/incident-detail.component.ts

@@ -59,7 +59,7 @@ export class IncidentDetailComponent implements OnInit {
59 59
     this.activeTabValue = item.value;
60 60
 
61 61
     if(this.activeTabValue == 1){
62
-      this.incidentData.callID && this.getCallrecord();
62
+      this.incidentData.callID && this.getCallLog();
63 63
       this.incidentData.reqAttachment && this.getRepairImgs();
64 64
     }else if(this.activeTabValue == 2){
65 65
       this.getHandleImgs();
@@ -173,19 +173,29 @@ export class IncidentDetailComponent implements OnInit {
173 173
 
174 174
   // 获取通话音频
175 175
   audioSrc =  '';//音频
176
-  getCallrecord() {
176
+  getCallLog() {
177 177
     let postData = {
178 178
       idx: 0,
179 179
       sum: 1,
180
-      callrecord: {callAccept: this.incidentData.callID},
180
+      callLog: {callAccept: this.incidentData.callID},
181 181
     };
182 182
     this.mainService
183
-      .getFetchDataList('simple/data', 'callrecord', postData)
183
+      .getFetchDataList('simple/data', 'callLog', postData)
184 184
       .subscribe((result) => {
185 185
         if(result.status == 200){
186 186
           result.list = result.list || [];
187 187
           if(result.list.length){
188
-            this.audioSrc = location.origin + result.list[0].recordingFileName;
188
+            if(result.list[0].path){
189
+              this.mainService.getCallLogPath({ path: result.list[0].path, hosId: result.list[0].hosId }).subscribe((result) => {
190
+                if (result["state"] == 200) {
191
+                  this.audioSrc = location.origin + result["relativePath"];
192
+                }else{
193
+                  this.audioSrc = '';
194
+                }
195
+              });
196
+            }else{
197
+              this.audioSrc = '';
198
+            }
189 199
           }else{
190 200
             this.audioSrc = '';
191 201
           }

+ 2 - 2
src/app/components/incidentManagement/incident-handle-info-simple/incident-handle-info-simple.component.html

@@ -27,12 +27,12 @@
27 27
     </div>
28 28
   </div>
29 29
 
30
-  <div class="formItem">
30
+  <div class="formItem" *ngIf="itsmIncidentAsset.value == 1">
31 31
     <div class="name"><i class="icon_transport transport-required red" style="visibility: hidden;"></i>关联资产:</div>
32 32
     <div class="value w100">
33 33
       <nz-select class="w100" [(ngModel)]="incidentDataCopy.assetId" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch
34 34
         (nzOnSearch)="changeInp('assetId', $event)" nzAllowClear  nzPlaceHolder="请选择关联资产">
35
-          <ng-container *ngFor="let option of assetProducList">
35
+          <ng-container *ngFor="let option of assetList">
36 36
             <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
37 37
           </ng-container>
38 38
           <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>

+ 42 - 8
src/app/components/incidentManagement/incident-handle-info-simple/incident-handle-info-simple.component.ts

@@ -36,7 +36,7 @@ export class IncidentHandleInfoSimpleComponent implements OnInit {
36 36
       if(v[0] === 'synergetic'){
37 37
         this.getSynergeticList(v[1]);
38 38
       }else if(v[0] === 'assetId'){
39
-        this.getAssetProductList(v[1]);
39
+        this.getAssetList(v[1]);
40 40
       }
41 41
     });
42 42
     this.init();
@@ -47,9 +47,11 @@ export class IncidentHandleInfoSimpleComponent implements OnInit {
47 47
     this.hosId = this.tool.getCurrentHospital().id;
48 48
     this.incidentDataCopy = cloneDeep(this.incidentData);
49 49
     this.incidentDataCopy.synergetic = [];
50
+    this.getHospitalConfig();
50 51
     this.getHandleCategorys();
52
+    this.getClosecodes();
51 53
     this.getSynergeticList();
52
-    this.getAssetProductList();
54
+    this.getAssetList();
53 55
   }
54 56
 
55 57
   // 边输边搜节流阀
@@ -76,6 +78,19 @@ export class IncidentHandleInfoSimpleComponent implements OnInit {
76 78
     });
77 79
   }
78 80
 
81
+  // 获取处理结果列表
82
+  closecodeList:any[] = [];
83
+  getClosecodes(){
84
+    this.mainService.getDictionary("list", "incident_closecode").subscribe((data) => {
85
+      this.closecodeList = data || [];
86
+      console.log(this.incidentDataCopy)
87
+      if(!this.incidentDataCopy.closecode){
88
+        let closecode = this.closecodeList.find(v => v.value == '1');
89
+        this.incidentDataCopy.closecode = closecode ? closecode.id : undefined;
90
+      }
91
+    });
92
+  }
93
+
79 94
   // 获取协同人员
80 95
   hosId:any;
81 96
   isLoading = false;
@@ -83,7 +98,7 @@ export class IncidentHandleInfoSimpleComponent implements OnInit {
83 98
   getSynergeticList(keyword = '') {
84 99
     let postData = {
85 100
       user: {
86
-        hospital: { id: this.hosId },
101
+        hospital: { id: this.incidentDataCopy.duty.id },
87 102
         name: keyword,
88 103
         simpleQuery: true,
89 104
         roleCodes: 'first-line support',
@@ -100,11 +115,30 @@ export class IncidentHandleInfoSimpleComponent implements OnInit {
100 115
       });
101 116
   }
102 117
 
118
+  // 获取院区配置信息
119
+  itsmIncidentAsset:any = {};//是否事件关联资产
120
+  getHospitalConfig() {
121
+    let postData = {
122
+      idx: 0,
123
+      sum: 9999,
124
+      hospitalConfig: {
125
+        model: "itsm",
126
+        hosId: this.hosId,
127
+      },
128
+    }
129
+    this.mainService
130
+      .getFetchDataList("simple/data", "hospitalConfig", postData)
131
+      .subscribe((result) => {
132
+        let list = result.list || [];
133
+        this.itsmIncidentAsset = list.find(v => v.key == 'itsmIncidentAsset') || {};
134
+      });
135
+  }
136
+
103 137
   // 获取资产列表
104
-  assetProducList: any = [];
105
-  getAssetProductList(keyword = '') {
138
+  assetList: any = [];
139
+  getAssetList(keyword = '') {
106 140
     let postData = {
107
-      assetProduct: {
141
+      asset: {
108 142
         hosId: this.hosId,
109 143
         name: keyword,
110 144
       },
@@ -112,9 +146,9 @@ export class IncidentHandleInfoSimpleComponent implements OnInit {
112 146
       sum: 20,
113 147
     };
114 148
     this.mainService
115
-      .getFetchDataList("simple/data", "assetProduct", postData)
149
+      .getFetchDataList("simple/data", "asset", postData)
116 150
       .subscribe((data) => {
117
-        this.assetProducList = data.list;
151
+        this.assetList = data.list;
118 152
       });
119 153
   }
120 154
 

+ 2 - 2
src/app/components/incidentManagement/incident-handle-info/incident-handle-info.component.html

@@ -68,12 +68,12 @@
68 68
     </div>
69 69
   </div>
70 70
 
71
-  <div class="formItem">
71
+  <div class="formItem" *ngIf="itsmIncidentAsset.value == 1">
72 72
     <div class="name"><i class="icon_transport transport-required red" style="visibility: hidden;"></i>关联资产:</div>
73 73
     <div class="value w100">
74 74
       <nz-select class="w100" [(ngModel)]="incidentDataCopy.assetId" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch
75 75
         (nzOnSearch)="changeInp('assetId', $event)" nzAllowClear  nzPlaceHolder="请选择关联资产">
76
-          <ng-container *ngFor="let option of assetProducList">
76
+          <ng-container *ngFor="let option of assetList">
77 77
             <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
78 78
           </ng-container>
79 79
           <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>

+ 28 - 8
src/app/components/incidentManagement/incident-handle-info/incident-handle-info.component.ts

@@ -45,7 +45,7 @@ export class IncidentHandleInfoComponent implements OnInit, OnChanges {
45 45
       if(v[0] === 'synergetic'){
46 46
         this.getSynergeticList(v[1]);
47 47
       }else if(v[0] === 'assetId'){
48
-        this.getAssetProductList(v[1]);
48
+        this.getAssetList(v[1]);
49 49
       }else if(v[0] === 'category'){
50 50
         this.getIncidentCategoryList(v[1]);
51 51
       }
@@ -66,10 +66,11 @@ export class IncidentHandleInfoComponent implements OnInit, OnChanges {
66 66
       this.incidentDataCopy.transSolution = 0;
67 67
     }
68 68
     console.log('this.incidentDataCopy:', this.incidentDataCopy)
69
+    this.getHospitalConfig();
69 70
     this.getHandleCategorys();
70 71
     this.getClosecodes();
71 72
     this.getSynergeticList();
72
-    this.getAssetProductList();
73
+    this.getAssetList();
73 74
     this.getIncidentCategoryList();
74 75
   }
75 76
 
@@ -122,7 +123,7 @@ export class IncidentHandleInfoComponent implements OnInit, OnChanges {
122 123
   getSynergeticList(keyword = '') {
123 124
     let postData = {
124 125
       user: {
125
-        hospital: { id: this.hosId },
126
+        hospital: { id: this.incidentDataCopy.duty.id },
126 127
         name: keyword,
127 128
         simpleQuery: true,
128 129
         roleCodes: 'first-line support',
@@ -169,11 +170,30 @@ export class IncidentHandleInfoComponent implements OnInit, OnChanges {
169 170
     })
170 171
   }
171 172
 
173
+  // 获取院区配置信息
174
+  itsmIncidentAsset:any = {};//是否事件关联资产
175
+  getHospitalConfig() {
176
+    let postData = {
177
+      idx: 0,
178
+      sum: 9999,
179
+      hospitalConfig: {
180
+        model: "itsm",
181
+        hosId: this.hosId,
182
+      },
183
+    }
184
+    this.mainService
185
+      .getFetchDataList("simple/data", "hospitalConfig", postData)
186
+      .subscribe((result) => {
187
+        let list = result.list || [];
188
+        this.itsmIncidentAsset = list.find(v => v.key == 'itsmIncidentAsset') || {};
189
+      });
190
+  }
191
+
172 192
   // 获取资产列表
173
-  assetProducList: any = [];
174
-  getAssetProductList(keyword = '') {
193
+  assetList: any = [];
194
+  getAssetList(keyword = '') {
175 195
     let postData = {
176
-      assetProduct: {
196
+      asset: {
177 197
         hosId: this.hosId,
178 198
         name: keyword,
179 199
       },
@@ -181,9 +201,9 @@ export class IncidentHandleInfoComponent implements OnInit, OnChanges {
181 201
       sum: 20,
182 202
     };
183 203
     this.mainService
184
-      .getFetchDataList("simple/data", "assetProduct", postData)
204
+      .getFetchDataList("simple/data", "asset", postData)
185 205
       .subscribe((data) => {
186
-        this.assetProducList = data.list;
206
+        this.assetList = data.list;
187 207
       });
188 208
   }
189 209
 

+ 30 - 3
src/app/components/incidentManagement/incident-handle-order/incident-handle-order.component.ts

@@ -35,7 +35,7 @@ export class IncidentHandleOrderComponent implements OnInit {
35 35
     });
36 36
     this.hosId = this.tool.getCurrentHospital().id;
37 37
     this.getSummaryList();
38
-    this.getConsumableList();
38
+    this.getHospitalConfig();
39 39
     this.getWorkHourManagementList();
40 40
   }
41 41
 
@@ -143,18 +143,44 @@ export class IncidentHandleOrderComponent implements OnInit {
143 143
     this.changeInpSubject.next([model, e]);
144 144
   }
145 145
 
146
+  // 获取院区配置信息
147
+  itsmZeroStock:any = {};//是否支持零库存
148
+  itsmParentConsumable:any = {};//是否支持父级科室耗材
149
+  getHospitalConfig() {
150
+    let postData = {
151
+      idx: 0,
152
+      sum: 9999,
153
+      hospitalConfig: {
154
+        model: "itsm",
155
+        hosId: this.hosId,
156
+      },
157
+    }
158
+    this.mainService
159
+      .getFetchDataList("simple/data", "hospitalConfig", postData)
160
+      .subscribe((result) => {
161
+        let list = result.list || [];
162
+        this.itsmZeroStock = list.find(v => v.key == 'itsmZeroStock') || {};
163
+        this.itsmParentConsumable = list.find(v => v.key == 'itsmParentConsumable') || {};
164
+        this.getConsumableList();
165
+      });
166
+  }
167
+
146 168
   // 获取耗材
147 169
   consumableList: any = [];
148 170
   getConsumableList(keyword = '', isShowValue = false) {
149
-    let postData = {
171
+    let postData:any = {
150 172
       consumable: {
151 173
         name: keyword,
152
-        hosId: this.hosId,
153 174
         showZero: true,
154 175
       },
155 176
       idx: 0,
156 177
       sum: 20,
157 178
     };
179
+    if(this.itsmParentConsumable.value == 1){
180
+      postData.consumable.upHosId = this.hosId;
181
+		}else{
182
+      postData.consumable.hosId = this.hosId;
183
+		}
158 184
     this.mainService
159 185
       .getFetchDataList("simple/data", "consumable", postData)
160 186
       .subscribe((data) => {
@@ -276,6 +302,7 @@ export class IncidentHandleOrderComponent implements OnInit {
276 302
     let postData = {
277 303
       workHourManagement: {
278 304
         hosId: this.hosId,
305
+        showSecond: 1,
279 306
       },
280 307
       idx: 0,
281 308
       sum: 9999,

+ 2 - 2
src/app/components/incidentManagement/incident-handle-repair/incident-handle-repair.component.html

@@ -39,8 +39,8 @@
39 39
 <div class="detailItem">
40 40
   <div class="name">电话录音:</div>
41 41
   <div class="value">
42
-    <audio class="audio" controls style="outline: none;" *ngIf="incidentData.callID">
43
-      <source [src]="audioSrc">
42
+    <audio class="audio" controls style="outline: none;" *ngIf="incidentData.callID && audioSrc">
43
+      <source [src]="audioSrc" type="audio/wav">
44 44
     </audio>
45 45
   </div>
46 46
 </div>

+ 15 - 5
src/app/components/incidentManagement/incident-handle-repair/incident-handle-repair.component.ts

@@ -21,25 +21,35 @@ export class IncidentHandleRepairComponent implements OnInit {
21 21
 
22 22
   ngOnInit() {
23 23
     this.hosId = this.tool.getCurrentHospital().id;
24
-    this.incidentData.callID && this.getCallrecord();
24
+    this.incidentData.callID && this.getCallLog();
25 25
     this.incidentData.reqAttachment && this.getRepairImgs();
26 26
   }
27 27
 
28 28
   // 获取通话音频
29 29
   audioSrc =  '';//音频
30
-  getCallrecord() {
30
+  getCallLog() {
31 31
     let postData = {
32 32
       idx: 0,
33 33
       sum: 1,
34
-      callrecord: {callAccept: this.incidentData.callID},
34
+      callLog: {callAccept: this.incidentData.callID},
35 35
     };
36 36
     this.mainService
37
-      .getFetchDataList('simple/data', 'callrecord', postData)
37
+      .getFetchDataList('simple/data', 'callLog', postData)
38 38
       .subscribe((result) => {
39 39
         if(result.status == 200){
40 40
           result.list = result.list || [];
41 41
           if(result.list.length){
42
-            this.audioSrc = location.origin + result.list[0].recordingFileName;
42
+            if(result.list[0].path){
43
+              this.mainService.getCallLogPath({ path: result.list[0].path, hosId: result.list[0].hosId }).subscribe((result) => {
44
+                if (result["state"] == 200) {
45
+                  this.audioSrc = location.origin + result["relativePath"];
46
+                }else{
47
+                  this.audioSrc = '';
48
+                }
49
+              });
50
+            }else{
51
+              this.audioSrc = '';
52
+            }
43 53
           }else{
44 54
             this.audioSrc = '';
45 55
           }

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

@@ -1,6 +1,6 @@
1 1
 <div class="modal display_flex justify-content_flex-center align-items_center" *ngIf="incidentData">
2 2
   <div class="modalBody">
3
-    <div class="title">详细处理<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
3
+    <div class="title">{{itsmSimpleHandle.value == 1 ? '简单处理' : '详细处理'}}<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4 4
     <div class="content">
5 5
       <overlay-scrollbars #osComponentRef1 class="detail">
6 6
         <app-incident-handle-repair [incidentData]="incidentData"></app-incident-handle-repair>

+ 2 - 4
src/app/components/incidentManagement/incident-handle/incident-handle.component.less

@@ -114,10 +114,8 @@
114 114
         height: 100%;
115 115
         border-left: 1px solid #E9E9E9;
116 116
         .knowageItem{
117
-          padding: 16px 16px 0;
118
-          &:last-of-type{
119
-            padding-bottom: 16px;
120
-          }
117
+          padding: 16px;
118
+          border-bottom: 1px solid #E9E9E9;
121 119
         }
122 120
         .knowageTitle{
123 121
           font-size: 16px;

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

@@ -321,6 +321,7 @@ export class IncidentHandleComponent implements OnInit {
321 321
         incident: {
322 322
           ...incidentDataCopy,
323 323
           handleCategory: incidentDataCopy.handleCategory ? { id: incidentDataCopy.handleCategory }: undefined,
324
+          closecode: incidentDataCopy.closecode ? { id: incidentDataCopy.closecode }: undefined,
324 325
           synergetic: incidentDataCopy.synergetic.length ? incidentDataCopy.synergetic.map(v => ({id: v})): undefined,
325 326
         },
326 327
       }

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

@@ -52,7 +52,7 @@
52 52
               <td>{{data.callType == 1?'呼入':(data.callType == 0?'呼出':'')}}</td>
53 53
               <td>
54 54
                 <div class="coop">
55
-                  <span *ngIf="data.path" (click)="recordcall(data)">回访录音</span>
55
+                  <span *ngIf="data.path" (click)="recordcall(data)">回录音</span>
56 56
                 </div>
57 57
               </td>
58 58
             </tr>

+ 23 - 1
src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.ts

@@ -19,6 +19,7 @@ export class IncidentSerCallComponent implements OnInit {
19 19
   searchDTO: any = {};
20 20
 
21 21
   @Input() itsmData:any;
22
+  @Input() hsmsData:any;
22 23
   @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
23 24
 
24 25
   constructor(
@@ -77,11 +78,32 @@ export class IncidentSerCallComponent implements OnInit {
77 78
     if (idx) {
78 79
       this.pageIndex = 1;
79 80
     }
81
+    console.log(this.itsmData)
82
+    console.log(this.hsmsData)
83
+    let hosIds;
84
+    if(this.itsmData.mdv2Switch){
85
+      if(this.itsmData.allDuty == 1){
86
+        hosIds = undefined;
87
+      }else{
88
+        hosIds = this.itsmData.checkedHos.map(v => v.id).toString();
89
+      }
90
+    }
91
+    if(this.hsmsData.hsmsSwitch){
92
+      if(this.itsmData.mdv2Switch){
93
+        if(this.itsmData.allDuty == 1){
94
+          hosIds = undefined;
95
+        }else{
96
+          hosIds += ',' + this.hsmsData.checkedHos;
97
+        }
98
+      }else{
99
+        hosIds = this.hsmsData.checkedHos.toString();
100
+      }
101
+    }
80 102
     let postData = {
81 103
       idx: this.pageIndex - 1,
82 104
       sum: this.pageSize,
83 105
       callLog: {
84
-        "hosIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.checkedHos.map(v => v.id).toString() || undefined),
106
+        hosIds,
85 107
         dTMFA: this.searchDTO.dTMFA || undefined,
86 108
         dTMFB: this.searchDTO.dTMFB || undefined,
87 109
         responseTime: this.searchDTO.responseTime ? format(this.searchDTO.responseTime, 'yyyy-MM-dd HH:mm:ss') : undefined,

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

@@ -41,7 +41,7 @@
41 41
               <td>
42 42
                 <div class="coop">
43 43
                   <span *ngIf="data.isExcute === 0" (click)="createOrder(data)">生成工单</span>
44
-                  <span *ngIf="data.isExcute === 0 || data.isExcute === 1" (click)="recordcall(data)">回访录音</span>
44
+                  <span *ngIf="data.isExcute === 0 || data.isExcute === 1" (click)="recordcall(data)">回录音</span>
45 45
                   <span *ngIf="data.isExcute === 0" (click)="showDelModal(data, '确认不受理后,将无法转换为事件工单!', '不受理', 'notAccepted')">不受理</span>
46 46
                   <span *ngIf="data.isExcute === 1" (click)="openItsmDetails(data.incidentDTO)">查看故障单</span>
47 47
                 </div>

+ 3 - 4
src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.html

@@ -6,15 +6,14 @@
6 6
       <ng-container *ngIf="!loading">
7 7
         <div class="items" *ngFor="let item of visitList">
8 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>
9
+            <div class="col"><span [ngClass]="priorityColor(item.priorityId)">{{item.priorityDTO?.name}}</span> {{item.incidentsign}}</div>
10
+            <div class="col">{{item.hosName}} {{item.department?.dept}}</div>
12 11
           </div>
13 12
           <div class="row">
14 13
             <div class="col">故障描述:{{item.description}}</div>
15 14
           </div>
16 15
           <div class="row">
17
-            <div class="col">详细地址:{{ item.place ? item.place.building.buildingName : '' }}{{ item.place ? item.place.floorName : '' }}{{ item.houseNumber }}</div>
16
+            <div class="col">详细地址:{{ item.place ? item.place.building.buildingName : '' }}{{ item.place ? item.place.floorName : '' }}{{ item.houseNumber }} <span [innerHTML]="item.overtimeRemark"></span></div>
18 17
           </div>
19 18
           <div class="row">
20 19
             <div class="col">申请时间:{{ item.startDate | date: 'yyyy-MM-dd HH:mm'}}</div>

+ 22 - 2
src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.ts

@@ -2,6 +2,8 @@ import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angu
2 2
 import { ToolService } from 'src/app/services/tool.service';
3 3
 import { MainService } from 'src/app/services/main.service';
4 4
 import { OverlayScrollbarsComponent } from 'overlayscrollbars-ngx';
5
+import cloneDeep from 'lodash-es/cloneDeep'
6
+import { format, addHours, addDays } from 'date-fns';
5 7
 @Component({
6 8
   selector: 'app-incident-ser-visit',
7 9
   templateUrl: './incident-ser-visit.component.html',
@@ -94,6 +96,24 @@ export class IncidentSerVisitComponent implements OnInit {
94 96
     this.getVisitList();
95 97
   }
96 98
 
99
+  // 延期记录
100
+  transferHandlerLog = function (currentLog) {
101
+    if(!currentLog){
102
+        return '';
103
+    }
104
+    currentLog = cloneDeep(currentLog);
105
+    if(currentLog.extra1DTO && currentLog.extra2 && currentLog.startTime){
106
+        if(currentLog.extra2==0.5){
107
+          currentLog.extra2 = 4;
108
+          return currentLog.extra1DTO.name+" "+ format(addHours(currentLog.startTime, +currentLog.extra2), "MM月dd日") + format(addHours(currentLog.startTime, +currentLog.extra2), "HH时mm分前完成");
109
+        }else{
110
+          return currentLog.extra1DTO.name+" "+ format(addDays(currentLog.startTime, +currentLog.extra2), "MM月dd日前完成");
111
+        }
112
+    }else{
113
+        return '';
114
+    }
115
+  }
116
+
97 117
   // 获取回访列表
98 118
   getVisitList(){
99 119
     this.loading = true;
@@ -101,8 +121,8 @@ export class IncidentSerVisitComponent implements OnInit {
101 121
       idx: 0,
102 122
       sum: 9999,
103 123
       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),
124
+        // "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
125
+        "dutyIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.checkedHos.map(v => v.id).toString() || undefined),
106 126
         "urgentType": +this.itsmData.orderScopeRadio + 1,
107 127
         "queryTask": "callback",
108 128
         "assignee": this.tool.getCurrentUserId(),

+ 16 - 1
src/app/components/incidentManagement/incident-substitutio-assign/incident-substitution-assign.component.ts

@@ -28,6 +28,7 @@ export class IncidentSubstitutionAssignComponent implements OnInit {
28 28
         this.getGroups(v[1]);
29 29
       }
30 30
     });
31
+
31 32
     this.initForm();
32 33
     this.getHospitals(1);
33 34
   }
@@ -43,6 +44,20 @@ export class IncidentSubstitutionAssignComponent implements OnInit {
43 44
       groupId: [null, [Validators.required]],//组
44 45
     });
45 46
     console.log(this.validateForm.controls)
47
+
48
+    // 默认回显当前人的院区和责任部门
49
+    let { hospital, type } = this.tool.getHospitalOrDuty();
50
+    if(type === 'duty'){
51
+      // 是责任部门
52
+      this.changeHospital(hospital.parent.id);
53
+      this.validateForm.controls.hosId.setValue(hospital.parent.id);
54
+      this.validateForm.controls.dutyId.setValue(hospital.id);
55
+      this.changeDuty(hospital.id);
56
+    }else{
57
+      // 不是责任部门
58
+      this.changeHospital(hospital.id);
59
+      this.validateForm.controls.hosId.setValue(hospital.id);
60
+    }
46 61
   }
47 62
 
48 63
   // 修改院区
@@ -171,7 +186,7 @@ export class IncidentSubstitutionAssignComponent implements OnInit {
171 186
       group2: {
172 187
         groupName: keyword,
173 188
         hospitals: this.validateForm.value.dutyId,
174
-        type: 1,
189
+        type: 3,
175 190
       },
176 191
       idx: 0,
177 192
       sum: 10,

+ 1 - 1
src/app/components/incidentManagement/incident-substitutio-redeploy/incident-substitution-redeploy.component.ts

@@ -117,7 +117,7 @@ export class IncidentSubstitutionRedeployComponent implements OnInit {
117 117
       group2: {
118 118
         groupName: keyword,
119 119
         hospitals: this.duty.id,
120
-        type: 1,
120
+        type: 3,
121 121
       },
122 122
       idx: 0,
123 123
       sum: 10,

+ 1 - 1
src/app/components/knowledge-look/knowledge-look.component.less

@@ -128,7 +128,7 @@
128 128
 					z-index:9999;
129 129
 				}
130 130
 			.view-box{
131
-				height: 400px;
131
+				height: 628px;
132 132
 				display: flex;
133 133
 				border: 1px solid #eee;
134 134
 				.left-box{

+ 1 - 1
src/app/components/knowledge-look/knowledge-look.component.ts

@@ -41,7 +41,7 @@ export class KnowledgeLookComponent implements OnInit {
41 41
 			idx: 0,
42 42
 			sum: 9999,
43 43
 			solution: {
44
-				hosId: this.hosId,
44
+				// hosId: data.hosId,
45 45
 				operationType:'lookOver',
46 46
 				solutionNumber:data.solutionNumber
47 47
 			}

+ 4 - 2
src/app/components/order-scope/order-scope.component.ts

@@ -127,8 +127,10 @@ export class OrderScopeComponent implements OnInit {
127 127
     hosTaskTypes = {}; //当前权限下所有院区对应的任务类型
128 128
     hosGroups = {}; //当前权限下所有院区对应的人员分组
129 129
     getOrderScope() {
130
-      this.hosList = this.user.infoPermission.hospitals.filter(v => !this.tool.isDuty(v));
131
-      this.taskTypes = this.user.infoPermission.taskTypes;
130
+      let hospitals = this.user.infoPermission.hospitals || []
131
+      this.hosList = hospitals.filter(v => !this.tool.isDuty(v));
132
+      this.taskTypes = this.user.infoPermission.taskTypes || [];
133
+      let userGroups = this.user.infoPermission.groups || [];
132 134
       this.userGroups = this.user.infoPermission.groups.filter(v => v.type !== 3);
133 135
       this.hosList.forEach((e) => {
134 136
         let arrT = [],

+ 73 - 67
src/app/views/fuwutai/fuwutai.component.html

@@ -118,7 +118,7 @@
118 118
                   <div class="gongdan" (click)="batchDispatchSelect(!data.checked, data.data.id, $event)">
119 119
                     <span class="left mr8" *ngIf="!flagList.itsmFlag1 && flagList.hsmsFlag1"><label nz-checkbox [ngModel]="data.checked" (ngModelChange)="batchDispatchSelect($event, data.data.id)"></label></span>
120 120
                     <span class="left gongdan_name" nz-tooltip [nzTooltipTitle]="data.data.taskType.taskName + (data.data.goodsRemark?'-'+data.data.goodsRemark:'')+'(' + data.data.gdcode + ')'">
121
-                      {{ data.data.isHalfInspect === 1 ? "半程陪检" : data.data.taskType.taskName }}<ng-container *ngIf="data.data.goodsRemark">-{{data.data.goodsRemark}}</ng-container>({{ data.data.gdcode }})
121
+                      <strong>{{ data.data.isHalfInspect === 1 ? "半程陪检" : data.data.taskType.taskName }}</strong><ng-container *ngIf="data.data.goodsRemark">-{{data.data.goodsRemark}}</ng-container>({{ data.data.gdcode }})
122 122
                     </span>
123 123
                     <div class="right_all">
124 124
                       <span nz-tooltip [nzTooltipTitle]="data.data.worker ? data.data.worker.phone : ''" class="right_all_name">{{ data.data.worker ? data.data.worker.name : "" }}</span>
@@ -225,9 +225,9 @@
225 225
                     </span>
226 226
                   </div>
227 227
 
228
-                  <div class="didian" *ngIf="transferHandlerLog(data.data.currentLog)">
228
+                  <div class="didian" *ngIf="data.data.overtimeRemark">
229 229
                     <span class="left">
230
-                      <span [innerHTML]="transferHandlerLog(data.data.currentLog)" nz-tooltip [nzTooltipTitle]="transferHandlerLog(data.data.currentLog)"></span>
230
+                      <span [innerHTML]="data.data.overtimeRemark" nz-tooltip [nzTooltipTitle]="data.data.overtimeRemark"></span>
231 231
                     </span>
232 232
                   </div>
233 233
                   <!-- 时间 -->
@@ -333,7 +333,7 @@
333 333
                       <label nz-checkbox [ngModel]="data.checked" (ngModelChange)="batchWithdrawalSelect($event, data.data.id)"></label>
334 334
                     </span>
335 335
                     <span class="left gongdan_name" nz-tooltip [nzTooltipTitle]="data.data.taskType.taskName + (data.data.goodsRemark?'-'+data.data.goodsRemark:'')+'(' + data.data.gdcode + ')'">
336
-                      {{ data.data.isHalfInspect === 1 ? "半程陪检" : data.data.taskType.taskName }}<ng-container *ngIf="data.data.goodsRemark">-{{data.data.goodsRemark}}</ng-container>({{ data.data.gdcode }})
336
+                      <strong>{{ data.data.isHalfInspect === 1 ? "半程陪检" : data.data.taskType.taskName }}</strong><ng-container *ngIf="data.data.goodsRemark">-{{data.data.goodsRemark}}</ng-container>({{ data.data.gdcode }})
337 337
                     </span>
338 338
                     <div class="right_all">
339 339
                       <span nz-tooltip [nzTooltipTitle]="data.data.worker ? data.data.worker.phone : ''" class="right_all_name">{{ data.data.worker ? data.data.worker.name : "" }}</span>
@@ -436,16 +436,16 @@
436 436
                     </span>
437 437
                   </div>
438 438
 
439
-                  <div class="didian" *ngIf="transferHandlerLog(data.data.currentLog)">
439
+                  <div class="didian" *ngIf="data.data.overtimeRemark">
440 440
                     <span class="left">
441
-                      <span [innerHTML]="transferHandlerLog(data.data.currentLog)" nz-tooltip [nzTooltipTitle]="transferHandlerLog(data.data.currentLog)"></span>
441
+                      <span [innerHTML]="data.data.overtimeRemark" nz-tooltip [nzTooltipTitle]="data.data.overtimeRemark"></span>
442 442
                     </span>
443 443
                   </div>
444 444
                   <!-- 时间 -->
445 445
                   <div class="shijian">
446 446
                     <span class="left">
447 447
                       <span>
448
-                        申请人:{{ data.data.requester?.name }}
448
+                        处理人/组:{{ transferSynergetic(data.data) }}
449 449
                       </span>
450 450
                     </span>
451 451
                     <span class="right">
@@ -537,7 +537,7 @@
537 537
                       <label nz-checkbox [ngModel]="data.checked" (ngModelChange)="batchWithdrawalSelect($event, data.data.id)"></label>
538 538
                     </span>
539 539
                     <span class="left gongdan_name" nz-tooltip [nzTooltipTitle]="data.data.taskType.taskName + (data.data.goodsRemark?'-'+data.data.goodsRemark:'')+'(' + data.data.gdcode + ')'">
540
-                      {{ data.data.isHalfInspect === 1 ? "半程陪检" : data.data.taskType.taskName }}<ng-container *ngIf="data.data.goodsRemark">-{{data.data.goodsRemark}}</ng-container>({{ data.data.gdcode }})
540
+                      <strong>{{ data.data.isHalfInspect === 1 ? "半程陪检" : data.data.taskType.taskName }}</strong><ng-container *ngIf="data.data.goodsRemark">-{{data.data.goodsRemark}}</ng-container>({{ data.data.gdcode }})
541 541
                     </span>
542 542
                     <div class="right_all">
543 543
                       <span nz-tooltip [nzTooltipTitle]="data.data.worker ? data.data.worker.phone : ''" class="right_all_name">{{ data.data.worker ? data.data.worker.name : "" }}</span>
@@ -640,16 +640,16 @@
640 640
                     </span>
641 641
                   </div>
642 642
 
643
-                  <div class="didian" *ngIf="transferHandlerLog(data.data.currentLog)">
643
+                  <div class="didian" *ngIf="data.data.overtimeRemark">
644 644
                     <span class="left">
645
-                      <span [innerHTML]="transferHandlerLog(data.data.currentLog)" nz-tooltip [nzTooltipTitle]="transferHandlerLog(data.data.currentLog)"></span>
645
+                      <span [innerHTML]="data.data.overtimeRemark" nz-tooltip [nzTooltipTitle]="data.data.overtimeRemark"></span>
646 646
                     </span>
647 647
                   </div>
648 648
                   <!-- 时间 -->
649 649
                   <div class="shijian">
650 650
                     <span class="left">
651 651
                       <span>
652
-                        申请人:{{ data.data.requester?.name }}
652
+                        处理人/组:{{ transferSynergetic(data.data) }}
653 653
                       </span>
654 654
                     </span>
655 655
                     <span class="right">
@@ -917,57 +917,6 @@
917 917
       </div>
918 918
     </div>
919 919
     <div class="right">
920
-      <div class="fixedMenuWrap" *ngIf="!websocketLoading">
921
-        <div class="fixedMenu" *ngIf="incomingService.getPhoneNumber()">
922
-          <div class="menuItems">
923
-            <div class="item itemLink ellipsis-oneline cursorDefault w100" nz-tooltip [nzTooltipTitle]="incomingService.getPhoneNumber()">
924
-              {{incomingService.getPhoneNumber()}}
925
-            </div>
926
-          </div>
927
-        </div>
928
-        <!-- 录音盒状态 -->
929
-        <div class="fixedMenu" *ngIf="incomingService.getPhoneNumber() && incomingService.getSign() === 'box'">
930
-          <div class="menuItems">
931
-            <i class="icon_transport transport-shixian call-icon"></i>
932
-          </div>
933
-        </div>
934
-        <!-- 呼叫中心状态 -->
935
-         <!-- 来电 -->
936
-        <div class="fixedMenu" *ngIf="jry_state=='laidian' && incomingService.getSign() === 'callCenter'">
937
-          <div class="menuItems">
938
-            <i class="icon_transport transport-laidian call-icon"></i>
939
-          </div>
940
-        </div>
941
-        <!-- 示忙  -->
942
-        <div class="fixedMenu" *ngIf="jry_state=='shimang' && incomingService.getSign() === 'callCenter'">
943
-          <div class="menuItems">
944
-            <i class="icon_transport transport-shimang1 call-icon"></i>
945
-          </div>
946
-        </div>
947
-        <!-- 示闲  -->
948
-        <div class="fixedMenu" *ngIf="jry_state=='shixian' && incomingService.getSign() === 'callCenter'">
949
-          <div class="menuItems">
950
-            <i class="icon_transport transport-shixian call-icon"></i>
951
-          </div>
952
-        </div>
953
-        <!-- 通话中  -->
954
-        <div class="fixedMenu" *ngIf="jry_state=='tonghuazhong' && incomingService.getSign() === 'callCenter'">
955
-          <div class="menuItems">
956
-            <i class="icon_transport transport-tonghuazhong call-icon"></i>
957
-          </div>
958
-        </div>
959
-
960
-        <div class="fixedMenu" *ngIf="incomingService.getSign() === 'callCenter' && ((jry_state == 'shimang' && isShixian) || jry_state == 'shixian')">
961
-          <div class="menuItems">
962
-            <button nz-button nzType="link" class="item itemLink call-status" (click)="jry_shixian($event)" *ngIf="jry_state=='shimang' && isShixian">
963
-              示闲
964
-            </button>
965
-            <button nz-button nzType="link" class="item itemLink call-status" (click)="jry_shimang($event)" *ngIf="jry_state == 'shixian'">
966
-              示忙
967
-            </button>
968
-          </div>
969
-        </div>
970
-      </div>
971 920
       <div class="fixedMenu" *ngIf="hsmsData.hsmsSwitch || itsmData.mdv2Switch">
972 921
         <div class="menuItems">
973 922
           <button nz-button nzType="link" class="item itemLink" (click)="showNewOrder()" [nzLoading]="getConfigTasktypeLoading || patientLogTasktypeLoading">
@@ -1023,14 +972,71 @@
1023 972
     <div *ngIf="showLastItems && fixedTab != '' && fixedTab != 'logout' && fixedTab != 'toSystem' && fixedTab != 'newOrder'" (click)="fixedMenuShangla()" class="fixedMark"></div>
1024 973
   </div>
1025 974
 
975
+  <!-- 右侧悬浮框-录音盒或呼叫中心状态 -->
976
+  <div id="fixedMenuAll" class="fixedAll">
977
+    <div class="right">
978
+      <div class="fixedMenuWrap" *ngIf="!websocketLoading">
979
+        <div class="fixedMenu" *ngIf="incomingService.getPhoneNumber()">
980
+          <div class="menuItems">
981
+            <div class="item itemLink ellipsis-oneline cursorDefault w100" nz-tooltip [nzTooltipTitle]="incomingService.getPhoneNumber()">
982
+              {{incomingService.getPhoneNumber()}}
983
+            </div>
984
+          </div>
985
+        </div>
986
+        <!-- 录音盒状态 -->
987
+        <div class="fixedMenu" *ngIf="incomingService.getPhoneNumber() && incomingService.getSign() === 'box'">
988
+          <div class="menuItems">
989
+            <i class="icon_transport transport-shixian call-icon"></i>
990
+          </div>
991
+        </div>
992
+        <!-- 呼叫中心状态 -->
993
+         <!-- 来电 -->
994
+        <div class="fixedMenu" *ngIf="jry_state=='laidian' && incomingService.getSign() === 'callCenter'">
995
+          <div class="menuItems">
996
+            <i class="icon_transport transport-laidian call-icon"></i>
997
+          </div>
998
+        </div>
999
+        <!-- 示忙  -->
1000
+        <div class="fixedMenu" *ngIf="jry_state=='shimang' && incomingService.getSign() === 'callCenter'">
1001
+          <div class="menuItems">
1002
+            <i class="icon_transport transport-shimang1 call-icon"></i>
1003
+          </div>
1004
+        </div>
1005
+        <!-- 示闲  -->
1006
+        <div class="fixedMenu" *ngIf="jry_state=='shixian' && incomingService.getSign() === 'callCenter'">
1007
+          <div class="menuItems">
1008
+            <i class="icon_transport transport-shixian call-icon"></i>
1009
+          </div>
1010
+        </div>
1011
+        <!-- 通话中  -->
1012
+        <div class="fixedMenu" *ngIf="jry_state=='tonghuazhong' && incomingService.getSign() === 'callCenter'">
1013
+          <div class="menuItems">
1014
+            <i class="icon_transport transport-tonghuazhong call-icon"></i>
1015
+          </div>
1016
+        </div>
1017
+
1018
+        <div class="fixedMenu" *ngIf="incomingService.getSign() === 'callCenter' && ((jry_state == 'shimang' && isShixian) || jry_state == 'shixian')">
1019
+          <div class="menuItems">
1020
+            <button nz-button nzType="link" class="item itemLink call-status" (click)="jry_shixian($event)" *ngIf="jry_state=='shimang' && isShixian">
1021
+              示闲
1022
+            </button>
1023
+            <button nz-button nzType="link" class="item itemLink call-status" (click)="jry_shimang($event)" *ngIf="jry_state == 'shixian'">
1024
+              示忙
1025
+            </button>
1026
+          </div>
1027
+        </div>
1028
+      </div>
1029
+    </div>
1030
+  </div>
1031
+
1026 1032
   <!-- 左侧悬浮框 -->
1027
-  <div id="fixedMenuLeft" class="fixedLeft">
1033
+  <div id="fixedMenuLeft" class="fixedLeft" [hidden]="!itsmData.mdv2Switch && !hsmsData.hsmsSwitch">
1028 1034
     <div class="right">
1029 1035
       <div class="fixedMenu">
1030 1036
         <div class="menuItems">
1031 1037
           <div class="others">
1032
-            <div class="item" (click)="visitOrder()">回访<span *ngIf="visitNum !== undefined">-{{visitNum}}</span></div>
1033
-            <div class="item" (click)="messageOrder()">留言<span *ngIf="messageNum !== undefined">-{{messageNum}}</span></div>
1038
+            <div class="item" (click)="visitOrder()" *ngIf="itsmData.mdv2Switch">回访<span *ngIf="visitNum !== undefined" [ngClass]="{ red: visitNum > 0}">-{{visitNum}}</span></div>
1039
+            <div class="item" (click)="messageOrder()" *ngIf="itsmData.mdv2Switch">留言<span *ngIf="messageNum !== undefined" [ngClass]="{ red: visitNum > 0}">-{{messageNum}}</span></div>
1034 1040
             <div class="item itemLink" (click)="callOrder()">通话</div>
1035 1041
           </div>
1036 1042
         </div>
@@ -2239,7 +2245,7 @@
2239 2245
       </div>
2240 2246
       <div class="btns display_flex justify-content_flex-center align-items_center">
2241 2247
         <ng-container *ngIf="applyDept && currentTabIndex !== '99999'">
2242
-          <button nz-button class="btn" nzType="primary" (click)="newOrderOk('go')" [nzLoading]="isGoLoading">
2248
+          <button nz-button class="btn" nzType="primary" (click)="newOrderOk('&go&')" [nzLoading]="isGoLoading">
2243 2249
             继续建单
2244 2250
           </button>
2245 2251
           <button nz-button class="btn" nzType="primary" (click)="newOrderOk()" [nzLoading]="isOkLoading">
@@ -2410,4 +2416,4 @@
2410 2416
 <app-incident-ser-message [itsmData]="itsmData" *ngIf="messageShow" (closeModelHs)="closeMessage($event)"></app-incident-ser-message>
2411 2417
 
2412 2418
 <!-- 通话列表 -->
2413
-<app-incident-ser-call [itsmData]="itsmData" *ngIf="callShow" (closeModelHs)="closeCall($event)"></app-incident-ser-call>
2419
+<app-incident-ser-call [itsmData]="itsmData" [hsmsData]="hsmsData" *ngIf="callShow" (closeModelHs)="closeCall($event)"></app-incident-ser-call>

+ 234 - 2
src/app/views/fuwutai/fuwutai.component.less

@@ -6,7 +6,7 @@
6 6
   padding: 16px;
7 7
   display: flex;
8 8
   flex-direction: column;
9
-  ::ng-deep .yyTime .ant-form-item-label {
9
+  ::ng-deep .bottomWrap .bottom .ant-form-item-label {
10 10
     line-height: 24px;
11 11
   }
12 12
 }
@@ -1548,7 +1548,7 @@
1548 1548
   // 右侧悬浮菜单
1549 1549
   .fixed {
1550 1550
     position: fixed;
1551
-    top: 40%;
1551
+    top: calc(40% + 115px + 16px);
1552 1552
     right: 0;
1553 1553
     z-index: 9;
1554 1554
     border-radius: 5px 0 0 5px;
@@ -1776,6 +1776,238 @@
1776 1776
     }
1777 1777
   }
1778 1778
 
1779
+  // 右侧悬浮菜单-录音盒或呼叫中心状态
1780
+  .fixedAll {
1781
+    position: fixed;
1782
+    top: 40%;
1783
+    right: 0;
1784
+    z-index: 10;
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
+    .fixedMark {
1801
+      position: fixed;
1802
+      left: 0;
1803
+      top: 0;
1804
+      width: 100%;
1805
+      height: 100%;
1806
+      background: rgba(0, 0, 0, 0.2);
1807
+      z-index: 88;
1808
+    }
1809
+
1810
+    // overflow: hidden;
1811
+    & > .left {
1812
+      width: 480px;
1813
+      // height: 280px;
1814
+      float: left;
1815
+      background: #fff;
1816
+      padding: 16px;
1817
+      border-radius: 5px;
1818
+      border: 1px solid #e5e9ed;
1819
+      // box-shadow: -8px 5px 15px #eae9e9;
1820
+      position: relative;
1821
+      z-index: 98;
1822
+
1823
+      .con {
1824
+        background: #f9fafb;
1825
+        width: 100%;
1826
+        // height: 300px;
1827
+        // overflow: auto;
1828
+        border-radius: 5px;
1829
+        border: 1px solid #e5e9ed;
1830
+        padding: 16px;
1831
+        &.bindingExtension {
1832
+          min-height: 246px;
1833
+          .bindingExtension_content {
1834
+            display: flex;
1835
+            flex-wrap: wrap;
1836
+          }
1837
+          .noContentFlex {
1838
+            display: flex;
1839
+            justify-content: center;
1840
+            align-items: center;
1841
+            height: 136px;
1842
+            flex-direction: column;
1843
+            .noContent {
1844
+              width: 128px;
1845
+            }
1846
+            p {
1847
+              margin-top: 8px;
1848
+            }
1849
+          }
1850
+          .ant-checkbox-wrapper {
1851
+            font-size: 12px;
1852
+            width: 100%;
1853
+            display: flex;
1854
+            margin-top: 8px;
1855
+            justify-content: space-between;
1856
+            align-items: center;
1857
+            ::ng-deep .ant-checkbox {
1858
+              font-size: 12px;
1859
+              top: 0;
1860
+            }
1861
+            ::ng-deep .ant-checkbox + span {
1862
+              flex: 1;
1863
+            }
1864
+          }
1865
+        }
1866
+
1867
+        &.tableCon {
1868
+          padding: 0;
1869
+
1870
+          .table {
1871
+            font-size: 14px;
1872
+
1873
+            tr {
1874
+              td {
1875
+                padding: 15px 6px;
1876
+                text-align: center;
1877
+
1878
+                & > .tdiv {
1879
+                  overflow: hidden;
1880
+
1881
+                  .name {
1882
+                    float: left;
1883
+                  }
1884
+
1885
+                  .num {
1886
+                    float: right;
1887
+                    font-size: 12px;
1888
+
1889
+                    span {
1890
+                      color: @primary-color;
1891
+                      font-size: 14px;
1892
+                    }
1893
+                  }
1894
+                }
1895
+
1896
+                .notOpen {
1897
+                  color: #666;
1898
+                  font-size: 12px;
1899
+
1900
+                  img {
1901
+                    margin-bottom: 8px;
1902
+                  }
1903
+                }
1904
+              }
1905
+            }
1906
+          }
1907
+        }
1908
+
1909
+        .title {
1910
+          color: #333;
1911
+          text-align: center;
1912
+        }
1913
+
1914
+        .conditions {
1915
+          & > .ant-row {
1916
+            margin: 8px 0;
1917
+            display: flex;
1918
+            align-items: center;
1919
+
1920
+            .ant-row {
1921
+              .ant-col-6 {
1922
+                margin: 2px 0;
1923
+              }
1924
+            }
1925
+
1926
+            .checkAll {
1927
+              width: 100%;
1928
+              border-bottom: 1px solid rgb(233, 233, 233);
1929
+              color: @primary-color;
1930
+            }
1931
+          }
1932
+        }
1933
+
1934
+        .btns {
1935
+          padding: 5px 20px 0 20px;
1936
+        }
1937
+      }
1938
+    }
1939
+
1940
+    .right {
1941
+      // opacity: .5;
1942
+      width: 80px;
1943
+      float: left;
1944
+      // background: rgba(255, 255, 255, 0.5);
1945
+      border-radius: 5px 0 0 5px;
1946
+      position: relative;
1947
+      z-index: 8;
1948
+
1949
+      .fixedMenuWrap{
1950
+        border-radius: 5px;
1951
+        margin-bottom: 16px;
1952
+        .fixedMenu{
1953
+          border-radius: 0!important;
1954
+        }
1955
+      }
1956
+
1957
+      .fixedMenu {
1958
+        border: 1px solid #e5e9ed;
1959
+        color: @primary-color;
1960
+        background: rgb(255, 255, 255);
1961
+        text-align: center;
1962
+        border-radius: 5px 0 0 5px;
1963
+
1964
+        .menuItems {
1965
+          .call-icon{
1966
+            font-size: 26px;
1967
+            color: @primary-color;
1968
+            padding: 16px 0;
1969
+            &.transport-shimang1{
1970
+              color: red;
1971
+            }
1972
+          }
1973
+          .call-status{
1974
+            background-color: @primary-color;
1975
+            color: #fff;
1976
+            width: 100%;
1977
+          }
1978
+          .item {
1979
+            height: 35px;
1980
+            line-height: 35px;
1981
+            padding: 0 6px;
1982
+            cursor: pointer;
1983
+            border-bottom: 1px solid #e5e9ed;
1984
+            user-select: none;
1985
+            &.itemLink {
1986
+              border-bottom: none;
1987
+              border-radius: 0;
1988
+            }
1989
+
1990
+            &.checked {
1991
+              background: #fff;
1992
+              color: #52ab77;
1993
+              opacity: 1;
1994
+              box-shadow: -3px 4px 7px #eae9e9;
1995
+            }
1996
+          }
1997
+
1998
+          .others {
1999
+            transition: height 0.4s linear;
2000
+            overflow: hidden;
2001
+          }
2002
+        }
2003
+
2004
+        .arrow {
2005
+          cursor: pointer;
2006
+        }
2007
+      }
2008
+    }
2009
+  }
2010
+
1779 2011
   // 左侧悬浮菜单
1780 2012
   .fixedLeft {
1781 2013
     position: fixed;

+ 192 - 28
src/app/views/fuwutai/fuwutai.component.ts

@@ -438,6 +438,9 @@ export class FuwutaiComponent implements OnInit {
438 438
             this.incidentModel.incomingPhone = this.callNumber = data["phone"];
439 439
             this.showPromptModal("建单", true, "", "closeGo");
440 440
           } else {
441
+            if(this.incomingService.getSign() === 'callCenter' && this.incomingService.getPhoneNumber()){
442
+              this.jry_shixian();
443
+            }
441 444
             this.showPromptModal("建单", true, "", "close");
442 445
           }
443 446
         } else {
@@ -473,6 +476,9 @@ export class FuwutaiComponent implements OnInit {
473 476
           this.incidentModel.incomingPhone = this.callNumber = data["phone"];
474 477
           this.showPromptModal("建单", true, "", "closeGo");
475 478
         } else {
479
+          if(this.incomingService.getSign() === 'callCenter' && this.incomingService.getPhoneNumber()){
480
+            this.jry_shixian();
481
+          }
476 482
           this.showPromptModal("建单", true, "", "close");
477 483
         }
478 484
       } else {
@@ -532,6 +538,9 @@ export class FuwutaiComponent implements OnInit {
532 538
           this.incidentModel.incomingPhone = this.callNumber = data["phone"];
533 539
           this.showPromptModal("建单", true, "", "closeGo");
534 540
         } else {
541
+          if(this.incomingService.getSign() === 'callCenter' && this.incomingService.getPhoneNumber()){
542
+            this.jry_shixian();
543
+          }
535 544
           this.showPromptModal("建单", true, "", "close");
536 545
         }
537 546
       } else {
@@ -704,10 +713,10 @@ export class FuwutaiComponent implements OnInit {
704 713
     this.initControlView();
705 714
     this.moveMenu("fixedMenu");
706 715
     this.moveMenu("fixedMenuLeft");
716
+    this.moveMenuAll("fixedMenuAll");
707 717
     if(this.incomingService.getSign() === 'box'){
708 718
       this.getPhoneNum();
709 719
     }else if(this.incomingService.getSign() === 'callCenter'){
710
-      let _this = this;
711 720
       setTimeout(this.getPhoneNum.bind(this), 2000)
712 721
     }else{
713 722
       this.websocketLoading = false;
@@ -967,6 +976,7 @@ export class FuwutaiComponent implements OnInit {
967 976
     //呼入回调函数
968 977
     TLWSA.onCallin = function (jso) {
969 978
       console.log(jso);
979
+      _this.incidentModel = {};
970 980
       _this.callNumber = _this.incidentModel.incomingPhone = jso.caller;//来电的电话
971 981
       _this.incidentModel.callID = jso.crs;//来电的话机id
972 982
       if (jso) {
@@ -1250,12 +1260,12 @@ export class FuwutaiComponent implements OnInit {
1250 1260
   // 保存工单信息
1251 1261
   confirmOrderScope(data){
1252 1262
     if (data.status == 200) {
1253
-      this.websocketLoading = true;
1263
+      // this.websocketLoading = true;
1254 1264
       this.cancelOrderScope();
1255 1265
       this.showPromptModal("保存", true, "");
1256 1266
       // 关闭phone的websocket
1257
-      this.incomingService.closeWs(true);
1258
-      this.getPhoneNum(false);
1267
+      // this.incomingService.closeWs(true);
1268
+      // this.getPhoneNum(false);
1259 1269
       this.user.user.scope = data.data;
1260 1270
       localStorage.setItem("user", JSON.stringify(this.user));
1261 1271
       this.initOrderScope();
@@ -1326,7 +1336,10 @@ export class FuwutaiComponent implements OnInit {
1326 1336
       this.incomingService.connectWs().subscribe((data) => {
1327 1337
         // data = { status: 201, phone: '013581394341' };//ceshi
1328 1338
         console.log(data);
1339
+        console.log(this.incidentModel);
1329 1340
         this.websocketLoading = false;
1341
+        this.incidentModel = {};
1342
+        this.incidentMsg = {};
1330 1343
         this.incidentModel.callID = data.callId || undefined;
1331 1344
         if (data.status == 200 && data.phone) {
1332 1345
           this.msg.info('签入成功');
@@ -1338,7 +1351,7 @@ export class FuwutaiComponent implements OnInit {
1338 1351
           //没绑定科室
1339 1352
           if (!this.newOrderShow && !this.newOrderShowOpen) {
1340 1353
             this.applyDept = null;
1341
-            this.showNewOrder("no", data.phone, true);
1354
+            this.showNewOrder("no", data.phone, true, '来电弹屏');
1342 1355
           }
1343 1356
         }
1344 1357
       });
@@ -1370,15 +1383,33 @@ export class FuwutaiComponent implements OnInit {
1370 1383
           if (result.list.length > 0) {
1371 1384
             //绑定了科室
1372 1385
             if (!this.newOrderShow && !this.newOrderShowOpen) {
1386
+              let incidentModel:any = Object.assign({}, this.incidentModel);
1387
+              let incidentMsg:any = Object.assign({}, this.incidentMsg);
1388
+              incidentModel.department = result.list[0];
1389
+              incidentModel.department && incidentModel.department.hospital && (incidentModel.hosId = incidentModel.department.hospital.parent ? incidentModel.department.hospital.parent.id : incidentModel.department.hospital.id);
1390
+              incidentModel.department && incidentModel.department.building && (incidentModel.area = incidentModel.department.building.id);
1391
+              incidentModel.department && incidentModel.department.floor && (incidentModel.place = incidentModel.department.floor.id);
1392
+              incidentModel.department && incidentModel.department.address && (incidentModel.houseNumber = incidentModel.department.address);
1393
+              incidentModel.department && (incidentMsg.deptManyPhone = incidentModel.department.manyPhone);
1394
+              incidentModel.department && (incidentMsg.deptName = incidentModel.department.dept);
1395
+
1396
+              incidentModel.department && (incidentModel.department = incidentModel.department.id);
1397
+
1398
+              this.incidentModel = incidentModel;
1399
+              this.incidentMsg = incidentMsg;
1400
+              this.searchApplicationRequester();
1373 1401
               this.applyDeptMiddle = result.list[0];
1374
-              this.showNewOrder("yes", this.incidentModel.incomingPhone, true);
1402
+              this.showNewOrder("yes", this.incidentModel.incomingPhone, true, '来电弹屏');
1375 1403
             }
1376 1404
           } else {
1377 1405
             //没绑定科室
1378 1406
             console.log(this.newOrderShow);
1407
+            console.log(this.incidentModel);
1408
+            console.log(this.incidentMsg);
1409
+            this.incidentMsg = {};
1379 1410
             if (!this.newOrderShow && !this.newOrderShowOpen) {
1380 1411
               this.applyDept = null;
1381
-              this.showNewOrder("no", this.incidentModel.incomingPhone, true);
1412
+              this.showNewOrder("no", this.incidentModel.incomingPhone, true, '来电弹屏');
1382 1413
             }
1383 1414
           }
1384 1415
         }
@@ -1587,7 +1618,11 @@ export class FuwutaiComponent implements OnInit {
1587 1618
 
1588 1619
     let postData = {
1589 1620
       incident: {
1590
-        department: { id },
1621
+        "deleteFlag": 0,
1622
+        queryTask: 'all',
1623
+        department: {
1624
+          id,
1625
+        },
1591 1626
       },
1592 1627
       idx: 0,
1593 1628
       sum: 6,
@@ -1803,11 +1838,14 @@ export class FuwutaiComponent implements OnInit {
1803 1838
   // 获取回访列表
1804 1839
   visitNum:any;
1805 1840
   getVisitList(){
1841
+    if(!this.itsmData.mdv2Switch){
1842
+      return;
1843
+    }
1806 1844
     let postData: any = {
1807 1845
       idx: 0,
1808 1846
       sum: 1,
1809 1847
       incident: {
1810
-        "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
1848
+        // "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
1811 1849
         "dutyIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.checkedHos.map(v => v.id).toString() || undefined),
1812 1850
         "urgentType": +this.itsmData.orderScopeRadio + 1,
1813 1851
         "queryTask": "callback",
@@ -1826,6 +1864,9 @@ export class FuwutaiComponent implements OnInit {
1826 1864
   // 获取留言列表
1827 1865
   messageNum:any;
1828 1866
   getMessageList(){
1867
+    if(!this.itsmData.mdv2Switch){
1868
+      return;
1869
+    }
1829 1870
     let postData: any = {
1830 1871
       idx: 0,
1831 1872
       sum: 1,
@@ -1902,7 +1943,7 @@ export class FuwutaiComponent implements OnInit {
1902 1943
       }
1903 1944
       if(stateId == 1){
1904 1945
         postData.incidentQuery.incident = {
1905
-          "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
1946
+          // "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
1906 1947
           "dutyIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.checkedHos.map(v => v.id).toString() || undefined),
1907 1948
           "urgentType": +this.itsmData.orderScopeRadio + 1,
1908 1949
           "queryTask": "storageAccept",
@@ -1911,7 +1952,7 @@ export class FuwutaiComponent implements OnInit {
1911 1952
         }
1912 1953
       }else if(stateId == 2){
1913 1954
         postData.incidentQuery.incident = {
1914
-          "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
1955
+          // "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
1915 1956
           "dutyIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.checkedHos.map(v => v.id).toString() || undefined),
1916 1957
           "urgentType": +this.itsmData.orderScopeRadio + 1,
1917 1958
           "queryTask": "todoReassign",
@@ -1919,12 +1960,13 @@ export class FuwutaiComponent implements OnInit {
1919 1960
         }
1920 1961
       }else if(stateId == 3){
1921 1962
         postData.incidentQuery.incident = {
1922
-          "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
1963
+          // "groupIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.scopeGroups.map(v => v.id).toString() || undefined),
1923 1964
           "dutyIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.checkedHos.map(v => v.id).toString() || undefined),
1924 1965
           "urgentType": +this.itsmData.orderScopeRadio + 1,
1925 1966
           "queryTask": "doing",
1926 1967
           "assignee": this.tool.getCurrentUserId(),
1927 1968
           "deleteFlag": 0,
1969
+          "platform": 3,
1928 1970
         }
1929 1971
       }
1930 1972
     }
@@ -2230,11 +2272,20 @@ export class FuwutaiComponent implements OnInit {
2230 2272
   resetOrderData(){
2231 2273
     this.applicationRequesterList = [];
2232 2274
     this.fileList = [];
2275
+    this.repairImgs = [];
2276
+    this.isRelatedDepartment = true;
2277
+    this.solutionId = undefined;
2233 2278
   }
2234 2279
   // 打开新建工单
2235 2280
   deathTasktypeId; //获取这个写死的任务类型的id,送病人回病房
2236 2281
   deathTasktypeIdPatient; //获取这个写死的任务类型的id,转出院记录
2237 2282
   async showNewOrder(des = '', phone = '', isInit = false, buildType = '') {
2283
+    if(this.incomingService.getSign() === 'callCenter' && this.incomingService.getPhoneNumber()){
2284
+      //进入弹窗,强制示忙
2285
+      setTimeout(()=>{
2286
+        tlwsa.tlaAcw();
2287
+      },0)
2288
+    }
2238 2289
     this.buildType = buildType;
2239 2290
     if(this.itsmData.mdv2Switch){
2240 2291
       this.resetOrderData();
@@ -2243,7 +2294,7 @@ export class FuwutaiComponent implements OnInit {
2243 2294
       this.searchApplicationPriority();
2244 2295
       this.searchApplicationSource();
2245 2296
       isInit ? this.searchApplicationDepartment('itsm', undefined, undefined, undefined, true) : this.searchApplicationDepartment('itsm');
2246
-      isInit && ((this.isRelatedDepartment && this.incidentModel.department) || (!this.isRelatedDepartment && this.incidentModel.hosId) ) && this.incidentModel.hosId && this.searchApplicationBuilding();
2297
+      isInit && ((this.isRelatedDepartment && this.incidentModel.department) || (!this.isRelatedDepartment && this.incidentModel.hosId) || this.buildType === '报修转事件' ) && this.incidentModel.hosId && this.searchApplicationBuilding();
2247 2298
       isInit && this.incidentModel.area && this.searchApplicationFloor();
2248 2299
       if(!this.hsmsData.hsmsSwitch){
2249 2300
         this.taskBuild = null;
@@ -2323,6 +2374,11 @@ export class FuwutaiComponent implements OnInit {
2323 2374
         this.searchTaskList.forEach((item) => {
2324 2375
           item.sid = item.associationTypeId + "_" + item.id;
2325 2376
         });
2377
+        // if(phone){
2378
+        //   this.getAutoWorkTypes(true, isInit);
2379
+        // }else{
2380
+        //   this.getAutoWorkTypes(false, isInit);
2381
+        // }
2326 2382
         this.getAutoWorkTypes(false, isInit);
2327 2383
       }
2328 2384
     });
@@ -2385,16 +2441,10 @@ export class FuwutaiComponent implements OnInit {
2385 2441
 
2386 2442
       let deptObj = this.applicationDeptList.find(v => v.id == this.incidentModel.department);
2387 2443
 
2388
-      if(this.applyDept !== this.incidentModel.department){
2444
+      if(this.applyDept != this.incidentModel.department){
2389 2445
         this.applyDept = this.incidentModel.department;
2390 2446
         this.searchApplicationDepartment('hsms', deptObj ? deptObj.dept : '', undefined, this.incidentModel.department);
2391 2447
       }
2392
-
2393
-      // 回显事件来源
2394
-      let source = this.applicationSourceList.find(v => v.value === 'phone');
2395
-      if(!this.incidentModel.source && source){
2396
-        this.incidentModel.source = source.id;
2397
-      }
2398 2448
     }else if(this.currentTabIndex === '99999'){
2399 2449
       if(this.incidentModel.department){
2400 2450
         this.rightTitle_tab = [
@@ -2406,7 +2456,7 @@ export class FuwutaiComponent implements OnInit {
2406 2456
 
2407 2457
       let deptObj = this.applicationDepartmentList.find(v => v.id == this.applyDept);
2408 2458
 
2409
-      if(this.incidentModel.department !== this.applyDept && !isInit){
2459
+      if(this.incidentModel.department != this.applyDept && (!isInit || !this.buildType)){
2410 2460
         this.incidentModel.department = this.applyDept;
2411 2461
         this.searchApplicationDepartment('itsm', deptObj ? deptObj.dept : '', undefined, this.applyDept);
2412 2462
       }
@@ -2497,7 +2547,6 @@ export class FuwutaiComponent implements OnInit {
2497 2547
 
2498 2548
     // 根据院区和故障现象带出责任部门,优先级,维修人/组
2499 2549
     if(this.incidentModel.category && e){
2500
-
2501 2550
       let postData = {
2502 2551
         idx: 0,
2503 2552
         sum: 9999,
@@ -2530,6 +2579,11 @@ export class FuwutaiComponent implements OnInit {
2530 2579
             this.showGroupOrUser();
2531 2580
           }
2532 2581
         });
2582
+    }else{
2583
+      this.incidentModel.group = undefined;
2584
+      this.applicationGroupList = [];
2585
+      this.incidentModel.user = undefined;
2586
+      this.applicationUserList = [];
2533 2587
     }
2534 2588
   }
2535 2589
   // 申请人列表(搜索)
@@ -2646,6 +2700,11 @@ export class FuwutaiComponent implements OnInit {
2646 2700
             this.showGroupOrUser();
2647 2701
           }
2648 2702
         });
2703
+    }else{
2704
+      this.incidentModel.group = undefined;
2705
+      this.applicationGroupList = [];
2706
+      this.incidentModel.user = undefined;
2707
+      this.applicationUserList = [];
2649 2708
     }
2650 2709
   }
2651 2710
 
@@ -2858,6 +2917,13 @@ export class FuwutaiComponent implements OnInit {
2858 2917
   // 处理组列表
2859 2918
   applicationGroupList:any[] = [];
2860 2919
   searchApplicationGroup(keyWord?) {
2920
+    if(!this.incidentModel.duty){
2921
+      this.incidentModel.group = undefined;
2922
+      this.applicationGroupList = [];
2923
+      this.incidentModel.user = undefined;
2924
+      this.applicationUserList = [];
2925
+      return;
2926
+    }
2861 2927
     let postData = {
2862 2928
       idx: 0,
2863 2929
       sum: 20,
@@ -2923,6 +2989,11 @@ export class FuwutaiComponent implements OnInit {
2923 2989
         this.isLoading = false;
2924 2990
         if (data.status == 200) {
2925 2991
           this.applicationPriorityList = data.list;
2992
+          // 回显事件来源
2993
+          let source = this.applicationSourceList.find(v => v.value === 'phone');
2994
+          if(!this.incidentModel.source && source){
2995
+            this.incidentModel.source = source.id;
2996
+          }
2926 2997
         }
2927 2998
       });
2928 2999
   }
@@ -3069,6 +3140,8 @@ export class FuwutaiComponent implements OnInit {
3069 3140
             let ids = this.applicationDeptList.map(v => v.id);
3070 3141
             isInit && !ids.includes(this.incidentModel.department) && (this.applicationDeptList.unshift({id: this.incidentModel.department, dept: this.incidentMsg.deptName}))
3071 3142
             console.log(this.applicationDeptList);
3143
+            console.log(this.incidentModel);
3144
+            console.log(this.incidentMsg);
3072 3145
             deptId && this.changeApplyDept(deptId);
3073 3146
           }
3074 3147
         }
@@ -3101,7 +3174,7 @@ export class FuwutaiComponent implements OnInit {
3101 3174
 
3102 3175
     let deptObj = this.applicationDepartmentList.find(v => v.id == e);
3103 3176
 
3104
-    if(this.incidentModel.department !== e){
3177
+    if(this.incidentModel.department != e){
3105 3178
       this.incidentModel.department = e;
3106 3179
       this.searchApplicationDepartment('itsm', deptObj ? deptObj.dept : '', undefined, e);
3107 3180
     }
@@ -3120,7 +3193,7 @@ export class FuwutaiComponent implements OnInit {
3120 3193
 
3121 3194
     let deptObj = this.applicationDeptList.find(v => v.id == e);
3122 3195
 
3123
-    if(this.applyDept !== e){
3196
+    if(this.applyDept != e){
3124 3197
       this.applyDept = e;
3125 3198
       this.searchApplicationDepartment('hsms', deptObj ? deptObj.dept : '', undefined, e);
3126 3199
     }
@@ -3155,8 +3228,44 @@ export class FuwutaiComponent implements OnInit {
3155 3228
     }
3156 3229
     this.searchApplicationRequester();
3157 3230
 
3158
-    // 回显维修人/组
3159
-    this.showGroupOrUser();
3231
+    // 根据院区和故障现象带出责任部门,优先级,维修人/组
3232
+    if(this.incidentModel.category && this.incidentModel.hosId){
3233
+      let postData = {
3234
+        idx: 0,
3235
+        sum: 9999,
3236
+        incidentCategoryConfig: {
3237
+          categoryId: this.incidentModel.category,
3238
+          hosId: this.incidentModel.hosId,
3239
+        },
3240
+      };
3241
+      console.log(postData);
3242
+      // return;
3243
+      this.isLoading = true;
3244
+      this.mainService
3245
+        .getFetchDataList("simple/data", "incidentCategoryConfig", postData)
3246
+        .subscribe((data) => {
3247
+          this.isLoading = false;
3248
+          if (data.status == 200) {
3249
+            let list = data.list || [];
3250
+            if(list.length > 0){
3251
+              console.log(list[0]);
3252
+              this.incidentCategoryConfig = list[0];
3253
+            }else{
3254
+              this.incidentCategoryConfig = {};
3255
+            }
3256
+
3257
+            // 根据院区和故障现象带出责任部门,优先级,维修人/组
3258
+            this.incidentModel.duty = this.incidentCategoryConfig.dutyDTO;
3259
+            this.incidentModel.priorityId = this.incidentCategoryConfig.priority;
3260
+
3261
+            // 回显维修人/组
3262
+            this.showGroupOrUser();
3263
+          }
3264
+        });
3265
+    }else{
3266
+      // 回显维修人/组
3267
+      this.showGroupOrUser();
3268
+    }
3160 3269
   }
3161 3270
   // 申请科室列表(搜索)失去焦点的时候
3162 3271
   changeApplicationDepartment(phone?) {
@@ -3479,6 +3588,9 @@ export class FuwutaiComponent implements OnInit {
3479 3588
       this.incidentModel.group = undefined;
3480 3589
       this.showPromptModal("操作", true, "", "");
3481 3590
     }else{
3591
+      if(this.incomingService.getSign() === 'callCenter' && this.incomingService.getPhoneNumber()){
3592
+        this.jry_shixian();
3593
+      }
3482 3594
       this.newOrderShow = false; //关闭弹窗
3483 3595
       this.newOrderShowOpen = false; //此时可出现新的弹窗
3484 3596
       this.showPromptModal("操作", true, "", "");
@@ -3988,7 +4100,11 @@ export class FuwutaiComponent implements OnInit {
3988 4100
     this.fixedTab = '';
3989 4101
   }
3990 4102
 
4103
+  // 取消
3991 4104
   newOrderCancel(): void {
4105
+    if(this.incomingService.getSign() === 'callCenter' && this.incomingService.getPhoneNumber()){
4106
+      this.jry_shixian();
4107
+    }
3992 4108
     this.newOrderShow = false;
3993 4109
     this.newOrderShowOpen = false;
3994 4110
     this.currentTabIndex = "";
@@ -4316,11 +4432,12 @@ export class FuwutaiComponent implements OnInit {
4316 4432
     return timeStr;
4317 4433
   }
4318 4434
 
4319
-  // 菜单拖拽
4435
+  // 菜单拖拽-上下
4320 4436
   moveMenu(nodeId) {
4321 4437
     let fixedMenu = document.getElementById(nodeId);
4322 4438
     if (!fixedMenu) return;
4323 4439
     fixedMenu.onmousedown = function (e) {
4440
+      fixedMenu.classList.remove('maskFull');
4324 4441
       let y = e.clientY - fixedMenu.offsetTop;
4325 4442
       document.onmousemove = function (ev) {
4326 4443
         fixedMenu.classList.add('maskFull');
@@ -4339,6 +4456,47 @@ export class FuwutaiComponent implements OnInit {
4339 4456
     };
4340 4457
   }
4341 4458
 
4459
+  // 处理人+协同人
4460
+  transferSynergetic(incidentData){
4461
+    let str = incidentData.groupORHandlerUser || "";
4462
+    if(incidentData.synergetic && incidentData.synergetic.length){
4463
+        str += ',' + incidentData.synergetic.map(v => v.name).join(',');
4464
+    }
4465
+    return str;
4466
+  }
4467
+
4468
+  // 菜单拖拽-自由
4469
+  moveMenuAll(nodeId) {
4470
+    let fixedMenu = document.getElementById(nodeId);
4471
+    if (!fixedMenu) return;
4472
+    fixedMenu.onmousedown = function (e) {
4473
+      fixedMenu.classList.remove('maskFull');
4474
+      let x = e.clientX - fixedMenu.offsetLeft;
4475
+      let y = e.clientY - fixedMenu.offsetTop;
4476
+      document.onmousemove = function (ev) {
4477
+        fixedMenu.classList.add('maskFull');
4478
+        var _y = ev.clientY - y > 0 ? ev.clientY - y : 0;
4479
+        var h = window.innerHeight;
4480
+        if (_y > h - fixedMenu.clientHeight) {
4481
+          _y = h - fixedMenu.clientHeight;
4482
+        }
4483
+        fixedMenu.style.top = _y + "px";
4484
+
4485
+        var _x = ev.clientX - x > 0 ? ev.clientX - x : 0;
4486
+        var w = window.innerWidth;
4487
+        if (_x > w - fixedMenu.clientWidth) {
4488
+          _x = w - fixedMenu.clientWidth;
4489
+        }
4490
+        fixedMenu.style.right = w - _x - fixedMenu.clientWidth + "px";
4491
+      };
4492
+      document.onmouseup = function () {
4493
+        fixedMenu.classList.remove('maskFull');
4494
+        document.onmousemove = null;
4495
+        document.onmouseup = null;
4496
+      };
4497
+    };
4498
+  }
4499
+
4342 4500
   @ViewChild("msgTemplate", { static: false }) msgTemplate: TemplateRef<any>; //消息通知模板
4343 4501
   // 消息提醒
4344 4502
   createBasicNotification(msgs): void {
@@ -4391,6 +4549,12 @@ export class FuwutaiComponent implements OnInit {
4391 4549
 
4392 4550
   // 运维、配送工单切换
4393 4551
   filterOrderList(type, state){
4552
+    if(!this.itsmData.mdv2Switch && this.hsmsData.hsmsSwitch){
4553
+      return;
4554
+    }
4555
+    if(this.itsmData.mdv2Switch && !this.hsmsData.hsmsSwitch){
4556
+      return;
4557
+    }
4394 4558
     this.flagList[`${type}Flag${state}`] = !this.flagList[`${type}Flag${state}`];
4395 4559
     this.getOrderList(state, state === 1);
4396 4560
   }
@@ -4416,7 +4580,7 @@ export class FuwutaiComponent implements OnInit {
4416 4580
     if(currentLog.extra1DTO && currentLog.extra2 && currentLog.startTime){
4417 4581
         if(currentLog.extra2==0.5){
4418 4582
           currentLog.extra2 = 4;
4419
-          return currentLog.extra1DTO.name+"<br>"+ format(addHours(currentLog.startTime, +currentLog.extra2), "MM月dd日")+"<br>"+ format(addDays(currentLog.startTime, +currentLog.extra2), "HH时mm分前完成");
4583
+          return currentLog.extra1DTO.name+"<br>"+ format(addHours(currentLog.startTime, +currentLog.extra2), "MM月dd日")+"<br>"+ format(addHours(currentLog.startTime, +currentLog.extra2), "HH时mm分前完成");
4420 4584
         }else{
4421 4585
           return currentLog.extra1DTO.name+"<br>"+ format(addDays(currentLog.startTime, +currentLog.extra2), "MM月dd日前完成");
4422 4586
         }

+ 1 - 1
src/app/views/hospital-config/hospital-config.component.ts

@@ -441,7 +441,7 @@ export class HospitalConfigComponent implements OnInit {
441 441
    * @returns
442 442
    */
443 443
   getGroupList(hosId) {
444
-    let postData = { idx: 0, sum: 100, group2: { hospitals: hosId, type: 1 } };
444
+    let postData = { idx: 0, sum: 100, group2: { hospitals: hosId, typeIds: '1,3' } };
445 445
     return this.mainService
446 446
       .getFetchDataList("data", "group2", postData)
447 447
       .toPromise();

+ 11 - 10
src/app/views/incident-management/incident-management.component.html

@@ -1,7 +1,7 @@
1 1
 <div class="list-template pt0">
2 2
   <div class="list-template__content">
3 3
     <div class="list-template__tab">
4
-      <div class="list-template__tabItem" [ngClass]="{'active': queryTask == item.key}" (click)="changeTab(item.key)" *ngFor="let item of tabs">{{item.value}}({{item.num}})</div>
4
+      <div class="list-template__tabItem" [ngClass]="{'active': queryTask == item.key}" (click)="changeTab(item.key)" *ngFor="let item of tabs">{{item.value}}<span [ngClass]="{ red: item.isRed && item.num > 0}">({{item.num}})</span></div>
5 5
     </div>
6 6
     <div class="list-template__top" nz-row>
7 7
       <div nz-col nzXl='18' class="list-template__searchBox">
@@ -72,7 +72,7 @@
72 72
             <td>{{index+(pageIndex-1) * pageSize + 1}}</td>
73 73
             <td class="text_align_left">
74 74
               <span [ngClass]="priorityColor(data.priorityId)">{{ data.priorityDTO?.name }}</span>
75
-              {{ data.incidentsign }} {{ data.description }}
75
+              {{ data.incidentsign }} {{ data.acceptDate | date: 'yyyy-MM-dd HH:mm' }}<br>{{ data.description }}
76 76
               <i class="icon_transport transport-a-11111 ml8" *ngIf="data.reqAttachment"></i>
77 77
               <i class="icon_transport transport-luyin ml8" *ngIf="data.reqRecord"></i>
78 78
             </td>
@@ -90,19 +90,20 @@
90 90
             <td>
91 91
               {{ data.acceptUser?.name || '无' }}<br>
92 92
               {{ transferSynergetic(data) }}<br>
93
-              <span [ngStyle]="{ color: data.handleColourInfo ? data.handleColourInfo.value : '' }">{{ data.overdueTime | date: 'MM-dd HH:mm' }}</span>前接单
93
+              <ng-container *ngIf="(data.state.value === 'pending' || data.state.value === 'reassign') && data.overdueResponseDate"><span [ngStyle]="{ color: data.acceptColourInfo ? data.acceptColourInfo.value : '' }">{{ data.overdueResponseDate | date: 'MM-dd HH:mm' }}</span>前接单</ng-container>
94
+              <ng-container *ngIf="data.state.value === 'handler' && data.overdueTime"><span [ngStyle]="{ color: data.handleColourInfo ? data.handleColourInfo.value : '' }">{{ data.overdueTime | date: 'MM-dd HH:mm' }}</span>前处理</ng-container>
94 95
             </td>
95
-            <td [innerHTML]="transferHandlerLog(data.currentLog)"></td>
96
+            <td [innerHTML]="data.overtimeRemark"></td>
96 97
             <td>{{ data.state?.name }}</td>
97 98
             <td>
98 99
               <div class="coop">
99 100
                 <span *ngIf="coopBtns.look" (click)="detail($event,data)">查看</span>
100
-                <span *ngIf="computedVisit(data)" (click)="visit($event,data)">回访</span>
101
-                <span *ngIf="computedReceive(data)" (click)="showDelModal($event, data,'您确认要接单吗?','接单','receive')">接单</span>
102
-                <span *ngIf="computedHandle(data)" (click)="handle($event,data)">处理</span>
103
-                <span *ngIf="computedSubstitution(data)" (click)="substitution($event,data)">换人处理</span>
104
-                <span *ngIf="computedPostpone(data)" (click)="postpone($event,data)">延期处理</span>
105
-                <span *ngIf="computedSetDuty(data)" (click)="setDuty($event,data)">设置责任部门</span>
101
+                <span *ngIf="data.computedVisitFlag" (click)="visit($event,data)">回访</span>
102
+                <span *ngIf="data.computedReceiveFlag" (click)="showDelModal($event, data,'您确认要接单吗?','接单','receive')">接单</span>
103
+                <span *ngIf="data.computedHandleFlag" (click)="handle($event,data)">处理</span>
104
+                <span *ngIf="data.computedSubstitutionFlag" (click)="substitution($event,data)">换人处理</span>
105
+                <span *ngIf="data.computedPostponeFlag" (click)="postpone($event,data)">延期处理</span>
106
+                <span *ngIf="data.computedSetDutyFlag" (click)="setDuty($event,data)">设置责任部门</span>
106 107
                 <span *ngIf="coopBtns.del && data.deleteFlag !== 1" (click)="showDelModal($event, data,'您确认要删除吗?','删除','del')">删除</span>
107 108
               </div>
108 109
             </td>

+ 33 - 22
src/app/views/incident-management/incident-management.component.ts

@@ -48,15 +48,15 @@ export class IncidentManagementComponent implements OnInit {
48 48
   btnLoading: boolean = false; //提交按钮loading状态
49 49
 
50 50
   tabs:any[] = [
51
-    // {key: 'all', value: '全部故障', num: 0},
52
-    {key: 'todo', value: '待我接单', num: 0},
53
-    {key: 'doing', value: '待我处理', num: 0},
54
-    // {key: 'reassign', value: '重新指派', num: 0},
55
-    // {key: 'callback', value: '待我回访', num: 0},
56
-    {key: 'resolve', value: '由我解决', num: 0},
57
-    {key: 'owns', value: '与我关联', num: 0},
58
-    {key: 'storage', value: '暂存', num: 0},
59
-    // {key: 'badEvaluate', value: '异常评价', num: 0},
51
+    // {key: 'all', value: '全部故障', num: 0, isRed: false},
52
+    {key: 'todo', value: '待我接单', num: 0, isRed: true},
53
+    {key: 'doing', value: '待我处理', num: 0, isRed: true},
54
+    // {key: 'reassign', value: '重新指派', num: 0, isRed: false},
55
+    // {key: 'callback', value: '待我回访', num: 0, isRed: false},
56
+    {key: 'resolve', value: '由我解决', num: 0, isRed: false},
57
+    {key: 'owns', value: '与我关联', num: 0, isRed: false},
58
+    {key: 'storage', value: '暂存', num: 0, isRed: false},
59
+    // {key: 'badEvaluate', value: '异常评价', num: 0, isRed: false},
60 60
   ]
61 61
 
62 62
   searchDTO: any = {};
@@ -87,8 +87,8 @@ export class IncidentManagementComponent implements OnInit {
87 87
     this.coopBtns = this.tool.initCoopBtns(this.route);
88 88
     this.initTabs();
89 89
     this.getDeparts();
90
-    this.getUsers('', null, 'handle');
91
-    this.getUsers('', null, 'acceptUser');
90
+    this.getUsers('', 'handle');
91
+    this.getUsers('', 'acceptUser');
92 92
     this.getGdStates();
93 93
     this.getOverdueStates();
94 94
     this.getIncidentCategoryList();
@@ -99,18 +99,18 @@ export class IncidentManagementComponent implements OnInit {
99 99
   // 初始化tab
100 100
   initTabs(){
101 101
     if (this.coopBtns.all) {
102
-        this.tabs.splice(0, 0 , {key: 'all', value: '全部故障', num: 0});
102
+        this.tabs.splice(0, 0 , {key: 'all', value: '全部故障', num: 0, isRed: false});
103 103
     }
104 104
     if (this.coopBtns.callback) {
105 105
         let index = this.tabs.findIndex(v => v.key == 'resolve');
106
-        this.tabs.splice(index, 0 , {key: 'callback', value: '待我回访', num: 0});
106
+        this.tabs.splice(index, 0 , {key: 'callback', value: '待我回访', num: 0, isRed: false});
107 107
     }
108 108
     if (this.coopBtns.reassign) {
109 109
         let index = this.tabs.findIndex(v => v.key == 'doing');
110
-        this.tabs.splice(index + 1, 0 , {key: 'reassign', value: '重新指派', num: 0});
110
+        this.tabs.splice(index + 1, 0 , {key: 'reassign', value: '重新指派', num: 0, isRed: false});
111 111
     }
112 112
     // if (this.coopBtns.badEvaluate) {
113
-    //     this.tabs.push({key: 'badEvaluate', value: '异常评价', num: 0});
113
+    //     this.tabs.push({key: 'badEvaluate', value: '异常评价', num: 0, isRed: false});
114 114
     // }
115 115
   }
116 116
 
@@ -150,12 +150,13 @@ export class IncidentManagementComponent implements OnInit {
150 150
   }
151 151
 
152 152
   // 获取处理人
153
-  getUsers(e?, those?, type?) {
154
-    let that = those || this;
153
+  getUsers(e?, type?) {
154
+    let that = this;
155 155
     let postData = {
156 156
       user: {
157 157
         name: e || "",
158
-        hospital: { id: that.hospital },
158
+        hospital: { id: that.tool.getCurrentHospital().id },
159
+        engineer: 1,
159 160
         simpleQuery: true,
160 161
       },
161 162
       idx: 0,
@@ -214,7 +215,7 @@ export class IncidentManagementComponent implements OnInit {
214 215
     if(currentLog.extra1DTO && currentLog.extra2 && currentLog.startTime){
215 216
         if(currentLog.extra2==0.5){
216 217
           currentLog.extra2 = 4;
217
-          return currentLog.extra1DTO.name+"<br>"+ format(addHours(currentLog.startTime, +currentLog.extra2), "MM月dd日")+"<br>"+ format(addDays(currentLog.startTime, +currentLog.extra2), "HH时mm分前完成");
218
+          return currentLog.extra1DTO.name+"<br>"+ format(addHours(currentLog.startTime, +currentLog.extra2), "MM月dd日")+"<br>"+ format(addHours(currentLog.startTime, +currentLog.extra2), "HH时mm分前完成");
218 219
         }else{
219 220
           return currentLog.extra1DTO.name+"<br>"+ format(addDays(currentLog.startTime, +currentLog.extra2), "MM月dd日前完成");
220 221
         }
@@ -316,7 +317,17 @@ export class IncidentManagementComponent implements OnInit {
316 317
       .getFetchDataList("simple/data", "incident", postData)
317 318
       .subscribe((result) => {
318 319
         this.loading1 = false;
319
-        this.listOfData = result.list.map(v => ({...v, endDeptsName: v.endDepts ? v.endDepts.map(v => v.dept).toString() : ''}));
320
+        let list = result.list || [];
321
+        list.forEach((item) => {
322
+          item.endDeptsName = item.endDepts ? item.endDepts.map(v => v.dept).toString() : '';
323
+          item.computedVisitFlag = this.computedVisit(item);
324
+          item.computedReceiveFlag = this.computedReceive(item);
325
+          item.computedHandleFlag = this.computedHandle(item);
326
+          item.computedSubstitutionFlag = this.computedSubstitution(item);
327
+          item.computedPostponeFlag = this.computedPostpone(item);
328
+          item.computedSetDutyFlag = this.computedSetDuty(item);
329
+        });
330
+        this.listOfData = list;
320 331
         this.listLength = result.totalNum;
321 332
       });
322 333
 
@@ -337,7 +348,7 @@ export class IncidentManagementComponent implements OnInit {
337 348
         if(!incident){
338 349
             incident = {};
339 350
         }
340
-        if(this.queryTask === 'all' || this.queryTask === 'callback' || this.queryTask === 'badEvaluate'){
351
+        if(incident.queryTask === 'all' || incident.queryTask === 'callback' || incident.queryTask === 'badEvaluate'){
341 352
           let { hospital, type } = this.tool.getHospitalOrDuty();
342 353
           if(type === 'duty'){
343 354
             // 当前的所属责任部门
@@ -353,7 +364,7 @@ export class IncidentManagementComponent implements OnInit {
353 364
 
354 365
         incident.assignee = this.tool.getCurrentUserId();
355 366
 
356
-        if(this.queryTask === 'todo' || this.queryTask === 'owns'){
367
+        if(incident.queryTask === 'todo' || incident.queryTask === 'owns'){
357 368
           incident.candidateGroups = this.tool.getCurrentGroupList().map(v => v.id).toString();
358 369
         }else{
359 370
           delete incident.candidateGroups;

+ 33 - 41
src/app/views/main/main.component.html

@@ -1,28 +1,25 @@
1 1
 <nz-layout class="app-layout display_flex flex_auto ant-layout-has-sider">
2 2
   <overlay-scrollbars #osComponentRef1 class="menu-sidebar">
3 3
     <div class="sidebar-logo display_flex align-items_center justify-content_flex-center">
4
-      <div style="line-height: normal;height:100%;" class="display_flex align-items_center justify-content_flex-center flex-direction_column">
5
-        <img [src]="tool.logoUrl">
6
-        <span>{{tool.logoTitle}}</span>
4
+      <div class="display_flex align-items_center justify-content_flex-center logoTitle">
5
+        <div class="title ellipsis-multiline" nz-tooltip nzTooltipTitle="{{tool.logoTitle}}">{{tool.logoTitle}}</div>
7 6
       </div>
8 7
     </div>
9 8
     <!-- 导航重写,兼容chrome39 -->
10 9
     <ul id="ds-menu">
11 10
       <li class="mainMenuOne" (click)="totoMenu('首页')" [ngClass]="{mainMenuSelected:indexFlag}">
12 11
         <i nz-icon nzType="home"></i>
13
-        <span>首页</span>
12
+        <span nz-tooltip nzTooltipTitle="首页">首页</span>
14 13
       </li>
15 14
       <li *ngFor="let data of menus" class="mainMenuWrap">
16 15
         <div class="mainMenuOne" (click)="clickMenuOne(data)" [ngClass]="{mainMenuSelected:data.flagBg}">
17 16
           <i class="icon_transport" [ngClass]="data.icon" *ngIf="isTransportIcon(data.icon)"></i>
18 17
           <i nz-icon [nzType]="data.icon" *ngIf="!isTransportIcon(data.icon)"></i>
19
-          <span>{{data.title}}</span>
20
-          <span class="icon_transport transport-xialajiantou"
21
-            [ngStyle]="{transform:data.flag?'rotate(180deg)':'rotate(0deg)',color:data.flag?'#fff':'#999'}"></span>
18
+          <span nz-tooltip nzTooltipTitle="{{data.title}}">{{data.title}}</span>
19
+          <span class="icon_transport transport-xialajiantou" [ngStyle]="{transform:data.flag?'rotate(180deg)':'rotate(0deg)',color:data.flag?'#fff':'#999'}"></span>
22 20
         </div>
23 21
         <ul>
24
-          <li *ngFor="let item of data.childrens" class="mainMenu" (click)="totoMenu(item.title,item,data)"
25
-            [ngStyle]="{height:data.flag?'44px':0}" [ngClass]="{menuTwoSelected:item.flag}">
22
+          <li *ngFor="let item of data.childrens" class="mainMenu" (click)="totoMenu(item.title,item,data)" [ngStyle]="{height:data.flag?'44px':0}" [ngClass]="{menuTwoSelected:item.flag}" nz-tooltip nzTooltipTitle="{{item.title}}">
26 23
             {{item.title}}
27 24
           </li>
28 25
         </ul>
@@ -33,42 +30,37 @@
33 30
     <nz-header>
34 31
       <div class="app-header display_flex justify-content_space-between align-items_center">
35 32
         <div class="left">
36
-          <button nz-button nzType="primary" *ngIf='deskRole' (click)="toFuwutai()">调度台</button>
37
-          <button nz-button nzType="primary" *ngIf="nurseRole" (click)="toHuShi()">护士端</button>
38
-          <button nz-button nzType="primary" *ngIf="pharmacyRole" (click)="toPharmacy()">药房端</button>
39
-          <button nz-button nzType="primary" *ngIf="pharmacyRole" (click)="toPharmacy2()">药房端2</button>
40
-          <button nz-button nzType="primary" *ngIf="largeScreenRole" (click)="toBigScreen('largeScreen')">大屏端</button>
41
-          <button nz-button nzType="primary" *ngIf="largeScreenRole2" (click)="toBigScreen('largeScreen2')">大屏端2</button>
42
-          <button nz-button nzType="primary" *ngIf="specimenViewRole" (click)="toBigScreen('specimenView')" [nzLoading]="deptTypeLoading">业务视图</button>
43
-          <button nz-button nzType="primary" *ngIf="specimenViewRole2" (click)="toSpecimenView2()">标本视图</button>
44
-					<button nz-button nzType="primary" *ngIf="specimenRoomView" (click)="toSpecimenRoomView()">标本间端</button>
45
-					<button nz-button nzType="primary" *ngIf="pathology" (click)="toPathology()">病理科端</button>
46
-					<button nz-button nzType="primary" *ngIf="disinfectionSupplyRole" (click)="toDisinfectionSupply()">全局业务查看</button>
47
-          <button nz-button nzType="primary" *ngIf="configurationCenterRole" (click)="toConfigurationCenter()">配置中心</button>
33
+          <i class="icon_transport transport-tiaodu-fill green" *ngIf='deskRole' (click)="toFuwutai()" nz-tooltip nzTooltipTitle="调度台"></i>
34
+          <i class="icon_transport transport-hushizhihanghuligongzuo green" *ngIf="nurseRole" (click)="toHuShi()" nz-tooltip nzTooltipTitle="护士端"></i>
35
+          <i class="icon_transport transport-peizhi1 green" *ngIf="configurationCenterRole" (click)="toConfigurationCenter()" nz-tooltip nzTooltipTitle="配置中心"></i>
36
+          <i class="icon_transport transport-shangban green" *ngIf='PCCommutesToWork && userInfo.user && !userInfo.user.online' (click)="GoWork()" nz-tooltip nzTooltipTitle="我要上班"></i>
37
+          <i class="icon_transport transport-shangban green" *ngIf='PCCommutesToWork && userInfo.user && userInfo.user.online' (click)="GoWork()" nz-tooltip nzTooltipTitle="我要下班"></i>
38
+          <div class="dropdown" *ngIf="pharmacyRole || largeScreenRole || largeScreenRole2 || specimenViewRole || specimenViewRole2 || specimenRoomView || pathology || disinfectionSupplyRole">
39
+            <i class="icon_transport transport-gengduoda-copy" (mouseenter)="showDropdown1 = true" (mouseleave)="showDropdown1 = false"></i>
40
+            <div class="dropdown-content ct" [hidden]="!showDropdown1" (mouseenter)="showDropdown1 = true" (mouseleave)="showDropdown1 = false">
41
+              <div class="dropdownItem" *ngIf="pharmacyRole" (click)="toPharmacy()">药房端</div>
42
+              <div class="dropdownItem" *ngIf="pharmacyRole" (click)="toPharmacy2()">药房端2</div>
43
+              <div class="dropdownItem" *ngIf="largeScreenRole" (click)="toBigScreen('largeScreen')">大屏端</div>
44
+              <div class="dropdownItem" *ngIf="largeScreenRole2" (click)="toBigScreen('largeScreen2')">大屏端2</div>
45
+              <div class="dropdownItem" *ngIf="specimenViewRole" (click)="toBigScreen('specimenView')">业务视图</div>
46
+              <div class="dropdownItem" *ngIf="specimenViewRole2" (click)="toSpecimenView2()">标本视图</div>
47
+              <div class="dropdownItem" *ngIf="specimenRoomView" (click)="toSpecimenRoomView()">标本间端</div>
48
+              <div class="dropdownItem" *ngIf="pathology" (click)="toPathology()">病理科端</div>
49
+              <div class="dropdownItem" *ngIf="disinfectionSupplyRole" (click)="toDisinfectionSupply()">全局业务查看</div>
50
+            </div>
51
+          </div>
48 52
         </div>
49 53
         <div class="right">
50
-          <button class="mr8" nz-button nzType="primary" *ngIf='PCCommutesToWork && userInfo.user && !userInfo.user.online' (click)="GoWork()">我要上班</button>
51
-          <button class="mr8" nz-button nzType="primary" *ngIf='PCCommutesToWork && userInfo.user && userInfo.user.online' (click)="GoWork()">我要下班</button>
52
-          <!-- <div class="msg">
53
-            <div class="msgBtn display_flex align-items_center justify-content_flex-center" nz-popover [nzPopoverContent]="contentTemplate" nzPopoverPlacement="bottomRight">
54
-              <i nz-icon nzType="bell" nzTheme="outline"></i>
55
-            </div>
56
-            <ng-template #contentTemplate>
57
-              <div>
58
-                <p>消息通知</p>
59
-              </div>
60
-            </ng-template>
61
-          </div> -->
62
-          <div class="userInfo">
63
-            <div class="wel" [title]="'欢迎您,' + currentHospital.hosName + ':'">欢迎您,{{currentHospital.hosName}}:</div>
64
-            <div class="user">
54
+          <div class="userInfo dropdown">
55
+            <div class="user" (mouseenter)="showDropdown = true" (mouseleave)="showDropdown = false">
65 56
               <img src="../../assets/images/icon_keshi.png" alt="">
66
-              <span [title]="(userInfo&&userInfo.user)?userInfo.user.name:''">{{(userInfo&&userInfo.user)?userInfo.user.name:''}}</span>
57
+              <span><ng-container *ngIf="currentHospital.hosName">{{currentHospital.hosName}}-</ng-container>{{(userInfo&&userInfo.user)?userInfo.user.name:''}}</span>
58
+              <i class="icon_transport transport-xiala1 ml8"></i>
67 59
             </div>
68
-            <div class="logOut">
69
-              <span (click)="hosFlag1 = true">选择院区</span>
70
-              <span (click)="showUpPwd()">修改密码</span>
71
-              <span (click)="logOut()">退出</span>
60
+            <div class="dropdown-content r8" [hidden]="!showDropdown" (mouseenter)="showDropdown = true" (mouseleave)="showDropdown = false">
61
+              <div class="dropdownItem" (click)="selectHospital()">选择院区</div>
62
+              <div class="dropdownItem" (click)="showUpPwd()">修改密码</div>
63
+              <div class="dropdownItem" (click)="logOut()">退出</div>
72 64
             </div>
73 65
           </div>
74 66
         </div>

+ 76 - 22
src/app/views/main/main.component.less

@@ -17,9 +17,46 @@ nz-sider {
17 17
   overflow-y: auto;
18 18
 }
19 19
 
20
+// 下拉列表
21
+.dropdown{
22
+  position: relative;
23
+  height: 48px;
24
+  line-height: 48px;
25
+  .dropdown-content {
26
+    position: absolute;
27
+    top: 48px;
28
+    background-color: #fff;
29
+    width: 156px;
30
+    box-shadow: 0px 2px 4px 1px #D9D9D9;
31
+    z-index: 999999;
32
+    border-radius: 4px;
33
+    border: 1px solid rgba(0,0,0,0.15);
34
+    color: rgba(0,0,0,0.65);
35
+    &.ct{
36
+      left: 50%;
37
+      transform: translateX(-50%);
38
+    }
39
+    &.r8{
40
+      right: 8px;
41
+    }
42
+  }
43
+
44
+  .dropdown-content .dropdownItem {
45
+    height: 40px;
46
+    cursor: pointer;
47
+    display: flex;
48
+    align-items: center;
49
+    padding: 0 24px;
50
+  }
51
+
52
+  .dropdown-content .dropdownItem:hover {
53
+    background-color: #e9f7e9;
54
+  }
55
+}
56
+
20 57
 .menu-sidebar {
21
-  width: 224px;
22
-  flex: 0 0 224px;
58
+  width: 175px;
59
+  flex: 0 0 175px;
23 60
   position: relative;
24 61
   z-index: 8;
25 62
   min-height: 100vh;
@@ -79,7 +116,7 @@ nz-sider {
79 116
     box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45);
80 117
 
81 118
     & > i {
82
-      margin-left: 24px;
119
+      margin-left: 16px;
83 120
       margin-right: 10px;
84 121
       font-size: 14px;
85 122
     }
@@ -113,7 +150,11 @@ nz-sider {
113 150
     margin: 0;
114 151
     padding: 0;
115 152
     li {
116
-      padding-left: 48px;
153
+      white-space: nowrap;
154
+      overflow: hidden;//文本超出隐藏
155
+      text-overflow: ellipsis;//文本超出省略号替代
156
+      padding-left: 40px;
157
+      padding-right: 40px;
117 158
       transition: height 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
118 159
       box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.45) inset;
119 160
     }
@@ -123,14 +164,19 @@ nz-sider {
123 164
 
124 165
 .sidebar-logo {
125 166
   position: relative;
126
-  height: 88px;
167
+  height: 48px;
127 168
   overflow: hidden;
128
-  line-height: 64px;
169
+  line-height: 48px;
129 170
   background: #fff;
130 171
   transition: all 0.3s;
131 172
 
132
-  span {
133
-    margin-top: 8px;
173
+  .logoTitle{
174
+    padding: 0 8px;
175
+    line-height: normal;
176
+    height:100%;
177
+  }
178
+
179
+  .title {
134 180
     color: @primary-color;
135 181
     font-weight: 600;
136 182
     font-size: 13px;
@@ -147,13 +193,13 @@ nz-sider {
147 193
 nz-header.ant-layout-header {
148 194
   padding: 0;
149 195
   width: 100%;
150
-  z-index: 2;
196
+  z-index: 99;
151 197
   background: #fff;
152
-  height: 88px;
198
+  height: 48px;
153 199
 
154 200
   .app-header {
155 201
     position: relative;
156
-    height: 88px;
202
+    height: 48px;
157 203
     padding: 0;
158 204
     background: #fff;
159 205
     box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
@@ -161,10 +207,19 @@ nz-header.ant-layout-header {
161 207
     border-bottom: 1px solid rgba(0, 21, 41, 0.08);
162 208
 
163 209
     .left {
210
+      height: 100%;
164 211
       flex: 1;
165 212
       display: flex;
166
-      flex-wrap: wrap;
167 213
       align-items: center;
214
+      justify-content: flex-end;
215
+      .icon_transport{
216
+        margin-right: 24px;
217
+        cursor: pointer;
218
+        font-size: 20px;
219
+        height: 48px;
220
+        line-height: 48px;
221
+        display: inline-block;
222
+      }
168 223
       .menuLabel {
169 224
         color: #333;
170 225
         font-size: 22px;
@@ -206,10 +261,9 @@ nz-header.ant-layout-header {
206 261
       }
207 262
 
208 263
       .userInfo {
209
-        width: 260px;
210 264
         height: 100%;
211 265
         float: right;
212
-        padding: 8px 36px 8px 8px;
266
+        padding: 0 24px;
213 267
         box-sizing: border-box;
214 268
         font-size: 14px;
215 269
         border-left: 1px solid #e5e9ed;
@@ -223,22 +277,22 @@ nz-header.ant-layout-header {
223 277
 
224 278
         .user {
225 279
           overflow: hidden;
226
-          font-size: 20px;
227
-          height: 40px;
280
+          height: 48px;
228 281
           display: flex;
229 282
           justify-content: center;
230 283
           align-items: center;
284
+          font-size: 16px;
285
+          cursor: pointer;
231 286
 
232 287
           img {
233
-            width: 36px;
234
-            height: 36px;
288
+            width: 32px;
289
+            height: 32px;
235 290
             margin-right: 8px;
236 291
           }
237 292
 
238
-          span {
239
-            white-space: nowrap;
240
-            overflow: hidden;//文本超出隐藏
241
-            text-overflow: ellipsis;//文本超出省略号替代
293
+          span, .transport-xiala1 {
294
+            height: 48px;
295
+            line-height: 48px;
242 296
           }
243 297
         }
244 298
 

+ 14 - 3
src/app/views/main/main.component.ts

@@ -452,18 +452,20 @@ export class MainComponent implements OnInit {
452 452
     }
453 453
   }
454 454
   //获取系统设置中的科室类型
455
-  deptTypeLoading = false;
456 455
   getTypeByDept(id) {
457 456
     let postData = {
458 457
       idx: 0,
459 458
       sum: 1,
460 459
       systemConfiguration: { keyconfig: "busiViewDeptId" },
461 460
     };
462
-    this.deptTypeLoading = true;
461
+    this.maskFlag = this.msg.loading("正在加载中..", {
462
+      nzDuration: 0,
463
+    }).messageId;
463 464
     this.mainService
464 465
       .getFetchDataList("simple/data", "systemConfiguration", postData)
465 466
       .subscribe((result) => {
466
-        this.deptTypeLoading = false;
467
+        this.msg.remove(this.maskFlag);
468
+        this.maskFlag = false;
467 469
         if (result.status == 200) {
468 470
           let remember = JSON.parse(localStorage.getItem("remember"));
469 471
           window.open(
@@ -493,6 +495,15 @@ export class MainComponent implements OnInit {
493 495
     this.iShowMenuModal = false;
494 496
   }
495 497
 
498
+  // 下拉
499
+  showDropdown:boolean = false;
500
+  showDropdown1:boolean = false;
501
+
502
+  // 选择院区
503
+  selectHospital(){
504
+    this.hosFlag1 = true
505
+  }
506
+
496 507
   // 退出
497 508
   logOut(): void {
498 509
     // 假退出

+ 24 - 0
src/app/views/pathology/pathology.component.html

@@ -21,6 +21,10 @@
21 21
       </div>
22 22
 			<div class="error-class">{{errorcODEMsg}}</div>
23 23
     </div>
24
+		<div class="nurseCode" (click)="showNurseCode()">
25
+		  <i class="nurseCodeIcon icon_transport transport-erweima"></i
26
+		  >二维码
27
+		</div>
24 28
     <div class="userInfo">
25 29
       <div class="wel">欢迎您:</div>
26 30
       <div class="user">
@@ -235,6 +239,26 @@
235 239
   <!-- <router-outlet></router-outlet> -->
236 240
 </div>
237 241
 
242
+<!-- 科室二维码模态框 -->
243
+<!-- 在模态框所在的 div 添加属性 [appDrag] -->
244
+<div appDrag class="modal" *ngIf="isShowNurseCode">
245
+  <div class="header drag-title">
246
+    <h2>签到二维码</h2>
247
+    <i
248
+      class="icon-close icon_transport transport-guanbi1"
249
+      (click)="closeNurseCode()"
250
+    ></i>
251
+  </div>
252
+  <div class="dialog-center">
253
+    <div class="dialog-code">
254
+      <img [src]="nurseCodeImg" alt="" />
255
+    </div>
256
+  </div>
257
+  <div class="dialog-operate">
258
+    <strong class="dialog-refresh" (click)="showNurseCode()">刷新</strong>
259
+    <span>{{ refreshQRCodeTime }}s</span>
260
+  </div>
261
+</div>
238 262
 <!-- 科室切换提示框 -->
239 263
 <app-hs-prompt-modal
240 264
   [changeShow]="changeShow"

+ 109 - 8
src/app/views/pathology/pathology.component.less

@@ -82,7 +82,7 @@
82 82
     }
83 83
 
84 84
     .pharmacy-name {
85
-      // flex: 1;
85
+      flex: 1;
86 86
       // border-right: 1px solid #e5e9ed;
87 87
       display: flex;
88 88
       // justify-content: space-between;
@@ -199,15 +199,30 @@
199 199
 		}
200 200
 	}
201 201
 	
202
+	.nurseCode {
203
+	  width: 80px;
204
+	  font-size: 14px;
205
+	  color: #333;
206
+	  display: flex;
207
+	  justify-content: space-between;
208
+	  align-items: center;
209
+	  margin-right: 20px;
210
+	  cursor: pointer;
211
+	
212
+	  .nurseCodeIcon {
213
+	    margin-right: 8px;
214
+	    font-size: 24px;
215
+	    color: #929292;
216
+	  }
217
+	}
218
+	
202 219
   .userInfo {
203
-    // display: none;
204
-    width: 336px;
205
-    // height: 100%;
206
-    // float: right;
207
-    padding: 8px;
220
+    width: 260px;
221
+    height: 100%;
222
+    padding: 8px 36px 8px 8px;
208 223
     box-sizing: border-box;
209 224
     font-size: 14px;
210
-    // border-left: 1px solid #e5e9ed;
225
+    border-left: 1px solid #e5e9ed;
211 226
 
212 227
     .wel {
213 228
       line-height: 15px;
@@ -1094,4 +1109,90 @@
1094 1109
 }
1095 1110
 .spin-style{
1096 1111
 	z-index:9999;
1097
-}
1112
+}
1113
+
1114
+  .modal {
1115
+    // 相对于 background 定位, 位置暂时设置为 0,0,0,0 在指令中将其位置水平垂直居中在页面中间
1116
+    position: absolute;
1117
+    top: 0;
1118
+    left: 0;
1119
+    bottom: 0;
1120
+    right: 0;
1121
+    width: 280px;
1122
+    height: 310px;
1123
+    z-index: 3100;
1124
+    background: #f9fafb;
1125
+    box-shadow: 1px 1px 20px rgba(0, 0, 0, 0.3);
1126
+    border-radius: 30px;
1127
+    border: 1px solid @hs_border_color;
1128
+    overflow: hidden;
1129
+    cursor: move;
1130
+
1131
+    .drag-title {
1132
+      height: 50px;
1133
+      line-height: 50px;
1134
+      position: relative;
1135
+
1136
+      h2 {
1137
+        height: 100%;
1138
+        font-size: 18px;
1139
+        color: #333;
1140
+        text-align: center;
1141
+        margin: 0;
1142
+      }
1143
+
1144
+      .icon-close {
1145
+        position: absolute;
1146
+        top: 0;
1147
+        right: 16px;
1148
+        font-size: 16px;
1149
+        cursor: pointer;
1150
+        color: @hs_border_color;
1151
+      }
1152
+    }
1153
+
1154
+    .dialog-center {
1155
+      width: 235px;
1156
+      height: 208px;
1157
+      background-color: #fff;
1158
+      border: 1px solid @hs_border_color;
1159
+      margin: 0 auto;
1160
+      border-radius: 30px;
1161
+      position: relative;
1162
+
1163
+      .dialog-code {
1164
+        width: 180px;
1165
+        height: 200px;
1166
+        overflow: hidden;
1167
+        position: absolute;
1168
+        margin: auto;
1169
+        top: 0;
1170
+        right: 0;
1171
+        bottom: 0;
1172
+        left: 0;
1173
+
1174
+        img {
1175
+          width: 100%;
1176
+        }
1177
+      }
1178
+    }
1179
+
1180
+    .dialog-operate {
1181
+      display: flex;
1182
+      height: 40px;
1183
+      justify-content: space-between;
1184
+      align-items: center;
1185
+      font-size: 14px;
1186
+
1187
+      .dialog-refresh {
1188
+        color: @primary-color;
1189
+        margin-left: 40px;
1190
+        cursor: pointer;
1191
+      }
1192
+
1193
+      span {
1194
+        color: #999;
1195
+        margin-right: 40px;
1196
+      }
1197
+    }
1198
+  }

+ 32 - 0
src/app/views/pathology/pathology.component.ts

@@ -166,6 +166,8 @@ export class PathologyComponent implements OnInit, OnDestroy {
166 166
 	toDayData:any = null;
167 167
 	toDayTime:any = null;
168 168
 	backType='list';
169
+	loginUserDeptId: number = JSON.parse(localStorage.getItem("user")).user.dept
170
+	  .id; //登录人所属科室
169 171
   ngOnDestroy() {
170 172
     clearTimeout(this.timer);
171 173
     clearTimeout(this.logTimer);
@@ -215,6 +217,36 @@ export class PathologyComponent implements OnInit, OnDestroy {
215 217
 			this.getToday()
216 218
 		},60000)
217 219
   }
220
+	
221
+	isShowNurseCode = false; //是否展开科室二维码
222
+	nurseCodeImg = ""; //图片
223
+	refreshQRCodeTime = 0; //刷新时间间隔
224
+	// 关闭科室二维码
225
+	closeNurseCode() {
226
+	  this.isShowNurseCode = false;
227
+	  clearInterval(this.timers);
228
+	  this.timer = null;
229
+	}
230
+	// 展开科室二维码
231
+	timers = null;
232
+	showNurseCode() {
233
+	  this.isShowNurseCode = true;
234
+	  this.mainService.getDeptCode([this.loginUserDeptId]).subscribe((data) => {
235
+	    if (data["status"] == 200) {
236
+	      this.nurseCodeImg = data["data"][0].base64;
237
+	      this.refreshQRCodeTime = data["data"][0].refreshQRCodeTime;
238
+	      clearInterval(this.timers);
239
+	      this.timers = setInterval(() => {
240
+	        this.refreshQRCodeTime = Math.max(--this.refreshQRCodeTime, 0);
241
+	        if (this.refreshQRCodeTime === 0) {
242
+	          clearInterval(this.timers);
243
+	          this.showNurseCode();
244
+	        }
245
+	      }, 1000);
246
+	    }
247
+	  });
248
+	}
249
+	
218 250
   // 当前时间日期
219 251
   runTime() {
220 252
     clearTimeout(this.timer);

+ 2 - 1
src/app/views/pathology/pathology.module.ts

@@ -4,11 +4,12 @@ import { CommonModule } from '@angular/common';
4 4
 import { PathologyRoutingModule } from './pathology-routing.module';
5 5
 import { ShareModule } from 'src/app/share/share.module';
6 6
 import { PathologyComponent } from './pathology.component';
7
-
7
+import { DragModule } from 'src/app/directives/drag/drag.module';
8 8
 
9 9
 @NgModule({
10 10
   declarations: [PathologyComponent],
11 11
   imports: [
12
+		DragModule,
12 13
     CommonModule,
13 14
     PathologyRoutingModule,
14 15
     ShareModule

+ 1 - 1
src/app/views/specimen-room-view/specimen-room-view.component.html

@@ -36,7 +36,7 @@
36 36
         }}</span>
37 37
       </div>
38 38
       <div class="userInfo-wrap">
39
-        <div class="logOut" (click)="changeKsNow()">切换科室</div>
39
+        <div class="logOut" (click)="setSpecimen()">切换科室</div>
40 40
         <div class="logOut" (click)="logOut()">退出</div>
41 41
       </div>
42 42
     </div>

+ 8 - 10
src/app/views/specimen-room-view/specimen-room-view.component.less

@@ -62,7 +62,7 @@
62 62
     display: flex;
63 63
 		color: #000;
64 64
     .pharmacy-logo {
65
-      width: 221px;
65
+      width: 100px;
66 66
       background-color: #fff;
67 67
       display: flex;
68 68
       flex-direction: column;
@@ -82,7 +82,7 @@
82 82
     }
83 83
 
84 84
     .pharmacy-name {
85
-      // flex: 1;
85
+      flex: 1;
86 86
       // border-right: 1px solid #e5e9ed;
87 87
       display: flex;
88 88
       // justify-content: space-between;
@@ -159,14 +159,12 @@
159 159
     }
160 160
   }
161 161
   .userInfo {
162
-    // display: none;
163
-    width: 336px;
164
-    // height: 100%;
165
-    // float: right;
166
-    padding: 8px;
167
-    box-sizing: border-box;
168
-    font-size: 14px;
169
-    // border-left: 1px solid #e5e9ed;
162
+		width: 260px;
163
+		height: 100%;
164
+		padding: 8px 36px 8px 8px;
165
+		box-sizing: border-box;
166
+		font-size: 14px;
167
+		border-left: 1px solid #e5e9ed;
170 168
 
171 169
     .wel {
172 170
       line-height: 15px;

+ 13 - 5
src/app/views/specimen-room-view/specimen-room-view.component.ts

@@ -317,11 +317,19 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
317 317
 
318 318
 	// 获取是否关联标本间
319 319
 	setSpecimen(){
320
-		this.validateForm = this.fb.group({
321
-		  specimen: [null, [Validators.required]],
322
-			operation: [null, [Validators.required]],
323
-			generate:[1, [Validators.required]],
324
-		});
320
+		if(this.validateForm){
321
+			this.validateForm = this.fb.group({
322
+			  specimen: [this.validateForm.value.specimen, [Validators.required]],
323
+				operation: [this.validateForm.value.operation, [Validators.required]],
324
+				generate:[this.validateForm.value.generate, [Validators.required]],
325
+			});
326
+		}else{
327
+			this.validateForm = this.fb.group({
328
+			  specimen: [null, [Validators.required]],
329
+				operation: [null, [Validators.required]],
330
+				generate:[1, [Validators.required]],
331
+			});
332
+		}
325 333
 		this.relevanceModal = true
326 334
 	}
327 335
 

+ 164 - 3
src/assets/iconfont/demo_index.html

@@ -55,6 +55,42 @@
55 55
           <ul class="icon_lists dib-box">
56 56
           
57 57
             <li class="dib">
58
+              <span class="icon icon_transport">&#xe7ba;</span>
59
+                <div class="name">护士执行护理工作</div>
60
+                <div class="code-name">&amp;#xe7ba;</div>
61
+              </li>
62
+          
63
+            <li class="dib">
64
+              <span class="icon icon_transport">&#xe6bb;</span>
65
+                <div class="name">配置</div>
66
+                <div class="code-name">&amp;#xe6bb;</div>
67
+              </li>
68
+          
69
+            <li class="dib">
70
+              <span class="icon icon_transport">&#xe659;</span>
71
+                <div class="name">筛选</div>
72
+                <div class="code-name">&amp;#xe659;</div>
73
+              </li>
74
+          
75
+            <li class="dib">
76
+              <span class="icon icon_transport">&#xe695;</span>
77
+                <div class="name">home_title_class</div>
78
+                <div class="code-name">&amp;#xe695;</div>
79
+              </li>
80
+          
81
+            <li class="dib">
82
+              <span class="icon icon_transport">&#xe6b5;</span>
83
+                <div class="name">调度-fill</div>
84
+                <div class="code-name">&amp;#xe6b5;</div>
85
+              </li>
86
+          
87
+            <li class="dib">
88
+              <span class="icon icon_transport">&#xe657;</span>
89
+                <div class="name">护士</div>
90
+                <div class="code-name">&amp;#xe657;</div>
91
+              </li>
92
+          
93
+            <li class="dib">
58 94
               <span class="icon icon_transport">&#xe62b;</span>
59 95
                 <div class="name">下载</div>
60 96
                 <div class="code-name">&amp;#xe62b;</div>
@@ -841,6 +877,12 @@
841 877
               </li>
842 878
           
843 879
             <li class="dib">
880
+              <span class="icon icon_transport">&#xeeed;</span>
881
+                <div class="name">更多</div>
882
+                <div class="code-name">&amp;#xeeed;</div>
883
+              </li>
884
+          
885
+            <li class="dib">
844 886
               <span class="icon icon_transport">&#xe633;</span>
845 887
                 <div class="name">搜索</div>
846 888
                 <div class="code-name">&amp;#xe633;</div>
@@ -906,9 +948,9 @@
906 948
 <pre><code class="language-css"
907 949
 >@font-face {
908 950
   font-family: 'icon_transport';
909
-  src: url('iconfont.woff2?t=1724726830485') format('woff2'),
910
-       url('iconfont.woff?t=1724726830485') format('woff'),
911
-       url('iconfont.ttf?t=1724726830485') format('truetype');
951
+  src: url('iconfont.woff2?t=1729066208752') format('woff2'),
952
+       url('iconfont.woff?t=1729066208752') format('woff'),
953
+       url('iconfont.ttf?t=1729066208752') format('truetype');
912 954
 }
913 955
 </code></pre>
914 956
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -935,6 +977,60 @@
935 977
         <ul class="icon_lists dib-box">
936 978
           
937 979
           <li class="dib">
980
+            <span class="icon icon_transport transport-hushizhihanghuligongzuo"></span>
981
+            <div class="name">
982
+              护士执行护理工作
983
+            </div>
984
+            <div class="code-name">.transport-hushizhihanghuligongzuo
985
+            </div>
986
+          </li>
987
+          
988
+          <li class="dib">
989
+            <span class="icon icon_transport transport-peizhi1"></span>
990
+            <div class="name">
991
+              配置
992
+            </div>
993
+            <div class="code-name">.transport-peizhi1
994
+            </div>
995
+          </li>
996
+          
997
+          <li class="dib">
998
+            <span class="icon icon_transport transport-shaixuan"></span>
999
+            <div class="name">
1000
+              筛选
1001
+            </div>
1002
+            <div class="code-name">.transport-shaixuan
1003
+            </div>
1004
+          </li>
1005
+          
1006
+          <li class="dib">
1007
+            <span class="icon icon_transport transport-shangban"></span>
1008
+            <div class="name">
1009
+              home_title_class
1010
+            </div>
1011
+            <div class="code-name">.transport-shangban
1012
+            </div>
1013
+          </li>
1014
+          
1015
+          <li class="dib">
1016
+            <span class="icon icon_transport transport-tiaodu-fill"></span>
1017
+            <div class="name">
1018
+              调度-fill
1019
+            </div>
1020
+            <div class="code-name">.transport-tiaodu-fill
1021
+            </div>
1022
+          </li>
1023
+          
1024
+          <li class="dib">
1025
+            <span class="icon icon_transport transport-hushi"></span>
1026
+            <div class="name">
1027
+              护士
1028
+            </div>
1029
+            <div class="code-name">.transport-hushi
1030
+            </div>
1031
+          </li>
1032
+          
1033
+          <li class="dib">
938 1034
             <span class="icon icon_transport transport-xiazai"></span>
939 1035
             <div class="name">
940 1036
               下载
@@ -2114,6 +2210,15 @@
2114 2210
           </li>
2115 2211
           
2116 2212
           <li class="dib">
2213
+            <span class="icon icon_transport transport-gengduoda-copy"></span>
2214
+            <div class="name">
2215
+              更多
2216
+            </div>
2217
+            <div class="code-name">.transport-gengduoda-copy
2218
+            </div>
2219
+          </li>
2220
+          
2221
+          <li class="dib">
2117 2222
             <span class="icon icon_transport transport-sousuo"></span>
2118 2223
             <div class="name">
2119 2224
               搜索
@@ -2214,6 +2319,54 @@
2214 2319
           
2215 2320
             <li class="dib">
2216 2321
                 <svg class="icon svg-icon" aria-hidden="true">
2322
+                  <use xlink:href="#transport-hushizhihanghuligongzuo"></use>
2323
+                </svg>
2324
+                <div class="name">护士执行护理工作</div>
2325
+                <div class="code-name">#transport-hushizhihanghuligongzuo</div>
2326
+            </li>
2327
+          
2328
+            <li class="dib">
2329
+                <svg class="icon svg-icon" aria-hidden="true">
2330
+                  <use xlink:href="#transport-peizhi1"></use>
2331
+                </svg>
2332
+                <div class="name">配置</div>
2333
+                <div class="code-name">#transport-peizhi1</div>
2334
+            </li>
2335
+          
2336
+            <li class="dib">
2337
+                <svg class="icon svg-icon" aria-hidden="true">
2338
+                  <use xlink:href="#transport-shaixuan"></use>
2339
+                </svg>
2340
+                <div class="name">筛选</div>
2341
+                <div class="code-name">#transport-shaixuan</div>
2342
+            </li>
2343
+          
2344
+            <li class="dib">
2345
+                <svg class="icon svg-icon" aria-hidden="true">
2346
+                  <use xlink:href="#transport-shangban"></use>
2347
+                </svg>
2348
+                <div class="name">home_title_class</div>
2349
+                <div class="code-name">#transport-shangban</div>
2350
+            </li>
2351
+          
2352
+            <li class="dib">
2353
+                <svg class="icon svg-icon" aria-hidden="true">
2354
+                  <use xlink:href="#transport-tiaodu-fill"></use>
2355
+                </svg>
2356
+                <div class="name">调度-fill</div>
2357
+                <div class="code-name">#transport-tiaodu-fill</div>
2358
+            </li>
2359
+          
2360
+            <li class="dib">
2361
+                <svg class="icon svg-icon" aria-hidden="true">
2362
+                  <use xlink:href="#transport-hushi"></use>
2363
+                </svg>
2364
+                <div class="name">护士</div>
2365
+                <div class="code-name">#transport-hushi</div>
2366
+            </li>
2367
+          
2368
+            <li class="dib">
2369
+                <svg class="icon svg-icon" aria-hidden="true">
2217 2370
                   <use xlink:href="#transport-xiazai"></use>
2218 2371
                 </svg>
2219 2372
                 <div class="name">下载</div>
@@ -3262,6 +3415,14 @@
3262 3415
           
3263 3416
             <li class="dib">
3264 3417
                 <svg class="icon svg-icon" aria-hidden="true">
3418
+                  <use xlink:href="#transport-gengduoda-copy"></use>
3419
+                </svg>
3420
+                <div class="name">更多</div>
3421
+                <div class="code-name">#transport-gengduoda-copy</div>
3422
+            </li>
3423
+          
3424
+            <li class="dib">
3425
+                <svg class="icon svg-icon" aria-hidden="true">
3265 3426
                   <use xlink:href="#transport-sousuo"></use>
3266 3427
                 </svg>
3267 3428
                 <div class="name">搜索</div>

+ 31 - 3
src/assets/iconfont/iconfont.css

@@ -1,8 +1,8 @@
1 1
 @font-face {
2 2
   font-family: "icon_transport"; /* Project id 4543613 */
3
-  src: url('iconfont.woff2?t=1724726830485') format('woff2'),
4
-       url('iconfont.woff?t=1724726830485') format('woff'),
5
-       url('iconfont.ttf?t=1724726830485') format('truetype');
3
+  src: url('iconfont.woff2?t=1729066208752') format('woff2'),
4
+       url('iconfont.woff?t=1729066208752') format('woff'),
5
+       url('iconfont.ttf?t=1729066208752') format('truetype');
6 6
 }
7 7
 
8 8
 .icon_transport {
@@ -13,6 +13,30 @@
13 13
   -moz-osx-font-smoothing: grayscale;
14 14
 }
15 15
 
16
+.transport-hushizhihanghuligongzuo:before {
17
+  content: "\e7ba";
18
+}
19
+
20
+.transport-peizhi1:before {
21
+  content: "\e6bb";
22
+}
23
+
24
+.transport-shaixuan:before {
25
+  content: "\e659";
26
+}
27
+
28
+.transport-shangban:before {
29
+  content: "\e695";
30
+}
31
+
32
+.transport-tiaodu-fill:before {
33
+  content: "\e6b5";
34
+}
35
+
36
+.transport-hushi:before {
37
+  content: "\e657";
38
+}
39
+
16 40
 .transport-xiazai:before {
17 41
   content: "\e62b";
18 42
 }
@@ -537,6 +561,10 @@
537 561
   content: "\ea66";
538 562
 }
539 563
 
564
+.transport-gengduoda-copy:before {
565
+  content: "\eeed";
566
+}
567
+
540 568
 .transport-sousuo:before {
541 569
   content: "\e633";
542 570
 }

文件差異過大導致無法顯示
+ 1 - 1
src/assets/iconfont/iconfont.js


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

@@ -6,6 +6,48 @@
6 6
   "description": "",
7 7
   "glyphs": [
8 8
     {
9
+      "icon_id": "39318134",
10
+      "name": "护士执行护理工作",
11
+      "font_class": "hushizhihanghuligongzuo",
12
+      "unicode": "e7ba",
13
+      "unicode_decimal": 59322
14
+    },
15
+    {
16
+      "icon_id": "376638",
17
+      "name": "配置",
18
+      "font_class": "peizhi1",
19
+      "unicode": "e6bb",
20
+      "unicode_decimal": 59067
21
+    },
22
+    {
23
+      "icon_id": "12911869",
24
+      "name": "筛选",
25
+      "font_class": "shaixuan",
26
+      "unicode": "e659",
27
+      "unicode_decimal": 58969
28
+    },
29
+    {
30
+      "icon_id": "2213025",
31
+      "name": "home_title_class",
32
+      "font_class": "shangban",
33
+      "unicode": "e695",
34
+      "unicode_decimal": 59029
35
+    },
36
+    {
37
+      "icon_id": "5766821",
38
+      "name": "调度-fill",
39
+      "font_class": "tiaodu-fill",
40
+      "unicode": "e6b5",
41
+      "unicode_decimal": 59061
42
+    },
43
+    {
44
+      "icon_id": "28467714",
45
+      "name": "护士",
46
+      "font_class": "hushi",
47
+      "unicode": "e657",
48
+      "unicode_decimal": 58967
49
+    },
50
+    {
9 51
       "icon_id": "11833563",
10 52
       "name": "下载",
11 53
       "font_class": "xiazai",
@@ -923,6 +965,13 @@
923 965
       "unicode_decimal": 60006
924 966
     },
925 967
     {
968
+      "icon_id": "42129639",
969
+      "name": "更多",
970
+      "font_class": "gengduoda-copy",
971
+      "unicode": "eeed",
972
+      "unicode_decimal": 61165
973
+    },
974
+    {
926 975
       "icon_id": "2675116",
927 976
       "name": "搜索",
928 977
       "font_class": "sousuo",

二進制
src/assets/iconfont/iconfont.ttf


二進制
src/assets/iconfont/iconfont.woff


二進制
src/assets/iconfont/iconfont.woff2


+ 50 - 0
upload/development120.js

@@ -0,0 +1,50 @@
1
+const shell = require('shelljs')
2
+const path = require('path');
3
+const config = {
4
+  ip: "192.168.3.120", // ssh地址
5
+  username: "root", // ssh 用户名
6
+  port: 22,      //端口
7
+  password: "100100", // ssh 密码
8
+  path: '/home/itsm/project/web/hsms/pc', // 上传地址,删除地址
9
+  buildPath: '../dist/pc' // 本地打包后文件地址
10
+}
11
+let Client = require('ssh2-sftp-client');
12
+
13
+function connectSSh() {
14
+  let sftp = new Client();
15
+  sftp.connect({
16
+    host: config.ip,
17
+    port: config.port,
18
+    username: config.username,
19
+    password: config.password
20
+  }).then(() => {
21
+    console.log("-----先执行删除服务器文件-----")
22
+    return sftp.rmdir(config.path, true);
23
+  }).then(() => {
24
+    // 上传文件
25
+    console.log("-----开始上传-----")
26
+    return sftp.uploadDir(path.resolve(__dirname, config.buildPath), config.path);
27
+  }).then((data) => {
28
+    console.log("-----上传完成-----");
29
+    sftp.end();
30
+  }).catch((err) => {
31
+    console.log(err, '-----失败-----');
32
+    sftp.end();
33
+  });
34
+}
35
+function runTask() {
36
+  //打包完成
37
+  console.log(`当前NodeJs版本是${process.version}`);
38
+  const isNodeVersionLt17 = parseInt(process.version.slice(1)) < 17;
39
+  const execStr = isNodeVersionLt17 ? 'npm run build' : 'npm run build:17';
40
+  if (shell.exec(execStr).code == 0) {
41
+    // if (shell.exec(`find dist -name '*.js' -print0 | xargs -0 gzip -k`).code == 0) {
42
+      // if (shell.exec(`find dist -name '*.css' -print0 | xargs -0 gzip -k`).code == 0) {
43
+        console.log("-----打包成功-----");
44
+        //提交上传
45
+        connectSSh();
46
+      // }
47
+    // }
48
+  }
49
+}
50
+runTask()