Browse Source

Merge branch 'master' of http://git.dashitech.com/seimin/zy-pc

maotao 6 months ago
parent
commit
4898206864
100 changed files with 9530 additions and 3937 deletions
  1. 6 2
      angular.json
  2. 27 0
      package-lock.json
  3. 2 0
      package.json
  4. 8 0
      proxy.conf.json
  5. 68 0
      src/app/components/bind-extension-number/bind-extension-number.component.html
  6. 192 0
      src/app/components/bind-extension-number/bind-extension-number.component.less
  7. 191 0
      src/app/components/bind-extension-number/bind-extension-number.component.ts
  8. 20 0
      src/app/components/bind-extension-number/bind-extension-number.module.ts
  9. 4 1
      src/app/components/configurationCenter/configuration-callcenter/configuration-callcenter.component.html
  10. 2 4
      src/app/components/configurationCenter/configuration-callcenter/configuration-callcenter.component.ts
  11. 2 2
      src/app/components/configurationCenter/configuration-category/configuration-category.component.ts
  12. 2 2
      src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.component.html
  13. 12 13
      src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.component.ts
  14. 20 0
      src/app/components/configurationCenter/configuration-dictionary/configuration-dictionary.module.ts
  15. 5 4
      src/app/components/incidentManagement/incident-detail/incident-detail.component.html
  16. 19 16
      src/app/components/incidentManagement/incident-detail/incident-detail.component.ts
  17. 36 0
      src/app/components/incidentManagement/incident-direct-order/incident-direct-order.component.html
  18. 125 0
      src/app/components/incidentManagement/incident-direct-order/incident-direct-order.component.less
  19. 120 0
      src/app/components/incidentManagement/incident-direct-order/incident-direct-order.component.ts
  20. 20 0
      src/app/components/incidentManagement/incident-direct-order/incident-direct-order.module.ts
  21. 2 2
      src/app/components/incidentManagement/incident-handle-info-simple/incident-handle-info-simple.component.html
  22. 42 8
      src/app/components/incidentManagement/incident-handle-info-simple/incident-handle-info-simple.component.ts
  23. 2 2
      src/app/components/incidentManagement/incident-handle-info/incident-handle-info.component.html
  24. 28 8
      src/app/components/incidentManagement/incident-handle-info/incident-handle-info.component.ts
  25. 30 3
      src/app/components/incidentManagement/incident-handle-order/incident-handle-order.component.ts
  26. 2 2
      src/app/components/incidentManagement/incident-handle-repair/incident-handle-repair.component.html
  27. 15 5
      src/app/components/incidentManagement/incident-handle-repair/incident-handle-repair.component.ts
  28. 1 1
      src/app/components/incidentManagement/incident-handle/incident-handle.component.html
  29. 2 4
      src/app/components/incidentManagement/incident-handle/incident-handle.component.less
  30. 3 2
      src/app/components/incidentManagement/incident-handle/incident-handle.component.ts
  31. 14 0
      src/app/components/incidentManagement/incident-recording/incident-recording.component.html
  32. 173 0
      src/app/components/incidentManagement/incident-recording/incident-recording.component.less
  33. 29 0
      src/app/components/incidentManagement/incident-recording/incident-recording.component.ts
  34. 20 0
      src/app/components/incidentManagement/incident-recording/incident-recording.module.ts
  35. 22 0
      src/app/components/incidentManagement/incident-reject/incident-reject.component.html
  36. 125 0
      src/app/components/incidentManagement/incident-reject/incident-reject.component.less
  37. 65 0
      src/app/components/incidentManagement/incident-reject/incident-reject.component.ts
  38. 20 0
      src/app/components/incidentManagement/incident-reject/incident-reject.module.ts
  39. 77 0
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.html
  40. 240 0
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.less
  41. 122 0
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.ts
  42. 22 0
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.module.ts
  43. 73 0
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.html
  44. 240 0
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.less
  45. 181 0
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.ts
  46. 24 0
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.module.ts
  47. 36 0
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.html
  48. 155 0
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.less
  49. 143 0
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.ts
  50. 24 0
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.module.ts
  51. 16 1
      src/app/components/incidentManagement/incident-substitutio-assign/incident-substitution-assign.component.ts
  52. 1 1
      src/app/components/incidentManagement/incident-substitutio-redeploy/incident-substitution-redeploy.component.ts
  53. 1 1
      src/app/components/incidentManagement/incident-substitution/incident-substitution.component.less
  54. 1 1
      src/app/components/knowledge-look/knowledge-look.component.less
  55. 3 3
      src/app/components/knowledge-look/knowledge-look.component.ts
  56. 103 0
      src/app/components/order-scope/order-scope.component.html
  57. 184 0
      src/app/components/order-scope/order-scope.component.less
  58. 433 0
      src/app/components/order-scope/order-scope.component.ts
  59. 20 0
      src/app/components/order-scope/order-scope.module.ts
  60. 17 0
      src/app/pipes/string-to-first-name.pipe.ts
  61. 0 1
      src/app/services/httpInterceptor.service.ts
  62. 13 1
      src/app/services/main.service.ts
  63. 25 3
      src/app/services/tool.service.ts
  64. 19 0
      src/app/services/websocket-hjzx.service.ts
  65. 111 0
      src/app/services/websocket-incoming.service.ts
  66. 7 0
      src/app/services/websocket-phone.service.ts
  67. 3 0
      src/app/share/share.module.ts
  68. 6 0
      src/app/views/data-dictionary/data-dictionary.component.ts
  69. 1577 2549
      src/app/views/fuwutai/fuwutai.component.html
  70. 617 75
      src/app/views/fuwutai/fuwutai.component.less
  71. 2901 880
      src/app/views/fuwutai/fuwutai.component.ts
  72. 24 0
      src/app/views/fuwutai/fuwutai.module.ts
  73. 4 3
      src/app/views/group-management/group-management.component.html
  74. 1 1
      src/app/views/hospital-config/hospital-config.component.ts
  75. 0 2
      src/app/views/hushijiandan/hushijiandan.component.ts
  76. 1 1
      src/app/views/incident-config/incident-config.component.html
  77. 11 0
      src/app/views/incident-config/incident-config.component.ts
  78. 3 3
      src/app/views/incident-config/incident-config.module.ts
  79. 11 10
      src/app/views/incident-management/incident-management.component.html
  80. 37 26
      src/app/views/incident-management/incident-management.component.ts
  81. 1 1
      src/app/views/inspection-plan-config/inspection-plan-config.component.ts
  82. 1 0
      src/app/views/login/login.component.html
  83. 33 0
      src/app/views/login/login.component.ts
  84. 33 41
      src/app/views/main/main.component.html
  85. 76 22
      src/app/views/main/main.component.less
  86. 14 5
      src/app/views/main/main.component.ts
  87. 1 1
      src/app/views/other-config/other-config.component.html
  88. 6 1
      src/app/views/other-config/other-config.component.ts
  89. 3 1
      src/app/views/other-config/other-config.module.ts
  90. 72 74
      src/app/views/pathology/pathology.component.ts
  91. 66 68
      src/app/views/pathologyScan/pathologyScan.component.ts
  92. 0 2
      src/app/views/pharmacy/pharmacy.component.ts
  93. 0 2
      src/app/views/pharmacy2/pharmacy2.component.ts
  94. 28 28
      src/app/views/repository-manage/repository-manage.component.ts
  95. 35 37
      src/app/views/specimen-room-view/specimen-room-view.component.ts
  96. 0 2
      src/app/views/specimen-view2/specimen-view2.component.ts
  97. 3 3
      src/app/views/users-management/users-management.component.ts
  98. 164 3
      src/assets/iconfont/demo_index.html
  99. 31 3
      src/assets/iconfont/iconfont.css
  100. 0 0
      src/assets/iconfont/iconfont.js

+ 6 - 2
angular.json

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

+ 27 - 0
package-lock.json

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

+ 2 - 0
package.json

@@ -7,6 +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",
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
     "build:17": "set NODE_OPTIONS=--openssl-legacy-provider --max_old_space_size=4096 && npm run build",
8
     "build:17": "set NODE_OPTIONS=--openssl-legacy-provider --max_old_space_size=4096 && npm run build",
9
     "development": "node ./upload/development.js",
9
     "development": "node ./upload/development.js",
10
+    "development120": "node ./upload/development120.js",
10
     "production": "node ./upload/production.js",
11
     "production": "node ./upload/production.js",
11
     "test": "ng test",
12
     "test": "ng test",
12
     "lint": "ng lint",
13
     "lint": "ng lint",
@@ -40,6 +41,7 @@
40
     "ngx-echarts": "^4.2.2",
41
     "ngx-echarts": "^4.2.2",
41
     "ngx-print": "~1.2.1",
42
     "ngx-print": "~1.2.1",
42
     "ngx-sortablejs": "^3.1.3",
43
     "ngx-sortablejs": "^3.1.3",
44
+    "ngx-virtual-scroller": "^4.0.3",
43
     "npm": "^6.14.15",
45
     "npm": "^6.14.15",
44
     "overlayscrollbars": "^1.11.0",
46
     "overlayscrollbars": "^1.11.0",
45
     "overlayscrollbars-ngx": "^0.1.1",
47
     "overlayscrollbars-ngx": "^0.1.1",

+ 8 - 0
proxy.conf.json

@@ -14,5 +14,13 @@
14
     "pathRewrite": {
14
     "pathRewrite": {
15
       "^/file": "/file"
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
 }

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -169,7 +169,7 @@ export class ConfigurationCategoryComponent implements OnInit {
169
       group2: {
169
       group2: {
170
         groupName: keyword,
170
         groupName: keyword,
171
         hospitals: this.validateConfigForm.value.dutyId,
171
         hospitals: this.validateConfigForm.value.dutyId,
172
-        type: 1,
172
+        type: 3,
173
       },
173
       },
174
       idx: 0,
174
       idx: 0,
175
       sum: 10,
175
       sum: 10,
@@ -653,7 +653,7 @@ export class ConfigurationCategoryComponent implements OnInit {
653
           userGroup: this.validateConfigForm.value.userGroup,
653
           userGroup: this.validateConfigForm.value.userGroup,
654
           groupId: this.validateConfigForm.value.groupId || undefined,
654
           groupId: this.validateConfigForm.value.groupId || undefined,
655
           userId: this.validateConfigForm.value.userGroup === 1 ? this.validateConfigForm.value.userId : undefined,
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
     } else {
659
     } else {

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

@@ -41,8 +41,8 @@
41
                     </nz-input-group>
41
                     </nz-input-group>
42
                   </nz-form-control>
42
                   </nz-form-control>
43
                 </nz-form-item>
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
               </div>
46
               </div>
47
             </div>
47
             </div>
48
           </form>
48
           </form>

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

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

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

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

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

@@ -35,8 +35,8 @@
35
             </div>
35
             </div>
36
             <div class="row">
36
             <div class="row">
37
               <div class="col">来电电话:{{incidentData.incomingPhone}}</div>
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
             </div>
40
             </div>
41
             <div class="row">
41
             <div class="row">
42
               <div class="col">报修科室:{{incidentData.department?.dept}}</div>
42
               <div class="col">报修科室:{{incidentData.department?.dept}}</div>
@@ -59,8 +59,9 @@
59
               <div class="col">解决方案:{{incidentData.handleDescription}}</div>
59
               <div class="col">解决方案:{{incidentData.handleDescription}}</div>
60
             </div>
60
             </div>
61
             <div class="row">
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
             </div>
65
             </div>
65
             <div class="row">
66
             <div class="row">
66
               <div class="col thumbs">
67
               <div class="col thumbs">

+ 19 - 16
src/app/components/incidentManagement/incident-detail/incident-detail.component.ts

@@ -59,7 +59,7 @@ export class IncidentDetailComponent implements OnInit {
59
     this.activeTabValue = item.value;
59
     this.activeTabValue = item.value;
60
 
60
 
61
     if(this.activeTabValue == 1){
61
     if(this.activeTabValue == 1){
62
-      this.incidentData.callID && this.getCallrecord();
62
+      this.incidentData.callID && this.getCallLog();
63
       this.incidentData.reqAttachment && this.getRepairImgs();
63
       this.incidentData.reqAttachment && this.getRepairImgs();
64
     }else if(this.activeTabValue == 2){
64
     }else if(this.activeTabValue == 2){
65
       this.getHandleImgs();
65
       this.getHandleImgs();
@@ -173,19 +173,29 @@ export class IncidentDetailComponent implements OnInit {
173
 
173
 
174
   // 获取通话音频
174
   // 获取通话音频
175
   audioSrc =  '';//音频
175
   audioSrc =  '';//音频
176
-  getCallrecord() {
176
+  getCallLog() {
177
     let postData = {
177
     let postData = {
178
       idx: 0,
178
       idx: 0,
179
       sum: 1,
179
       sum: 1,
180
-      callrecord: {callAccept: this.incidentData.callID},
180
+      callLog: {callAccept: this.incidentData.callID},
181
     };
181
     };
182
     this.mainService
182
     this.mainService
183
-      .getFetchDataList('simple/data', 'callrecord', postData)
183
+      .getFetchDataList('simple/data', 'callLog', postData)
184
       .subscribe((result) => {
184
       .subscribe((result) => {
185
         if(result.status == 200){
185
         if(result.status == 200){
186
           result.list = result.list || [];
186
           result.list = result.list || [];
187
           if(result.list.length){
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
           }else{
199
           }else{
190
             this.audioSrc = '';
200
             this.audioSrc = '';
191
           }
201
           }
@@ -228,11 +238,6 @@ export class IncidentDetailComponent implements OnInit {
228
     return this.incidentData.synergetic && this.incidentData.synergetic.length ? this.incidentData.synergetic.map(v => v.name).join(',') : '';
238
     return this.incidentData.synergetic && this.incidentData.synergetic.length ? this.incidentData.synergetic.map(v => v.name).join(',') : '';
229
   }
239
   }
230
 
240
 
231
-  // 是否进入汇总单
232
-  isInSummaryOrder(){
233
-    return this.incidentData.duty && this.itsmSummarySheet.value == 1 && (this.incidentData.handlingPersonnelUser.id == this.tool.getCurrentUserId());
234
-  }
235
-
236
   // 获取院区配置信息
241
   // 获取院区配置信息
237
   itsmSummarySheet:any = {};//是否需要填写汇总单
242
   itsmSummarySheet:any = {};//是否需要填写汇总单
238
   getHospitalConfig() {
243
   getHospitalConfig() {
@@ -250,12 +255,10 @@ export class IncidentDetailComponent implements OnInit {
250
         let list = result.list || [];
255
         let list = result.list || [];
251
         this.itsmSummarySheet = list.find(v => v.key == 'itsmSummarySheet') || {};
256
         this.itsmSummarySheet = list.find(v => v.key == 'itsmSummarySheet') || {};
252
         console.log(this.itsmSummarySheet)
257
         console.log(this.itsmSummarySheet)
253
-        if(this.isInSummaryOrder()){
254
-          // 维修汇总单
255
-          if(this.incidentData.state.value == 'close' && this.incidentData.summaryId){
256
-            let flag = this.tabs.some(v => v.value === 4);
257
-            !flag && this.tabs.splice(2, 0, {name: '汇总单', value: 4});
258
-          }
258
+        // 维修汇总单
259
+        if(this.incidentData.state.value == 'close' && this.itsmSummarySheet.value == 1 && this.incidentData.summaryId){
260
+          let flag = this.tabs.some(v => v.value === 4);
261
+          !flag && this.tabs.splice(2, 0, {name: '汇总单', value: 4});
259
         }
262
         }
260
       });
263
       });
261
   }
264
   }

+ 36 - 0
src/app/components/incidentManagement/incident-direct-order/incident-direct-order.component.html

@@ -0,0 +1,36 @@
1
+<div class="save display_flex justify-content_flex-center align-items_center add">
2
+  <div class="modalBody">
3
+    <div class="title">直接解决<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4
+    <div class="content">
5
+      <form nz-form [formGroup]="validateForm" class="addForm">
6
+        <nz-form-item [hidden]="itsmSimpleHandle.value == 1">
7
+          <nz-form-label [nzSpan]="6" nzRequired nzFor="handleDescription">解决方案</nz-form-label>
8
+          <nz-form-control [nzSpan]="18" nzErrorTip="请填写解决方案!">
9
+            <textarea nz-input rows="4" placeholder="请填写解决方案" formControlName="handleDescription"></textarea>
10
+          </nz-form-control>
11
+        </nz-form-item>
12
+        <nz-form-item>
13
+          <nz-form-label [nzSpan]="6" nzRequired nzFor="closecode">处理结果</nz-form-label>
14
+          <nz-form-control [nzSpan]="18" nzErrorTip="请选择处理结果!">
15
+            <nz-select [nzDropdownMatchSelectWidth]="false" formControlName="closecode" nzShowSearch
16
+              nzPlaceHolder="请选择处理结果" nzServerSearch>
17
+              <ng-container *ngFor="let data of closecodeList">
18
+                <nz-option *ngIf="!isLoading" [nzLabel]="data.name" [nzValue]="data.id"></nz-option>
19
+              </ng-container>
20
+              <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
21
+                <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
22
+              </nz-option>
23
+            </nz-select>
24
+          </nz-form-control>
25
+        </nz-form-item>
26
+      </form>
27
+    </div>
28
+    <div class="display_flex justify-content_flex-center">
29
+      <button nz-button nzType="primary" (click)="submitForm()"[nzLoading]="isLoading">确认</button>
30
+      <button nz-button nzType="default" class="btn cancel" (click)="hideModal()">取消</button>
31
+    </div>
32
+  </div>
33
+</div>
34
+
35
+<!-- 遮罩 -->
36
+<app-mask *ngIf="maskFlag"></app-mask>

+ 125 - 0
src/app/components/incidentManagement/incident-direct-order/incident-direct-order.component.less

@@ -0,0 +1,125 @@
1
+@import "../../../../../src/theme.less";
2
+.save {
3
+  position: fixed;
4
+  left: 0;
5
+  top: 0;
6
+  width: 100%;
7
+  height: 100%;
8
+  background: rgba(0, 0, 0, 0.4);
9
+  z-index: 999;
10
+
11
+  .modalBody {
12
+    width: 350px;
13
+    background: #fff;
14
+    border-radius: 5px;
15
+    padding: 10px 20px;
16
+    color: #333;
17
+
18
+    .title {
19
+      width: 100%;
20
+      text-align: center;
21
+      font-size: 18px;
22
+      position: relative;
23
+
24
+      i {
25
+        position: absolute;
26
+        right: 0;
27
+        top: 0;
28
+        font-size: 20px;
29
+        color: #666;
30
+        cursor: pointer;
31
+        padding: 0 5px;
32
+      }
33
+    }
34
+
35
+    .content {
36
+      width: 100%;
37
+      height: 117px;
38
+      background: #f9fafb;
39
+      border: 1px solid #e5e9ed;
40
+      border-radius: 5px;
41
+      overflow: hidden;
42
+      margin-top: 12px;
43
+
44
+      div {
45
+        text-align: center;
46
+        margin: 0;
47
+
48
+        &.icon {
49
+          margin-top: 17px;
50
+
51
+          i {
52
+            color: #34b349;
53
+            font-size: 30px !important;
54
+
55
+            &.transport-wenhao {
56
+              color: #f5a523;
57
+            }
58
+
59
+            &.transport-shibai {
60
+              color: #ff3a52;
61
+            }
62
+          }
63
+        }
64
+
65
+        &.defeat {
66
+          color: #333;
67
+          font-size: 16px;
68
+        }
69
+
70
+        &:nth-child(3) {
71
+          font-size: 14px;
72
+          color: #666;
73
+        }
74
+      }
75
+    }
76
+
77
+    button {
78
+      margin-top: 10px;
79
+
80
+      &.btn {
81
+        margin-left: 8px;
82
+      }
83
+    }
84
+  }
85
+
86
+  // 新增
87
+  &.add {
88
+    .modalBody {
89
+      width: 480px;
90
+      height: auto;
91
+
92
+      .content {
93
+        width: 100%;
94
+        height: auto;
95
+        padding: 19px 14px 0 14px;
96
+        max-height: 500px;
97
+        overflow-y: auto;
98
+
99
+        .addForm {
100
+          .ant-form-item {
101
+            margin-bottom: 14px;
102
+
103
+            .ant-form-item-label {
104
+              text-align: left;
105
+            }
106
+          }
107
+        }
108
+
109
+        .editForm {
110
+          .ant-form-item {
111
+            margin-bottom: 14px;
112
+
113
+            .ant-form-item-label {
114
+              line-height: 0;
115
+            }
116
+          }
117
+        }
118
+      }
119
+
120
+      button:nth-child(1) {
121
+        margin-right: 20px;
122
+      }
123
+    }
124
+  }
125
+}

+ 120 - 0
src/app/components/incidentManagement/incident-direct-order/incident-direct-order.component.ts

@@ -0,0 +1,120 @@
1
+import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+import { MainService } from '../../../services/main.service';
3
+import { Router, ActivatedRoute } from '@angular/router';
4
+import { OverlayScrollbarsComponent } from 'overlayscrollbars-ngx';
5
+import { NzMessageService } from 'ng-zorro-antd';
6
+import { ToolService } from 'src/app/services/tool.service';
7
+import { FormGroup, Validators, FormBuilder, FormControl } from '@angular/forms';
8
+
9
+@Component({
10
+  selector: 'app-incident-direct-order',
11
+  templateUrl: './incident-direct-order.component.html',
12
+  styleUrls: ['./incident-direct-order.component.less']
13
+})
14
+export class IncidentDicrectOrderComponent implements OnInit {
15
+  @ViewChild("osComponentRef1", {
16
+    read: OverlayScrollbarsComponent,
17
+    static: false,
18
+  })
19
+  osComponentRef1: OverlayScrollbarsComponent;
20
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
21
+  @Output() confirmModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
22
+
23
+  @Input() id: any;
24
+
25
+  constructor(
26
+    private mainService: MainService,
27
+    private router: Router,
28
+    private route: ActivatedRoute,
29
+    private message: NzMessageService,
30
+    private tool: ToolService,
31
+    private fb: FormBuilder,
32
+  ) { }
33
+
34
+  isLoading = false;
35
+  hosId:any;
36
+
37
+  ngOnInit() {
38
+    this.hosId = this.tool.getCurrentHospital().id;
39
+    this.initForm();
40
+    this.getClosecodes();
41
+    this.getHospitalConfig();
42
+  }
43
+
44
+  // 初始化新增form表单
45
+  validateForm: FormGroup; //新增/编辑表单
46
+  initForm() {
47
+    this.validateForm = this.fb.group({
48
+      handleDescription: [null],//解决方案
49
+      closecode: [null, [Validators.required]],//处理结果
50
+    });
51
+    console.log(this.validateForm.controls)
52
+  }
53
+
54
+  requiredChange(name:string, required: boolean): void {
55
+    if (!required) {
56
+      this.validateForm.get(name)!.clearValidators();
57
+      this.validateForm.get(name)!.markAsPristine();
58
+    } else {
59
+      this.validateForm.get(name)!.setValidators(Validators.required);
60
+      this.validateForm.get(name)!.markAsDirty();
61
+    }
62
+    this.validateForm.get(name)!.updateValueAndValidity();
63
+  }
64
+
65
+  // 获取处理结果列表
66
+  closecodeList:any[] = [];
67
+  getClosecodes(){
68
+    this.mainService.getDictionary("list", "incident_closecode").subscribe((data) => {
69
+      this.closecodeList = data || [];
70
+    });
71
+  }
72
+
73
+  // 获取院区配置信息
74
+  itsmSimpleHandle:any = {};//是否简单处理
75
+  getHospitalConfig() {
76
+    let postData = {
77
+      idx: 0,
78
+      sum: 9999,
79
+      hospitalConfig: {
80
+        model: "itsm",
81
+        hosId: this.hosId,
82
+      },
83
+    }
84
+    this.mainService
85
+      .getFetchDataList("simple/data", "hospitalConfig", postData)
86
+      .subscribe((result) => {
87
+        let list = result.list || [];
88
+        this.itsmSimpleHandle = list.find(v => v.key == 'itsmSimpleHandle') || {};
89
+        if(this.itsmSimpleHandle.value != 1){
90
+          this.requiredChange('handleDescription', true);
91
+        }
92
+      });
93
+  }
94
+
95
+  // 关闭弹窗
96
+  hideModal() {
97
+    this.closeModelHs.emit(JSON.stringify({ show: false }));//emits(向上弹射)事件
98
+  }
99
+
100
+  // 表单提交
101
+  maskFlag:any = false;
102
+  submitForm(): void {
103
+    for (const i in this.validateForm.controls) {
104
+      this.validateForm.controls[i].markAsDirty();
105
+      this.validateForm.controls[i].updateValueAndValidity();
106
+    }
107
+    if (this.validateForm.invalid) {
108
+      return;
109
+    }
110
+
111
+    this.confirmModelHs.emit({
112
+      handleDescription: this.validateForm.value.handleDescription,
113
+      closecode: this.validateForm.value.closecode,
114
+    });//emits(向上弹射)事件
115
+  }
116
+}
117
+
118
+
119
+
120
+

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

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

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

@@ -27,12 +27,12 @@
27
     </div>
27
     </div>
28
   </div>
28
   </div>
29
 
29
 
30
-  <div class="formItem">
30
+  <div class="formItem" *ngIf="itsmIncidentAsset.value == 1">
31
     <div class="name"><i class="icon_transport transport-required red" style="visibility: hidden;"></i>关联资产:</div>
31
     <div class="name"><i class="icon_transport transport-required red" style="visibility: hidden;"></i>关联资产:</div>
32
     <div class="value w100">
32
     <div class="value w100">
33
       <nz-select class="w100" [(ngModel)]="incidentDataCopy.assetId" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch
33
       <nz-select class="w100" [(ngModel)]="incidentDataCopy.assetId" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch
34
         (nzOnSearch)="changeInp('assetId', $event)" nzAllowClear  nzPlaceHolder="请选择关联资产">
34
         (nzOnSearch)="changeInp('assetId', $event)" nzAllowClear  nzPlaceHolder="请选择关联资产">
35
-          <ng-container *ngFor="let option of assetProducList">
35
+          <ng-container *ngFor="let option of assetList">
36
             <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
36
             <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
37
           </ng-container>
37
           </ng-container>
38
           <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
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
       if(v[0] === 'synergetic'){
36
       if(v[0] === 'synergetic'){
37
         this.getSynergeticList(v[1]);
37
         this.getSynergeticList(v[1]);
38
       }else if(v[0] === 'assetId'){
38
       }else if(v[0] === 'assetId'){
39
-        this.getAssetProductList(v[1]);
39
+        this.getAssetList(v[1]);
40
       }
40
       }
41
     });
41
     });
42
     this.init();
42
     this.init();
@@ -47,9 +47,11 @@ export class IncidentHandleInfoSimpleComponent implements OnInit {
47
     this.hosId = this.tool.getCurrentHospital().id;
47
     this.hosId = this.tool.getCurrentHospital().id;
48
     this.incidentDataCopy = cloneDeep(this.incidentData);
48
     this.incidentDataCopy = cloneDeep(this.incidentData);
49
     this.incidentDataCopy.synergetic = [];
49
     this.incidentDataCopy.synergetic = [];
50
+    this.getHospitalConfig();
50
     this.getHandleCategorys();
51
     this.getHandleCategorys();
52
+    this.getClosecodes();
51
     this.getSynergeticList();
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
   hosId:any;
95
   hosId:any;
81
   isLoading = false;
96
   isLoading = false;
@@ -83,7 +98,7 @@ export class IncidentHandleInfoSimpleComponent implements OnInit {
83
   getSynergeticList(keyword = '') {
98
   getSynergeticList(keyword = '') {
84
     let postData = {
99
     let postData = {
85
       user: {
100
       user: {
86
-        hospital: { id: this.hosId },
101
+        hospital: { id: this.incidentDataCopy.duty.id },
87
         name: keyword,
102
         name: keyword,
88
         simpleQuery: true,
103
         simpleQuery: true,
89
         roleCodes: 'first-line support',
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
     let postData = {
140
     let postData = {
107
-      assetProduct: {
141
+      asset: {
108
         hosId: this.hosId,
142
         hosId: this.hosId,
109
         name: keyword,
143
         name: keyword,
110
       },
144
       },
@@ -112,9 +146,9 @@ export class IncidentHandleInfoSimpleComponent implements OnInit {
112
       sum: 20,
146
       sum: 20,
113
     };
147
     };
114
     this.mainService
148
     this.mainService
115
-      .getFetchDataList("simple/data", "assetProduct", postData)
149
+      .getFetchDataList("simple/data", "asset", postData)
116
       .subscribe((data) => {
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
     </div>
68
     </div>
69
   </div>
69
   </div>
70
 
70
 
71
-  <div class="formItem">
71
+  <div class="formItem" *ngIf="itsmIncidentAsset.value == 1">
72
     <div class="name"><i class="icon_transport transport-required red" style="visibility: hidden;"></i>关联资产:</div>
72
     <div class="name"><i class="icon_transport transport-required red" style="visibility: hidden;"></i>关联资产:</div>
73
     <div class="value w100">
73
     <div class="value w100">
74
       <nz-select class="w100" [(ngModel)]="incidentDataCopy.assetId" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch
74
       <nz-select class="w100" [(ngModel)]="incidentDataCopy.assetId" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch
75
         (nzOnSearch)="changeInp('assetId', $event)" nzAllowClear  nzPlaceHolder="请选择关联资产">
75
         (nzOnSearch)="changeInp('assetId', $event)" nzAllowClear  nzPlaceHolder="请选择关联资产">
76
-          <ng-container *ngFor="let option of assetProducList">
76
+          <ng-container *ngFor="let option of assetList">
77
             <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
77
             <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
78
           </ng-container>
78
           </ng-container>
79
           <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
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
       if(v[0] === 'synergetic'){
45
       if(v[0] === 'synergetic'){
46
         this.getSynergeticList(v[1]);
46
         this.getSynergeticList(v[1]);
47
       }else if(v[0] === 'assetId'){
47
       }else if(v[0] === 'assetId'){
48
-        this.getAssetProductList(v[1]);
48
+        this.getAssetList(v[1]);
49
       }else if(v[0] === 'category'){
49
       }else if(v[0] === 'category'){
50
         this.getIncidentCategoryList(v[1]);
50
         this.getIncidentCategoryList(v[1]);
51
       }
51
       }
@@ -66,10 +66,11 @@ export class IncidentHandleInfoComponent implements OnInit, OnChanges {
66
       this.incidentDataCopy.transSolution = 0;
66
       this.incidentDataCopy.transSolution = 0;
67
     }
67
     }
68
     console.log('this.incidentDataCopy:', this.incidentDataCopy)
68
     console.log('this.incidentDataCopy:', this.incidentDataCopy)
69
+    this.getHospitalConfig();
69
     this.getHandleCategorys();
70
     this.getHandleCategorys();
70
     this.getClosecodes();
71
     this.getClosecodes();
71
     this.getSynergeticList();
72
     this.getSynergeticList();
72
-    this.getAssetProductList();
73
+    this.getAssetList();
73
     this.getIncidentCategoryList();
74
     this.getIncidentCategoryList();
74
   }
75
   }
75
 
76
 
@@ -122,7 +123,7 @@ export class IncidentHandleInfoComponent implements OnInit, OnChanges {
122
   getSynergeticList(keyword = '') {
123
   getSynergeticList(keyword = '') {
123
     let postData = {
124
     let postData = {
124
       user: {
125
       user: {
125
-        hospital: { id: this.hosId },
126
+        hospital: { id: this.incidentDataCopy.duty.id },
126
         name: keyword,
127
         name: keyword,
127
         simpleQuery: true,
128
         simpleQuery: true,
128
         roleCodes: 'first-line support',
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
     let postData = {
195
     let postData = {
176
-      assetProduct: {
196
+      asset: {
177
         hosId: this.hosId,
197
         hosId: this.hosId,
178
         name: keyword,
198
         name: keyword,
179
       },
199
       },
@@ -181,9 +201,9 @@ export class IncidentHandleInfoComponent implements OnInit, OnChanges {
181
       sum: 20,
201
       sum: 20,
182
     };
202
     };
183
     this.mainService
203
     this.mainService
184
-      .getFetchDataList("simple/data", "assetProduct", postData)
204
+      .getFetchDataList("simple/data", "asset", postData)
185
       .subscribe((data) => {
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
     this.hosId = this.tool.getCurrentHospital().id;
36
     this.hosId = this.tool.getCurrentHospital().id;
37
     this.getSummaryList();
37
     this.getSummaryList();
38
-    this.getConsumableList();
38
+    this.getHospitalConfig();
39
     this.getWorkHourManagementList();
39
     this.getWorkHourManagementList();
40
   }
40
   }
41
 
41
 
@@ -143,18 +143,44 @@ export class IncidentHandleOrderComponent implements OnInit {
143
     this.changeInpSubject.next([model, e]);
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
   consumableList: any = [];
169
   consumableList: any = [];
148
   getConsumableList(keyword = '', isShowValue = false) {
170
   getConsumableList(keyword = '', isShowValue = false) {
149
-    let postData = {
171
+    let postData:any = {
150
       consumable: {
172
       consumable: {
151
         name: keyword,
173
         name: keyword,
152
-        hosId: this.hosId,
153
         showZero: true,
174
         showZero: true,
154
       },
175
       },
155
       idx: 0,
176
       idx: 0,
156
       sum: 20,
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
     this.mainService
184
     this.mainService
159
       .getFetchDataList("simple/data", "consumable", postData)
185
       .getFetchDataList("simple/data", "consumable", postData)
160
       .subscribe((data) => {
186
       .subscribe((data) => {
@@ -276,6 +302,7 @@ export class IncidentHandleOrderComponent implements OnInit {
276
     let postData = {
302
     let postData = {
277
       workHourManagement: {
303
       workHourManagement: {
278
         hosId: this.hosId,
304
         hosId: this.hosId,
305
+        showSecond: 1,
279
       },
306
       },
280
       idx: 0,
307
       idx: 0,
281
       sum: 9999,
308
       sum: 9999,

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

@@ -39,8 +39,8 @@
39
 <div class="detailItem">
39
 <div class="detailItem">
40
   <div class="name">电话录音:</div>
40
   <div class="name">电话录音:</div>
41
   <div class="value">
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
     </audio>
44
     </audio>
45
   </div>
45
   </div>
46
 </div>
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
   ngOnInit() {
22
   ngOnInit() {
23
     this.hosId = this.tool.getCurrentHospital().id;
23
     this.hosId = this.tool.getCurrentHospital().id;
24
-    this.incidentData.callID && this.getCallrecord();
24
+    this.incidentData.callID && this.getCallLog();
25
     this.incidentData.reqAttachment && this.getRepairImgs();
25
     this.incidentData.reqAttachment && this.getRepairImgs();
26
   }
26
   }
27
 
27
 
28
   // 获取通话音频
28
   // 获取通话音频
29
   audioSrc =  '';//音频
29
   audioSrc =  '';//音频
30
-  getCallrecord() {
30
+  getCallLog() {
31
     let postData = {
31
     let postData = {
32
       idx: 0,
32
       idx: 0,
33
       sum: 1,
33
       sum: 1,
34
-      callrecord: {callAccept: this.incidentData.callID},
34
+      callLog: {callAccept: this.incidentData.callID},
35
     };
35
     };
36
     this.mainService
36
     this.mainService
37
-      .getFetchDataList('simple/data', 'callrecord', postData)
37
+      .getFetchDataList('simple/data', 'callLog', postData)
38
       .subscribe((result) => {
38
       .subscribe((result) => {
39
         if(result.status == 200){
39
         if(result.status == 200){
40
           result.list = result.list || [];
40
           result.list = result.list || [];
41
           if(result.list.length){
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
           }else{
53
           }else{
44
             this.audioSrc = '';
54
             this.audioSrc = '';
45
           }
55
           }

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

@@ -1,6 +1,6 @@
1
 <div class="modal display_flex justify-content_flex-center align-items_center" *ngIf="incidentData">
1
 <div class="modal display_flex justify-content_flex-center align-items_center" *ngIf="incidentData">
2
   <div class="modalBody">
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
     <div class="content">
4
     <div class="content">
5
       <overlay-scrollbars #osComponentRef1 class="detail">
5
       <overlay-scrollbars #osComponentRef1 class="detail">
6
         <app-incident-handle-repair [incidentData]="incidentData"></app-incident-handle-repair>
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
         height: 100%;
114
         height: 100%;
115
         border-left: 1px solid #E9E9E9;
115
         border-left: 1px solid #E9E9E9;
116
         .knowageItem{
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
         .knowageTitle{
120
         .knowageTitle{
123
           font-size: 16px;
121
           font-size: 16px;

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

@@ -133,7 +133,7 @@ export class IncidentHandleComponent implements OnInit {
133
       let solutionStatusList = data[0] || [];
133
       let solutionStatusList = data[0] || [];
134
       let solutionTypeList = data[1] || [];
134
       let solutionTypeList = data[1] || [];
135
 
135
 
136
-      this.solutionStatus = solutionStatusList.find(item => item.value == 2);
136
+      this.solutionStatus = solutionStatusList.find(item => item.value == 3);
137
       	console.log('this.solutionStatus:', this.solutionStatus)
137
       	console.log('this.solutionStatus:', this.solutionStatus)
138
       this.solutionType = solutionTypeList.find(item => item.value == 1);
138
       this.solutionType = solutionTypeList.find(item => item.value == 1);
139
       	console.log('this.solutionType:', this.solutionType)
139
       	console.log('this.solutionType:', this.solutionType)
@@ -159,7 +159,7 @@ export class IncidentHandleComponent implements OnInit {
159
       idx: 0,
159
       idx: 0,
160
       sum: 9999,
160
       sum: 9999,
161
       solution: {
161
       solution: {
162
-        category: categoryId,
162
+        categoryId,
163
 				status: this.solutionStatus,
163
 				status: this.solutionStatus,
164
 				type: this.solutionType,
164
 				type: this.solutionType,
165
       },
165
       },
@@ -321,6 +321,7 @@ export class IncidentHandleComponent implements OnInit {
321
         incident: {
321
         incident: {
322
           ...incidentDataCopy,
322
           ...incidentDataCopy,
323
           handleCategory: incidentDataCopy.handleCategory ? { id: incidentDataCopy.handleCategory }: undefined,
323
           handleCategory: incidentDataCopy.handleCategory ? { id: incidentDataCopy.handleCategory }: undefined,
324
+          closecode: incidentDataCopy.closecode ? { id: incidentDataCopy.closecode }: undefined,
324
           synergetic: incidentDataCopy.synergetic.length ? incidentDataCopy.synergetic.map(v => ({id: v})): undefined,
325
           synergetic: incidentDataCopy.synergetic.length ? incidentDataCopy.synergetic.map(v => ({id: v})): undefined,
325
         },
326
         },
326
       }
327
       }

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

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

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

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

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

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

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

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

+ 22 - 0
src/app/components/incidentManagement/incident-reject/incident-reject.component.html

@@ -0,0 +1,22 @@
1
+<div class="save display_flex justify-content_flex-center align-items_center add">
2
+  <div class="modalBody">
3
+    <div class="title">不受理<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4
+    <div class="content">
5
+      <form nz-form [formGroup]="validateForm" class="addForm">
6
+        <nz-form-item>
7
+          <nz-form-label [nzSpan]="6" nzRequired nzFor="rejectRemark">不受理原因</nz-form-label>
8
+          <nz-form-control [nzSpan]="18" nzErrorTip="请填写不受理原因!">
9
+            <textarea rows="4" nz-input formControlName="rejectRemark" placeholder="请填写不受理原因"></textarea>
10
+          </nz-form-control>
11
+        </nz-form-item>
12
+      </form>
13
+    </div>
14
+    <div class="display_flex justify-content_flex-center">
15
+      <button nz-button nzType="primary" (click)="submitForm()"[nzLoading]="isLoading">确认</button>
16
+      <button nz-button nzType="default" class="btn cancel" (click)="hideModal()">取消</button>
17
+    </div>
18
+  </div>
19
+</div>
20
+
21
+<!-- 遮罩 -->
22
+<app-mask *ngIf="maskFlag"></app-mask>

+ 125 - 0
src/app/components/incidentManagement/incident-reject/incident-reject.component.less

@@ -0,0 +1,125 @@
1
+@import "../../../../../src/theme.less";
2
+.save {
3
+  position: fixed;
4
+  left: 0;
5
+  top: 0;
6
+  width: 100%;
7
+  height: 100%;
8
+  background: rgba(0, 0, 0, 0.4);
9
+  z-index: 999;
10
+
11
+  .modalBody {
12
+    width: 350px;
13
+    background: #fff;
14
+    border-radius: 5px;
15
+    padding: 10px 20px;
16
+    color: #333;
17
+
18
+    .title {
19
+      width: 100%;
20
+      text-align: center;
21
+      font-size: 18px;
22
+      position: relative;
23
+
24
+      i {
25
+        position: absolute;
26
+        right: 0;
27
+        top: 0;
28
+        font-size: 20px;
29
+        color: #666;
30
+        cursor: pointer;
31
+        padding: 0 5px;
32
+      }
33
+    }
34
+
35
+    .content {
36
+      width: 100%;
37
+      height: 117px;
38
+      background: #f9fafb;
39
+      border: 1px solid #e5e9ed;
40
+      border-radius: 5px;
41
+      overflow: hidden;
42
+      margin-top: 12px;
43
+
44
+      div {
45
+        text-align: center;
46
+        margin: 0;
47
+
48
+        &.icon {
49
+          margin-top: 17px;
50
+
51
+          i {
52
+            color: #34b349;
53
+            font-size: 30px !important;
54
+
55
+            &.transport-wenhao {
56
+              color: #f5a523;
57
+            }
58
+
59
+            &.transport-shibai {
60
+              color: #ff3a52;
61
+            }
62
+          }
63
+        }
64
+
65
+        &.defeat {
66
+          color: #333;
67
+          font-size: 16px;
68
+        }
69
+
70
+        &:nth-child(3) {
71
+          font-size: 14px;
72
+          color: #666;
73
+        }
74
+      }
75
+    }
76
+
77
+    button {
78
+      margin-top: 10px;
79
+
80
+      &.btn {
81
+        margin-left: 8px;
82
+      }
83
+    }
84
+  }
85
+
86
+  // 新增
87
+  &.add {
88
+    .modalBody {
89
+      width: 480px;
90
+      height: auto;
91
+
92
+      .content {
93
+        width: 100%;
94
+        height: auto;
95
+        padding: 19px 14px 0 14px;
96
+        max-height: 500px;
97
+        overflow-y: auto;
98
+
99
+        .addForm {
100
+          .ant-form-item {
101
+            margin-bottom: 14px;
102
+
103
+            .ant-form-item-label {
104
+              text-align: left;
105
+            }
106
+          }
107
+        }
108
+
109
+        .editForm {
110
+          .ant-form-item {
111
+            margin-bottom: 14px;
112
+
113
+            .ant-form-item-label {
114
+              line-height: 0;
115
+            }
116
+          }
117
+        }
118
+      }
119
+
120
+      button:nth-child(1) {
121
+        margin-right: 20px;
122
+      }
123
+    }
124
+  }
125
+}

+ 65 - 0
src/app/components/incidentManagement/incident-reject/incident-reject.component.ts

@@ -0,0 +1,65 @@
1
+import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+import { MainService } from '../../../services/main.service';
3
+import { Router, ActivatedRoute } from '@angular/router';
4
+import { NzMessageService } from 'ng-zorro-antd';
5
+import { ToolService } from 'src/app/services/tool.service';
6
+import { FormGroup, Validators, FormBuilder } from '@angular/forms';
7
+
8
+@Component({
9
+  selector: 'app-incident-reject',
10
+  templateUrl: './incident-reject.component.html',
11
+  styleUrls: ['./incident-reject.component.less']
12
+})
13
+export class IncidentRejectComponent implements OnInit {
14
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
15
+  @Output() confirmModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
16
+
17
+  @Input() id: any;
18
+
19
+  constructor(
20
+    private mainService: MainService,
21
+    private router: Router,
22
+    private route: ActivatedRoute,
23
+    private message: NzMessageService,
24
+    private tool: ToolService,
25
+    private fb: FormBuilder,
26
+  ) { }
27
+
28
+  isLoading = false;
29
+
30
+  ngOnInit() {
31
+    this.initForm();
32
+  }
33
+
34
+  // 初始化新增form表单
35
+  validateForm: FormGroup; //新增/编辑表单
36
+  initForm() {
37
+    this.validateForm = this.fb.group({
38
+      rejectRemark: [null, [Validators.required]],//不受理原因
39
+    });
40
+    console.log(this.validateForm.controls)
41
+  }
42
+
43
+  // 关闭弹窗
44
+  hideModal() {
45
+    this.closeModelHs.emit(JSON.stringify({ show: false }));//emits(向上弹射)事件
46
+  }
47
+
48
+  // 表单提交
49
+  maskFlag:any = false;
50
+  submitForm(): void {
51
+    for (const i in this.validateForm.controls) {
52
+      this.validateForm.controls[i].markAsDirty();
53
+      this.validateForm.controls[i].updateValueAndValidity();
54
+    }
55
+    if (this.validateForm.invalid) {
56
+      return;
57
+    }
58
+
59
+    this.confirmModelHs.emit(this.validateForm.value.rejectRemark);
60
+  }
61
+}
62
+
63
+
64
+
65
+

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -28,6 +28,7 @@ export class IncidentSubstitutionAssignComponent implements OnInit {
28
         this.getGroups(v[1]);
28
         this.getGroups(v[1]);
29
       }
29
       }
30
     });
30
     });
31
+
31
     this.initForm();
32
     this.initForm();
32
     this.getHospitals(1);
33
     this.getHospitals(1);
33
   }
34
   }
@@ -43,6 +44,20 @@ export class IncidentSubstitutionAssignComponent implements OnInit {
43
       groupId: [null, [Validators.required]],//组
44
       groupId: [null, [Validators.required]],//组
44
     });
45
     });
45
     console.log(this.validateForm.controls)
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
       group2: {
186
       group2: {
172
         groupName: keyword,
187
         groupName: keyword,
173
         hospitals: this.validateForm.value.dutyId,
188
         hospitals: this.validateForm.value.dutyId,
174
-        type: 1,
189
+        type: 3,
175
       },
190
       },
176
       idx: 0,
191
       idx: 0,
177
       sum: 10,
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
       group2: {
117
       group2: {
118
         groupName: keyword,
118
         groupName: keyword,
119
         hospitals: this.duty.id,
119
         hospitals: this.duty.id,
120
-        type: 1,
120
+        type: 3,
121
       },
121
       },
122
       idx: 0,
122
       idx: 0,
123
       sum: 10,
123
       sum: 10,

+ 1 - 1
src/app/components/incidentManagement/incident-substitution/incident-substitution.component.less

@@ -12,7 +12,7 @@
12
   width: 100%;
12
   width: 100%;
13
   height: 100%;
13
   height: 100%;
14
   background: rgba(0, 0, 0, 0.4);
14
   background: rgba(0, 0, 0, 0.4);
15
-  z-index: 8;
15
+  z-index: 18;
16
   .ji {
16
   .ji {
17
     position: absolute;
17
     position: absolute;
18
     right: 0px;
18
     right: 0px;

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

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

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

@@ -41,7 +41,7 @@ export class KnowledgeLookComponent implements OnInit {
41
 			idx: 0,
41
 			idx: 0,
42
 			sum: 9999,
42
 			sum: 9999,
43
 			solution: {
43
 			solution: {
44
-				hosId: this.hosId,
44
+				// hosId: data.hosId,
45
 				operationType:'lookOver',
45
 				operationType:'lookOver',
46
 				solutionNumber:data.solutionNumber
46
 				solutionNumber:data.solutionNumber
47
 			}
47
 			}
@@ -53,7 +53,7 @@ export class KnowledgeLookComponent implements OnInit {
53
 				this.getFile()
53
 				this.getFile()
54
 				let data = res.list
54
 				let data = res.list
55
 				this.detailData = data
55
 				this.detailData = data
56
-				let content = data[0].content
56
+				let content = data.length ? data[0].content : ''
57
 				if(content){
57
 				if(content){
58
 					this.richText = this.sanitizer.bypassSecurityTrustHtml(content);
58
 					this.richText = this.sanitizer.bypassSecurityTrustHtml(content);
59
 				}else{
59
 				}else{
@@ -67,7 +67,7 @@ export class KnowledgeLookComponent implements OnInit {
67
 					}
67
 					}
68
 				}
68
 				}
69
 				this.lookData = data[0]
69
 				this.lookData = data[0]
70
-				this.solutionLogs = data[0].solutionLogs
70
+				this.solutionLogs = data.length ? data[0].solutionLogs : []
71
 				this.stepLength = this.solutionLogs.length
71
 				this.stepLength = this.solutionLogs.length
72
 				this.isSpinning = false
72
 				this.isSpinning = false
73
 			});
73
 			});

+ 103 - 0
src/app/components/order-scope/order-scope.component.html

@@ -0,0 +1,103 @@
1
+<!-- 工单范围 -->
2
+<div class="init recallOrder display_flex justify-content_flex-center align-items_center">
3
+  <div class="con modalBody">
4
+    <div class="title">
5
+      工单范围<i class="icon_transport transport-guanbi" (click)="cancelInit()"></i>
6
+    </div>
7
+    <div class="content">
8
+      <div class="scopeTab">
9
+        <div class="scopeTabItem" [ngClass]="{ active: item.value == activeScopeTab.value }" *ngFor="let item of scopeTabs" (click)="activeScopeTab = item">
10
+          <label nz-checkbox [(ngModel)]="item.checked">{{item.name}}</label>
11
+        </div>
12
+      </div>
13
+      <!-- 运维 -->
14
+      <div class="conditions" *ngIf="activeScopeTab.value == 1">
15
+        <div nz-row>
16
+          <div nz-col nzSpan="4">是否不限制部门:</div>
17
+          <div nz-col nzSpan="20">
18
+            <nz-radio-group class="w100" [(ngModel)]="allDuty" (ngModelChange)="changeAllDuty($event)" [nzDisabled]="!activeScopeTab.checked">
19
+              <label nz-radio [nzValue]="1">是</label>
20
+              <label nz-radio [nzValue]="0">否</label>
21
+            </nz-radio-group>
22
+          </div>
23
+        </div>
24
+        <div nz-row>
25
+          <div nz-col nzSpan="3" [ngClass]="{ required: allDuty === 0 }">运维部门:</div>
26
+          <div nz-col nzSpan="21">
27
+            <nz-checkbox-group *ngIf="allDuty === 0" class="w100" style="display: flex; flex-wrap: wrap; gap:8px;" [nzDisabled]="!activeScopeTab.checked" [(ngModel)]="itsmCheckedHos" (ngModelChange)="changeItsmHospital($event)"></nz-checkbox-group>
28
+          </div>
29
+        </div>
30
+        <div nz-row>
31
+          <div nz-col nzSpan="3">运维分组:</div>
32
+          <div nz-col nzSpan="21">
33
+            <label class="checkAll mb8" nz-checkbox *ngIf="itsmCheckedGroup.length" [nzDisabled]="!activeScopeTab.checked" [(ngModel)]="isAllItsmGroupChecked" (ngModelChange)="updateAllItsmGroupChecked()">
34
+              全选
35
+            </label>
36
+            <nz-checkbox-group class="w100" style="display: flex; flex-wrap: wrap; gap:8px;" [nzDisabled]="!activeScopeTab.checked" [(ngModel)]="itsmCheckedGroup" (ngModelChange)="changeItsmGroup($event)"></nz-checkbox-group>
37
+          </div>
38
+        </div>
39
+        <div nz-row>
40
+          <div nz-col nzSpan="3">工单范围:</div>
41
+          <div nz-col nzSpan="21">
42
+            <nz-radio-group class="w100" [(ngModel)]="itsmOrderScopeRadio" [nzDisabled]="!activeScopeTab.checked">
43
+              <label nz-radio nzValue="0">全工单</label>
44
+              <label nz-radio nzValue="1">急单</label>
45
+              <label nz-radio nzValue="2">急单以及超时工单</label>
46
+            </nz-radio-group>
47
+          </div>
48
+        </div>
49
+      </div>
50
+      <!-- 配送 -->
51
+      <div class="conditions" *ngIf="activeScopeTab.value == 2">
52
+        <div nz-row>
53
+          <div nz-col nzSpan="3" class="required">院区:</div>
54
+          <div nz-col nzSpan="21">
55
+            <nz-radio-group class="w100" style="display: flex; flex-wrap: wrap; gap:8px;" [(ngModel)]="checkedHos" [nzDisabled]="!activeScopeTab.checked" (ngModelChange)="changeCheckedHos($event)">
56
+              <label *ngFor="let data of hosList" nz-radio [nzValue]="data.id">{{ data.hosName }}</label>
57
+            </nz-radio-group>
58
+          </div>
59
+        </div>
60
+        <div nz-row>
61
+          <div nz-col nzSpan="3">工单类型:</div>
62
+          <div nz-col nzSpan="21" *ngIf="hosTaskTypes && checkedHos && hosTaskTypes['hos' + checkedHos]">
63
+            <label class="checkAll mb8" nz-checkbox *ngIf="hosTaskTypes['hos' + checkedHos].length" [nzDisabled]="!activeScopeTab.checked" [(ngModel)]="allTypeChecked" (ngModelChange)="updateAllTypeChecked()">
64
+              全选
65
+            </label>
66
+            <nz-checkbox-wrapper class="w100" style="display: flex; flex-wrap: wrap; gap:8px;" (nzOnChange)="changeTaskTypes($event)">
67
+              <label nz-checkbox [nzDisabled]="!activeScopeTab.checked" [nzValue]="data.id" [ngModel]="initTypes[data.id]" *ngFor="let data of hosTaskTypes['hos' + checkedHos]">{{ data.taskName }}</label>
68
+            </nz-checkbox-wrapper>
69
+          </div>
70
+        </div>
71
+        <div nz-row>
72
+          <div nz-col nzSpan="3">人员分组:</div>
73
+          <div nz-col nzSpan="21" *ngIf="hosGroups && checkedHos && hosGroups['hos' + checkedHos]">
74
+            <label class="checkAll mb8" [nzDisabled]="!activeScopeTab.checked" nz-checkbox *ngIf="hosGroups['hos' + checkedHos].length" [(ngModel)]="allGroupChecked" (ngModelChange)="updateAllGroupChecked()">
75
+              全选
76
+            </label>
77
+            <nz-checkbox-wrapper class="w100" style="display: flex; flex-wrap: wrap; gap:8px;" (nzOnChange)="changeGroups($event)">
78
+              <label nz-checkbox [nzDisabled]="!activeScopeTab.checked" [nzValue]="data.id" [ngModel]="initGroups[data.id]" *ngFor="let data of hosGroups['hos' + checkedHos]">{{ data.groupName }}</label>
79
+            </nz-checkbox-wrapper>
80
+          </div>
81
+        </div>
82
+        <div nz-row>
83
+          <div nz-col nzSpan="3">工单范围:</div>
84
+          <div nz-col nzSpan="21">
85
+            <nz-radio-group class="w100" [nzDisabled]="!activeScopeTab.checked" [(ngModel)]="orderScopeRadio">
86
+              <label nz-radio nzValue="0">全工单</label>
87
+              <label nz-radio nzValue="1">急单</label>
88
+              <label nz-radio nzValue="2">急单以及超时工单</label>
89
+            </nz-radio-group>
90
+          </div>
91
+        </div>
92
+      </div>
93
+    </div>
94
+    <div class="btns display_flex justify-content_flex-center">
95
+      <button class="btn" nz-button nzType="primary" [nzLoading]="saveLoading" (click)="saveOrderScope()">
96
+        保存
97
+      </button>
98
+      <button class="btn cancel" nz-button nzType="default" (click)="cancelInit()">
99
+        知道了
100
+      </button>
101
+    </div>
102
+  </div>
103
+</div>

+ 184 - 0
src/app/components/order-scope/order-scope.component.less

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

+ 433 - 0
src/app/components/order-scope/order-scope.component.ts

@@ -0,0 +1,433 @@
1
+import { Component, OnInit, Output, Input } from '@angular/core';
2
+import { EventEmitter } from '@angular/core';
3
+import { MainService } from 'src/app/services/main.service';
4
+import { ToolService } from 'src/app/services/tool.service';
5
+import { NzMessageService } from 'ng-zorro-antd';
6
+
7
+@Component({
8
+  selector: 'app-order-scope',
9
+  templateUrl: './order-scope.component.html',
10
+  styleUrls: ['./order-scope.component.less']
11
+})
12
+export class OrderScopeComponent implements OnInit {
13
+  @Input() hsmsData:any = {
14
+    checkedHos: undefined,
15
+    scopeGroups: [],
16
+    orderScopeRadio: undefined,
17
+  }
18
+  @Input() itsmData:any = {
19
+    checkedHos: undefined,
20
+    scopeGroups: [],
21
+    orderScopeRadio: undefined,
22
+  }
23
+  @Output() confirmModal = new EventEmitter();
24
+  @Output() cancelModal = new EventEmitter();
25
+  constructor(
26
+    private mainService: MainService,
27
+    private tool: ToolService,
28
+    private message: NzMessageService,
29
+  ) { }
30
+
31
+  user = JSON.parse(localStorage.getItem("user")); //用户信息
32
+  checkedHos;//转运-院区
33
+  orderScopeRadio:any = '0';//转运-工单范围
34
+
35
+  itsmCheckedHos:any[] = [];//运维-院区
36
+  itsmCheckedGroup:any[] = [];//运维-分组
37
+  itsmOrderScopeRadio:any = '0';//运维-工单范围
38
+  isAllItsmGroupChecked:boolean = false;//运维-是否全选分组
39
+
40
+  ngOnInit() {
41
+    this.initHsms();
42
+    this.initItsm();
43
+  }
44
+
45
+  initHsms(){
46
+    console.log('hsmsData:', this.hsmsData);
47
+    let index = this.scopeTabs.findIndex(v => v.value === 2);
48
+    this.scopeTabs[index].checked = this.hsmsData.hsmsSwitch;
49
+    this.checkedHos = this.hsmsData.checkedHos;
50
+    this.orderScopeRadio = this.hsmsData.orderScopeRadio;
51
+    this.initOrderScope();
52
+    this.getOrderScope();
53
+  }
54
+
55
+  initItsm(){
56
+    console.log('itsmData', this.itsmData);
57
+    let index = this.scopeTabs.findIndex(v => v.value === 1);
58
+    this.scopeTabs[index].checked = this.itsmData.mdv2Switch;
59
+    this.itsmOrderScopeRadio = this.itsmData.orderScopeRadio;
60
+    this.itsmInitOrderScope();
61
+    this.itsmGetOrderScope();
62
+  }
63
+
64
+    // 工单范选项卡
65
+    scopeTabs:any[] = [
66
+      { name: '运维', value: 1, checked: false },
67
+      { name: '配送', value: 2, checked: false },
68
+    ];
69
+    activeScopeTab = this.scopeTabs[0];
70
+    //#region 工单范围-运维start
71
+    allDuty:number = 1;
72
+    itsmInitOrderScope(){
73
+
74
+    }
75
+    // 工单范围数据
76
+    itsmGetOrderScope() {
77
+      // 是否不限制部门
78
+      this.allDuty = this.itsmData.allDuty === undefined ? 1 : this.itsmData.allDuty;
79
+      // 权限内的院区和组
80
+      let hosList = this.user.infoPermission.dutyList || [];
81
+      let groups = this.user.infoPermission.dutyGroupList || [];
82
+
83
+      // 选中的院区和组
84
+      let itsmCheckedHos = this.itsmData.checkedHos || [];
85
+      let itsmCheckedGroup = this.itsmData.scopeGroups || [];
86
+
87
+      let hosIds = itsmCheckedHos.map(v => v.id);
88
+      let groupIds = itsmCheckedGroup.map(v => v.id);
89
+
90
+      this.itsmCheckedHos = hosList.map(v => ({ label: v.hosName, value: v.id, checked: hosIds.includes(v.id) }));
91
+      this.itsmCheckedGroup = groups.filter(v => hosIds.includes(v.hospital.id)).map(v => ({ label: v.hospital.hosName + '-' + v.groupName, value: v.id, checked: groupIds.includes(v.id) }));
92
+      this.isAllItsmGroupChecked = this.itsmCheckedGroup.length ? this.itsmCheckedGroup.every(v => v.checked) : false;
93
+    }
94
+
95
+    // 全选、全不选分组
96
+    updateAllItsmGroupChecked(){
97
+      this.itsmCheckedGroup.forEach(v => v.checked = this.isAllItsmGroupChecked);
98
+    }
99
+    // 选择分组
100
+    changeItsmGroup(e){
101
+      this.isAllItsmGroupChecked = this.itsmCheckedGroup.length ? this.itsmCheckedGroup.every(v => v.checked) : false;
102
+    }
103
+    // 选择院区
104
+    changeItsmHospital(hospitalList){
105
+      console.log('hospitalList:', hospitalList)
106
+      // 权限内的院区和组
107
+      let groups = this.user.infoPermission.dutyGroupList || [];
108
+
109
+      // 选中的院区和组
110
+      let itsmCheckedHos = this.itsmCheckedHos || [];
111
+      let itsmCheckedGroup = this.itsmCheckedGroup || [];
112
+
113
+      let hosIds = itsmCheckedHos.filter(v => v.checked).map(v => v.value);
114
+      let groupIds = itsmCheckedGroup.filter(v => v.checked).map(v => v.value);
115
+
116
+      this.itsmCheckedGroup = groups.filter(v => hosIds.includes(v.hospital.id)).map(v => ({ label: v.hospital.hosName + '-' + v.groupName, value: v.id, checked: groupIds.includes(v.id) }));
117
+      console.log('this.itsmCheckedGroup:', this.itsmCheckedGroup)
118
+      this.isAllItsmGroupChecked = this.itsmCheckedGroup.length ? this.itsmCheckedGroup.every(v => v.checked) : false;
119
+    }
120
+    //#endregion 工单范围-运维end
121
+
122
+    //#region 工单范围-配送start
123
+    // 工单范围数据
124
+    hosList = []; //院区
125
+    taskTypes = []; //当前权限下所有工单类型
126
+    userGroups = []; //当前权限下所有人员分组
127
+    hosTaskTypes = {}; //当前权限下所有院区对应的任务类型
128
+    hosGroups = {}; //当前权限下所有院区对应的人员分组
129
+    getOrderScope() {
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 || [];
134
+      this.userGroups = this.user.infoPermission.groups.filter(v => v.type !== 3);
135
+      this.hosList.forEach((e) => {
136
+        let arrT = [],
137
+          arrG = [];
138
+        this.taskTypes.forEach((el) => {
139
+          if (el.hosId.id == e.id) {
140
+            arrT.push(el);
141
+            this.hosTaskTypes["hos" + e.id] = arrT;
142
+          }
143
+        });
144
+
145
+        this.userGroups.forEach((ele) => {
146
+          if (ele.hospital.id == e.id) {
147
+            arrG.push(ele);
148
+            this.hosGroups["hos" + e.id] = arrG;
149
+          }
150
+        });
151
+      });
152
+      console.log(this.hosTaskTypes, this.hosGroups);
153
+
154
+      // 工单范围全选按钮是否选中
155
+      this.allTypeChecked = false;
156
+      if (this.user.user.scope && this.user.user.scope.typeIds) {
157
+        if (
158
+          this.user.user.scope.typeIds.length ==
159
+          this.hosTaskTypes["hos" + this.checkedHos].length
160
+        ) {
161
+          this.allTypeChecked = true;
162
+        }
163
+      }
164
+      this.allGroupChecked = false;
165
+      if (this.user.user.scope && this.user.user.scope.groupIds) {
166
+        if (
167
+          this.user.user.scope.groupIds.length ==
168
+          this.hosGroups["hos" + this.checkedHos].length
169
+        ) {
170
+          this.allGroupChecked = true;
171
+        }
172
+      }
173
+    }
174
+
175
+    // 工单类型全选
176
+    allTypeChecked: boolean = false; //工单类型全选框
177
+    updateAllTypeChecked() {
178
+      let arr = [];
179
+      this.hosTaskTypes["hos" + this.checkedHos].forEach((e) => {
180
+        arr.push(e.id);
181
+      });
182
+      this.changeTaskTypes(this.allTypeChecked ? arr : [], false);
183
+
184
+    }
185
+
186
+    // 修改院区
187
+    changeCheckedHos(e){
188
+      this.getTypeAndGroup();
189
+    }
190
+
191
+    // 工单类型
192
+    checkedTypes = []; //已选中taskTypes的ID数组
193
+    changeType: boolean = false; //是否改变工单类型
194
+    hosTypesChecked = {}; //当前权限下所有院区下选中的工单类型
195
+    changeTaskTypes(val, isOwn = true) {
196
+      this.checkedTypes = val;
197
+      this.changeType = true;
198
+      this.hosTypesChecked["hos" + this.checkedHos] = val;
199
+      console.log(this.hosTypesChecked);
200
+      if (val.length == this.hosTaskTypes["hos" + this.checkedHos].length) {
201
+        this.allTypeChecked = true;
202
+      } else {
203
+        this.allTypeChecked = false;
204
+      }
205
+
206
+      if(isOwn){
207
+        let obj = {};
208
+        console.log('arr:', val)
209
+        console.log('hosTaskTypes:', this.hosTaskTypes)
210
+        val.forEach((e) => {
211
+          obj[e] = true;
212
+        });
213
+        this.initTypes = obj;
214
+      }else{
215
+        let obj = {};
216
+        console.log('arr:', val)
217
+        console.log('hosTaskTypes:', this.hosTaskTypes)
218
+        val.forEach((e) => {
219
+          obj[e] = this.allTypeChecked;
220
+        });
221
+        this.initTypes = obj;
222
+      }
223
+    }
224
+
225
+    // 人员分组全选
226
+    allGroupChecked: boolean = false; //工单类型全选框
227
+    updateAllGroupChecked() {
228
+      let arr = [];
229
+      this.hosGroups["hos" + this.checkedHos].forEach((e) => {
230
+        arr.push(e.id);
231
+      });
232
+      this.changeGroups(this.allGroupChecked ? arr : [], false);
233
+
234
+    }
235
+    // 人员分组
236
+    checkedGroups = [];
237
+    changeGroup: boolean = false; //是否改变分组
238
+    hosGroupsChecked = {}; //当前权限下所有院区下选中的人员分组
239
+    changeGroups(val, isOwn = true) {
240
+      this.checkedGroups = val;
241
+      this.changeGroup = true;
242
+      this.hosGroupsChecked["hos" + this.checkedHos] = val;
243
+      console.log(this.hosGroupsChecked);
244
+      if (val.length == this.hosGroups["hos" + this.checkedHos].length) {
245
+        this.allGroupChecked = true;
246
+      } else {
247
+        this.allGroupChecked = false;
248
+      }
249
+
250
+      if(isOwn){
251
+        let obj = {};
252
+        val.forEach((e) => {
253
+          obj[e] = true;
254
+        });
255
+        this.initGroups = obj;
256
+      }else{
257
+        let obj = {};
258
+        val.forEach((e) => {
259
+          obj[e] = this.allGroupChecked;
260
+        });
261
+        this.initGroups = obj;
262
+      }
263
+    }
264
+
265
+    // 工单范围院区切换
266
+    getTypeAndGroup() {
267
+      this.allTypeChecked = false;
268
+      this.allGroupChecked = false;
269
+      for (let k1 in this.initTypes) {
270
+        this.initTypes[k1] = false;
271
+      }
272
+      for (let k1 in this.initGroups) {
273
+        this.initGroups[k1] = false;
274
+      }
275
+      // this.orderScopeRadio = "0";
276
+    }
277
+
278
+    // 切换是否不限制部门
279
+    changeAllDuty(e){
280
+      console.log(e);
281
+      this.itsmCheckedHos.forEach(v => (v.checked = false));
282
+      this.itsmCheckedGroup = [];
283
+    }
284
+
285
+    // 保存工单范围设置
286
+    saveLoading: boolean = false; //保存按钮loading状态
287
+    saveOrderScope() {
288
+      // 配送的院区必填
289
+      let value2 = this.scopeTabs.find(v => v.value == 2 );
290
+      if(value2.checked && !this.checkedHos){
291
+        this.message.warning('【配送】的院区必填!')
292
+        return;
293
+      }
294
+
295
+      // 运维限制部门的时候,部门必填
296
+      let value1 = this.scopeTabs.find(v => v.value == 1 );
297
+      if(value1.checked && !this.itsmCheckedHos.filter(v => v.checked).length && this.allDuty != 1){
298
+        this.message.warning('【运维】的部门必填!')
299
+        return;
300
+      }
301
+
302
+      this.saveLoading = true;
303
+      let types = [];
304
+      if (!this.changeType) {
305
+        // 没有改变当前工单类型设置,取初始化设置,
306
+        for (var i in this.initTypes) {
307
+          if (this.initTypes[i]) {
308
+            types.push(Number(i));
309
+          }
310
+        }
311
+      } else {
312
+        let arr = this.hosTypesChecked["hos" + this.checkedHos] || [];
313
+        arr.forEach(function (val) {
314
+          types.push(Number(val));
315
+        });
316
+      }
317
+
318
+      let groups = [];
319
+      if (!this.changeGroup) {
320
+        // 没有改变当前分组设置,取初始化设置,
321
+        for (var k in this.initGroups) {
322
+          if (this.initGroups[k]) {
323
+            groups.push(Number(k));
324
+          }
325
+        }
326
+      } else {
327
+        let arr = this.hosGroupsChecked["hos" + this.checkedHos] || [];
328
+        arr.forEach(function (val) {
329
+          groups.push(Number(val));
330
+        });
331
+      }
332
+      types = [...new Set(types)];
333
+      groups = [...new Set(groups)];
334
+
335
+      let groupsId = [];
336
+      groups.forEach((e) => {
337
+        groupsId.push({ id: e });
338
+      });
339
+      let typesId = [];
340
+      types.forEach((e) => {
341
+        typesId.push({ id: e });
342
+      });
343
+
344
+      let itsm = this.scopeTabs.find(v => v.value == 1);
345
+      let hsms = this.scopeTabs.find(v => v.value == 2);
346
+
347
+      let postData:any = {
348
+        workerOrderScope: {
349
+          userId: this.user.user.id,
350
+          mdv2Switch: Number(itsm.checked),
351
+          hsmsSwitch: Number(hsms.checked),
352
+          range: 0,
353
+          dutyRange: 0,
354
+        },
355
+      };
356
+
357
+      if(itsm.checked){
358
+        postData.workerOrderScope.allDuty = this.allDuty;
359
+        postData.workerOrderScope.dutyIds = this.itsmCheckedHos.filter(v => v.checked).map(v => v.value).toString() || undefined;
360
+        postData.workerOrderScope.dutyGroupIds = this.itsmCheckedGroup.filter(v => v.checked).map(v => v.value).toString() || undefined;
361
+        postData.workerOrderScope.dutyRange = this.itsmOrderScopeRadio - 0;
362
+      }
363
+      if(hsms.checked){
364
+        postData.workerOrderScope.hospitalId = this.checkedHos ? { id: this.checkedHos - 0 } : undefined;
365
+        postData.workerOrderScope.typeIds = typesId || undefined;
366
+        postData.workerOrderScope.groupIds = groupsId || undefined;
367
+        postData.workerOrderScope.range = this.orderScopeRadio - 0;
368
+      }
369
+      if (this.user.user.scope && this.user.user.scope.id) {
370
+        postData.workerOrderScope["id"] = this.user.user.scope.id;
371
+      }
372
+      console.log('allDuty', this.allDuty)
373
+      console.log('itsmCheckedHos', this.itsmCheckedHos)
374
+      console.log('itsmCheckedGroup', this.itsmCheckedGroup)
375
+      console.log('itsmOrderScopeRadio', this.itsmOrderScopeRadio)
376
+      console.log(postData);
377
+      // return;
378
+      this.mainService
379
+        .coopTypeConfig("addData", "workerOrderScope", postData)
380
+        .subscribe((data) => {
381
+          this.saveLoading = false;
382
+          this.confirmModal.emit(data);
383
+        });
384
+    }
385
+
386
+    // 关闭弹窗
387
+    cancelInit() {
388
+      this.cancelModal.emit();
389
+    }
390
+
391
+    // 工单范围设置回显
392
+    initTypes = {}; //工单类型
393
+    initGroups = {}; //人员分组
394
+    initOrderScope() {
395
+      if (!this.user || !this.user.user || !this.user.user.scope) return;
396
+      let scopeInfo = this.user.user.scope;
397
+      if (!this.taskTypes.length) {
398
+        this.initTypes = {};
399
+      } else {
400
+        this.taskTypes.forEach((val, idx) => {
401
+          this.initTypes[val.id] = false;
402
+        });
403
+      }
404
+      if (!scopeInfo.typeIds) {
405
+        this.initTypes = {};
406
+        this.allTypeChecked = false;
407
+      } else {
408
+        scopeInfo.typeIds.forEach((val, idx) => {
409
+          this.initTypes[val.id] = true;
410
+        });
411
+      }
412
+
413
+      console.log(this.initTypes);
414
+
415
+      if (!this.userGroups || !this.userGroups.length) {
416
+        this.initGroups = {};
417
+      } else {
418
+        this.userGroups.forEach((val, idx) => {
419
+          this.initGroups[val.id] = false;
420
+        });
421
+      }
422
+      if (!scopeInfo.groupIds || !scopeInfo.groupIds.length) {
423
+        this.initGroups = {};
424
+      } else {
425
+        scopeInfo.groupIds.forEach((val, idx) => {
426
+          this.initGroups[val.id] = true;
427
+        });
428
+      }
429
+      console.log(this.initGroups);
430
+      console.log(this.initTypes);
431
+    }
432
+    //#endregion 工单范围-配送end
433
+}

+ 20 - 0
src/app/components/order-scope/order-scope.module.ts

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

+ 17 - 0
src/app/pipes/string-to-first-name.pipe.ts

@@ -0,0 +1,17 @@
1
+import { Pipe, PipeTransform } from '@angular/core';
2
+
3
+@Pipe({
4
+  name: 'stringToFirstValue'
5
+})
6
+export class StringToFirstValuePipe implements PipeTransform {
7
+
8
+  transform(value: string, ...args: any[]): any {
9
+    if(value){
10
+      return value.split(',')[0];
11
+    }else{
12
+      return '';
13
+    }
14
+
15
+  }
16
+
17
+}

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

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

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

@@ -993,7 +993,19 @@ export class MainService {
993
 	    headers: this.headers,
993
 	    headers: this.headers,
994
 	  });
994
 	  });
995
 	}
995
 	}
996
-	
996
+
997
+	// 调度台工单列表
998
+	orderList(data) {
999
+	  return this.http.post(host.host + `/ser/merge/orderList`,data, {
1000
+	    headers: this.headers,
1001
+	  });
1002
+	}
1003
+  // 调度台头部运维分组
1004
+	incidentUserTaskCount(data) {
1005
+	  return this.http.post(host.host + `/incident/incidentUserTaskCount`,data, {
1006
+      headers: this.headers,
1007
+	  });
1008
+	}
997
 	// 大输液-科室汇总统计
1009
 	// 大输液-科室汇总统计
998
 	summaryData(data) {
1010
 	summaryData(data) {
999
 	  return this.http.post(host.host + `/infusion/solutions/dept/summary`,data, {
1011
 	  return this.http.post(host.host + `/infusion/solutions/dept/summary`,data, {

+ 25 - 3
src/app/services/tool.service.ts

@@ -63,7 +63,7 @@ export class ToolService {
63
   getCurrentUserId() {
63
   getCurrentUserId() {
64
     return JSON.parse(localStorage.getItem("user")).user.id;
64
     return JSON.parse(localStorage.getItem("user")).user.id;
65
   }
65
   }
66
-  //返回院区或责任部门
66
+  //返回当前人的院区是院区或责任部门
67
   getHospitalOrDuty() {
67
   getHospitalOrDuty() {
68
     let hospital = this.getCurrentHospital();
68
     let hospital = this.getCurrentHospital();
69
     let type = 'hospital';//默认是院区
69
     let type = 'hospital';//默认是院区
@@ -83,6 +83,11 @@ export class ToolService {
83
     }
83
     }
84
   }
84
   }
85
 
85
 
86
+  //判断是否是责任部门
87
+  isDuty(hospital) {
88
+    return hospital.type && hospital.type.value == 6;
89
+  }
90
+
86
   // 返回当前用户的组
91
   // 返回当前用户的组
87
   getCurrentGroupList(){
92
   getCurrentGroupList(){
88
     return JSON.parse(localStorage.getItem("user")).user.group || [];
93
     return JSON.parse(localStorage.getItem("user")).user.group || [];
@@ -111,6 +116,14 @@ export class ToolService {
111
         jurisdiction = e.childrens || []; //匹配路由后,取得对应的权限
116
         jurisdiction = e.childrens || []; //匹配路由后,取得对应的权限
112
       }
117
       }
113
     });
118
     });
119
+    if(!jurisdiction.length){
120
+      // type为panel路由
121
+      menu.forEach(v => {
122
+        if(v.type === 'panel' && v.link == link && v.childrens){
123
+          jurisdiction = v.childrens || []; //匹配路由后,取得对应的权限
124
+        }
125
+      })
126
+    }
114
     jurisdiction.forEach((e) => {
127
     jurisdiction.forEach((e) => {
115
       switch (e.link) {
128
       switch (e.link) {
116
         case "look":
129
         case "look":
@@ -236,8 +249,8 @@ export class ToolService {
236
         case "assign":
249
         case "assign":
237
           coopBtns.assign = true; //指派
250
           coopBtns.assign = true; //指派
238
           break;
251
           break;
239
-        case "postpone":
240
-          coopBtns.postpone = true; //延期处理
252
+        case "handle":
253
+          coopBtns.handle = true; //处理
241
           break;
254
           break;
242
         case "settings":
255
         case "settings":
243
           coopBtns.settings = true; //设置
256
           coopBtns.settings = true; //设置
@@ -260,6 +273,15 @@ export class ToolService {
260
         case "visit":
273
         case "visit":
261
           coopBtns.visit = true; //回访
274
           coopBtns.visit = true; //回访
262
           break;
275
           break;
276
+        case "continue":
277
+            coopBtns.continue = true; //继续建单
278
+            break;
279
+        case "generate":
280
+          coopBtns.generate = true; //生成
281
+          break;
282
+        case "reject":
283
+          coopBtns.reject = true; //不受理
284
+          break;
263
       }
285
       }
264
     });
286
     });
265
     console.log(coopBtns);
287
     console.log(coopBtns);

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

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

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

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

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

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

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

@@ -57,6 +57,7 @@ import { wangEditorComponent } from './wang-editor/wang-editor.component';
57
 import { StripHtmlPipe } from '../pipes/strip-html.pipe.';
57
 import { StripHtmlPipe } from '../pipes/strip-html.pipe.';
58
 import { PathologyAddComponent } from './pathology-add/pathology-add.component';
58
 import { PathologyAddComponent } from './pathology-add/pathology-add.component';
59
 import { PathologyDetailComponent } from './pathology-detail/pathology-detail.component';
59
 import { PathologyDetailComponent } from './pathology-detail/pathology-detail.component';
60
+import { StringToFirstValuePipe } from '../pipes/string-to-first-name.pipe';
60
 
61
 
61
 @NgModule({
62
 @NgModule({
62
   declarations: [
63
   declarations: [
@@ -91,6 +92,7 @@ import { PathologyDetailComponent } from './pathology-detail/pathology-detail.co
91
 		PathologyDetailComponent,
92
 		PathologyDetailComponent,
92
     DateTransformPipe,
93
     DateTransformPipe,
93
     DataToNamePipe,
94
     DataToNamePipe,
95
+    StringToFirstValuePipe,
94
     DialogDeleteComponent,
96
     DialogDeleteComponent,
95
     DialogBxComponent,
97
     DialogBxComponent,
96
     DialogSurgeryComponent,
98
     DialogSurgeryComponent,
@@ -162,6 +164,7 @@ import { PathologyDetailComponent } from './pathology-detail/pathology-detail.co
162
     OverlayscrollbarsModule,
164
     OverlayscrollbarsModule,
163
     DateTransformPipe,
165
     DateTransformPipe,
164
     DataToNamePipe,
166
     DataToNamePipe,
167
+    StringToFirstValuePipe,
165
     DialogDeleteComponent,
168
     DialogDeleteComponent,
166
     DialogBxComponent,
169
     DialogBxComponent,
167
     DialogSurgeryComponent,
170
     DialogSurgeryComponent,

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

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

File diff suppressed because it is too large
+ 1577 - 2549
src/app/views/fuwutai/fuwutai.component.html


File diff suppressed because it is too large
+ 617 - 75
src/app/views/fuwutai/fuwutai.component.less


File diff suppressed because it is too large
+ 2901 - 880
src/app/views/fuwutai/fuwutai.component.ts


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

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

+ 4 - 3
src/app/views/group-management/group-management.component.html

@@ -160,12 +160,13 @@
160
                 [nzDropdownMatchSelectWidth]="false"
160
                 [nzDropdownMatchSelectWidth]="false"
161
                 formControlName="groupType"
161
                 formControlName="groupType"
162
                 nzShowSearch
162
                 nzShowSearch
163
-                nzAllowClear 
163
+                nzAllowClear
164
                 [nzDisabled]="isDisabledGroupType"
164
                 [nzDisabled]="isDisabledGroupType"
165
                 nzPlaceHolder="请选择分组类型"
165
                 nzPlaceHolder="请选择分组类型"
166
               >
166
               >
167
-                <nz-option nzLabel="统计分组" nzValue="1"></nz-option>
167
+                <nz-option nzLabel="配送分组" nzValue="1"></nz-option>
168
                 <nz-option nzLabel="派单分组" nzValue="2"></nz-option>
168
                 <nz-option nzLabel="派单分组" nzValue="2"></nz-option>
169
+                <nz-option nzLabel="运维分组" nzValue="3"></nz-option>
169
               </nz-select>
170
               </nz-select>
170
             </nz-form-control>
171
             </nz-form-control>
171
           </nz-form-item>
172
           </nz-form-item>
@@ -179,7 +180,7 @@
179
                 class="formItem"
180
                 class="formItem"
180
                 nzServerSearch
181
                 nzServerSearch
181
                 nzShowSearch
182
                 nzShowSearch
182
-                [nzLoading]="editLoading" 
183
+                [nzLoading]="editLoading"
183
                 nzPlaceHolder="请选择分组组长"
184
                 nzPlaceHolder="请选择分组组长"
184
                 formControlName="groupLeader"
185
                 formControlName="groupLeader"
185
                 (nzOnSearch)="changeInp($event)"
186
                 (nzOnSearch)="changeInp($event)"

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

@@ -441,7 +441,7 @@ export class HospitalConfigComponent implements OnInit {
441
    * @returns
441
    * @returns
442
    */
442
    */
443
   getGroupList(hosId) {
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
     return this.mainService
445
     return this.mainService
446
       .getFetchDataList("data", "group2", postData)
446
       .getFetchDataList("data", "group2", postData)
447
       .toPromise();
447
       .toPromise();

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

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

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

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

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

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

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

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

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

@@ -1,7 +1,7 @@
1
 <div class="list-template pt0">
1
 <div class="list-template pt0">
2
   <div class="list-template__content">
2
   <div class="list-template__content">
3
     <div class="list-template__tab">
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
     </div>
5
     </div>
6
     <div class="list-template__top" nz-row>
6
     <div class="list-template__top" nz-row>
7
       <div nz-col nzXl='18' class="list-template__searchBox">
7
       <div nz-col nzXl='18' class="list-template__searchBox">
@@ -72,7 +72,7 @@
72
             <td>{{index+(pageIndex-1) * pageSize + 1}}</td>
72
             <td>{{index+(pageIndex-1) * pageSize + 1}}</td>
73
             <td class="text_align_left">
73
             <td class="text_align_left">
74
               <span [ngClass]="priorityColor(data.priorityId)">{{ data.priorityDTO?.name }}</span>
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
               <i class="icon_transport transport-a-11111 ml8" *ngIf="data.reqAttachment"></i>
76
               <i class="icon_transport transport-a-11111 ml8" *ngIf="data.reqAttachment"></i>
77
               <i class="icon_transport transport-luyin ml8" *ngIf="data.reqRecord"></i>
77
               <i class="icon_transport transport-luyin ml8" *ngIf="data.reqRecord"></i>
78
             </td>
78
             </td>
@@ -90,19 +90,20 @@
90
             <td>
90
             <td>
91
               {{ data.acceptUser?.name || '无' }}<br>
91
               {{ data.acceptUser?.name || '无' }}<br>
92
               {{ transferSynergetic(data) }}<br>
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
             </td>
95
             </td>
95
-            <td [innerHTML]="transferHandlerLog(data.currentLog)"></td>
96
+            <td [innerHTML]="data.overtimeRemark"></td>
96
             <td>{{ data.state?.name }}</td>
97
             <td>{{ data.state?.name }}</td>
97
             <td>
98
             <td>
98
               <div class="coop">
99
               <div class="coop">
99
                 <span *ngIf="coopBtns.look" (click)="detail($event,data)">查看</span>
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
                 <span *ngIf="coopBtns.del && data.deleteFlag !== 1" (click)="showDelModal($event, data,'您确认要删除吗?','删除','del')">删除</span>
107
                 <span *ngIf="coopBtns.del && data.deleteFlag !== 1" (click)="showDelModal($event, data,'您确认要删除吗?','删除','del')">删除</span>
107
               </div>
108
               </div>
108
             </td>
109
             </td>

+ 37 - 26
src/app/views/incident-management/incident-management.component.ts

@@ -48,15 +48,15 @@ export class IncidentManagementComponent implements OnInit {
48
   btnLoading: boolean = false; //提交按钮loading状态
48
   btnLoading: boolean = false; //提交按钮loading状态
49
 
49
 
50
   tabs:any[] = [
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
   searchDTO: any = {};
62
   searchDTO: any = {};
@@ -87,8 +87,8 @@ export class IncidentManagementComponent implements OnInit {
87
     this.coopBtns = this.tool.initCoopBtns(this.route);
87
     this.coopBtns = this.tool.initCoopBtns(this.route);
88
     this.initTabs();
88
     this.initTabs();
89
     this.getDeparts();
89
     this.getDeparts();
90
-    this.getUsers('', null, 'handle');
91
-    this.getUsers('', null, 'acceptUser');
90
+    this.getUsers('', 'handle');
91
+    this.getUsers('', 'acceptUser');
92
     this.getGdStates();
92
     this.getGdStates();
93
     this.getOverdueStates();
93
     this.getOverdueStates();
94
     this.getIncidentCategoryList();
94
     this.getIncidentCategoryList();
@@ -99,18 +99,18 @@ export class IncidentManagementComponent implements OnInit {
99
   // 初始化tab
99
   // 初始化tab
100
   initTabs(){
100
   initTabs(){
101
     if (this.coopBtns.all) {
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
     if (this.coopBtns.callback) {
104
     if (this.coopBtns.callback) {
105
         let index = this.tabs.findIndex(v => v.key == 'resolve');
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
     if (this.coopBtns.reassign) {
108
     if (this.coopBtns.reassign) {
109
         let index = this.tabs.findIndex(v => v.key == 'doing');
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
     // if (this.coopBtns.badEvaluate) {
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
     let postData = {
155
     let postData = {
156
       user: {
156
       user: {
157
         name: e || "",
157
         name: e || "",
158
-        hospital: { id: that.hospital },
158
+        hospital: { id: that.tool.getCurrentHospital().id },
159
+        engineer: 1,
159
         simpleQuery: true,
160
         simpleQuery: true,
160
       },
161
       },
161
       idx: 0,
162
       idx: 0,
@@ -214,7 +215,7 @@ export class IncidentManagementComponent implements OnInit {
214
     if(currentLog.extra1DTO && currentLog.extra2 && currentLog.startTime){
215
     if(currentLog.extra1DTO && currentLog.extra2 && currentLog.startTime){
215
         if(currentLog.extra2==0.5){
216
         if(currentLog.extra2==0.5){
216
           currentLog.extra2 = 4;
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
         }else{
219
         }else{
219
           return currentLog.extra1DTO.name+"<br>"+ format(addDays(currentLog.startTime, +currentLog.extra2), "MM月dd日前完成");
220
           return currentLog.extra1DTO.name+"<br>"+ format(addDays(currentLog.startTime, +currentLog.extra2), "MM月dd日前完成");
220
         }
221
         }
@@ -245,17 +246,17 @@ export class IncidentManagementComponent implements OnInit {
245
 
246
 
246
   // 是否显示处理按钮
247
   // 是否显示处理按钮
247
   computedHandle(data){
248
   computedHandle(data){
248
-    return data.state.value === 'handler' && data.handlingPersonnelUser && data.handlingPersonnelUser.id == this.tool.getCurrentUserId() && data.deleteFlag !== 1;
249
+    return this.coopBtns.handle && data.state.value === 'handler' && data.handlingPersonnelUser && data.handlingPersonnelUser.id == this.tool.getCurrentUserId() && data.deleteFlag !== 1;
249
   }
250
   }
250
 
251
 
251
   // 是否显示换人处理按钮
252
   // 是否显示换人处理按钮
252
   computedSubstitution(data){
253
   computedSubstitution(data){
253
-    return data.state.value === 'pending' || data.state.value === 'handler' || (data.state.value === 'reassign' && this.coopBtns.assign) && data.deleteFlag !== 1;
254
+    return (data.state.value === 'pending' || data.state.value === 'handler' || (data.state.value === 'reassign' && this.coopBtns.assign)) && data.deleteFlag !== 1;
254
   }
255
   }
255
 
256
 
256
   // 是否显示延期处理按钮
257
   // 是否显示延期处理按钮
257
   computedPostpone(data){
258
   computedPostpone(data){
258
-    return this.coopBtns.postpone && data.state.value == 'handler' && data.handlingPersonnelUser && data.handlingPersonnelUser.id == this.tool.getCurrentUserId() && data.deleteFlag !== 1;
259
+    return data.state.value == 'handler' && data.handlingPersonnelUser && data.handlingPersonnelUser.id == this.tool.getCurrentUserId() && data.deleteFlag !== 1;
259
   }
260
   }
260
 
261
 
261
   // 是否显示设置责任部门按钮
262
   // 是否显示设置责任部门按钮
@@ -316,7 +317,17 @@ export class IncidentManagementComponent implements OnInit {
316
       .getFetchDataList("simple/data", "incident", postData)
317
       .getFetchDataList("simple/data", "incident", postData)
317
       .subscribe((result) => {
318
       .subscribe((result) => {
318
         this.loading1 = false;
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
         this.listLength = result.totalNum;
331
         this.listLength = result.totalNum;
321
       });
332
       });
322
 
333
 
@@ -337,7 +348,7 @@ export class IncidentManagementComponent implements OnInit {
337
         if(!incident){
348
         if(!incident){
338
             incident = {};
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
           let { hospital, type } = this.tool.getHospitalOrDuty();
352
           let { hospital, type } = this.tool.getHospitalOrDuty();
342
           if(type === 'duty'){
353
           if(type === 'duty'){
343
             // 当前的所属责任部门
354
             // 当前的所属责任部门
@@ -353,7 +364,7 @@ export class IncidentManagementComponent implements OnInit {
353
 
364
 
354
         incident.assignee = this.tool.getCurrentUserId();
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
           incident.candidateGroups = this.tool.getCurrentGroupList().map(v => v.id).toString();
368
           incident.candidateGroups = this.tool.getCurrentGroupList().map(v => v.id).toString();
358
         }else{
369
         }else{
359
           delete incident.candidateGroups;
370
           delete incident.candidateGroups;
@@ -690,7 +701,7 @@ export class IncidentManagementComponent implements OnInit {
690
     this.getList(true);
701
     this.getList(true);
691
   }
702
   }
692
 
703
 
693
-  // 处理-弹窗
704
+  // 换人处理-弹窗
694
   substitutionModalShow = false; //弹窗开关
705
   substitutionModalShow = false; //弹窗开关
695
   substitution(e, data) {
706
   substitution(e, data) {
696
     e.stopPropagation();
707
     e.stopPropagation();

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

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

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

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

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

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

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

@@ -1,28 +1,25 @@
1
 <nz-layout class="app-layout display_flex flex_auto ant-layout-has-sider">
1
 <nz-layout class="app-layout display_flex flex_auto ant-layout-has-sider">
2
   <overlay-scrollbars #osComponentRef1 class="menu-sidebar">
2
   <overlay-scrollbars #osComponentRef1 class="menu-sidebar">
3
     <div class="sidebar-logo display_flex align-items_center justify-content_flex-center">
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
       </div>
6
       </div>
8
     </div>
7
     </div>
9
     <!-- 导航重写,兼容chrome39 -->
8
     <!-- 导航重写,兼容chrome39 -->
10
     <ul id="ds-menu">
9
     <ul id="ds-menu">
11
       <li class="mainMenuOne" (click)="totoMenu('首页')" [ngClass]="{mainMenuSelected:indexFlag}">
10
       <li class="mainMenuOne" (click)="totoMenu('首页')" [ngClass]="{mainMenuSelected:indexFlag}">
12
         <i nz-icon nzType="home"></i>
11
         <i nz-icon nzType="home"></i>
13
-        <span>首页</span>
12
+        <span nz-tooltip nzTooltipTitle="首页">首页</span>
14
       </li>
13
       </li>
15
       <li *ngFor="let data of menus" class="mainMenuWrap">
14
       <li *ngFor="let data of menus" class="mainMenuWrap">
16
         <div class="mainMenuOne" (click)="clickMenuOne(data)" [ngClass]="{mainMenuSelected:data.flagBg}">
15
         <div class="mainMenuOne" (click)="clickMenuOne(data)" [ngClass]="{mainMenuSelected:data.flagBg}">
17
           <i class="icon_transport" [ngClass]="data.icon" *ngIf="isTransportIcon(data.icon)"></i>
16
           <i class="icon_transport" [ngClass]="data.icon" *ngIf="isTransportIcon(data.icon)"></i>
18
           <i nz-icon [nzType]="data.icon" *ngIf="!isTransportIcon(data.icon)"></i>
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
         </div>
20
         </div>
23
         <ul>
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
             {{item.title}}
23
             {{item.title}}
27
           </li>
24
           </li>
28
         </ul>
25
         </ul>
@@ -33,42 +30,37 @@
33
     <nz-header>
30
     <nz-header>
34
       <div class="app-header display_flex justify-content_space-between align-items_center">
31
       <div class="app-header display_flex justify-content_space-between align-items_center">
35
         <div class="left">
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
         </div>
52
         </div>
49
         <div class="right">
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
               <img src="../../assets/images/icon_keshi.png" alt="">
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
             </div>
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
             </div>
64
             </div>
73
           </div>
65
           </div>
74
         </div>
66
         </div>

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

@@ -17,9 +17,46 @@ nz-sider {
17
   overflow-y: auto;
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
 .menu-sidebar {
57
 .menu-sidebar {
21
-  width: 224px;
22
-  flex: 0 0 224px;
58
+  width: 175px;
59
+  flex: 0 0 175px;
23
   position: relative;
60
   position: relative;
24
   z-index: 8;
61
   z-index: 8;
25
   min-height: 100vh;
62
   min-height: 100vh;
@@ -79,7 +116,7 @@ nz-sider {
79
     box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45);
116
     box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45);
80
 
117
 
81
     & > i {
118
     & > i {
82
-      margin-left: 24px;
119
+      margin-left: 16px;
83
       margin-right: 10px;
120
       margin-right: 10px;
84
       font-size: 14px;
121
       font-size: 14px;
85
     }
122
     }
@@ -113,7 +150,11 @@ nz-sider {
113
     margin: 0;
150
     margin: 0;
114
     padding: 0;
151
     padding: 0;
115
     li {
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
       transition: height 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
158
       transition: height 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
118
       box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.45) inset;
159
       box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.45) inset;
119
     }
160
     }
@@ -123,14 +164,19 @@ nz-sider {
123
 
164
 
124
 .sidebar-logo {
165
 .sidebar-logo {
125
   position: relative;
166
   position: relative;
126
-  height: 88px;
167
+  height: 48px;
127
   overflow: hidden;
168
   overflow: hidden;
128
-  line-height: 64px;
169
+  line-height: 48px;
129
   background: #fff;
170
   background: #fff;
130
   transition: all 0.3s;
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
     color: @primary-color;
180
     color: @primary-color;
135
     font-weight: 600;
181
     font-weight: 600;
136
     font-size: 13px;
182
     font-size: 13px;
@@ -147,13 +193,13 @@ nz-sider {
147
 nz-header.ant-layout-header {
193
 nz-header.ant-layout-header {
148
   padding: 0;
194
   padding: 0;
149
   width: 100%;
195
   width: 100%;
150
-  z-index: 2;
196
+  z-index: 99;
151
   background: #fff;
197
   background: #fff;
152
-  height: 88px;
198
+  height: 48px;
153
 
199
 
154
   .app-header {
200
   .app-header {
155
     position: relative;
201
     position: relative;
156
-    height: 88px;
202
+    height: 48px;
157
     padding: 0;
203
     padding: 0;
158
     background: #fff;
204
     background: #fff;
159
     box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
205
     box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
@@ -161,10 +207,19 @@ nz-header.ant-layout-header {
161
     border-bottom: 1px solid rgba(0, 21, 41, 0.08);
207
     border-bottom: 1px solid rgba(0, 21, 41, 0.08);
162
 
208
 
163
     .left {
209
     .left {
210
+      height: 100%;
164
       flex: 1;
211
       flex: 1;
165
       display: flex;
212
       display: flex;
166
-      flex-wrap: wrap;
167
       align-items: center;
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
       .menuLabel {
223
       .menuLabel {
169
         color: #333;
224
         color: #333;
170
         font-size: 22px;
225
         font-size: 22px;
@@ -206,10 +261,9 @@ nz-header.ant-layout-header {
206
       }
261
       }
207
 
262
 
208
       .userInfo {
263
       .userInfo {
209
-        width: 260px;
210
         height: 100%;
264
         height: 100%;
211
         float: right;
265
         float: right;
212
-        padding: 8px 36px 8px 8px;
266
+        padding: 0 24px;
213
         box-sizing: border-box;
267
         box-sizing: border-box;
214
         font-size: 14px;
268
         font-size: 14px;
215
         border-left: 1px solid #e5e9ed;
269
         border-left: 1px solid #e5e9ed;
@@ -223,22 +277,22 @@ nz-header.ant-layout-header {
223
 
277
 
224
         .user {
278
         .user {
225
           overflow: hidden;
279
           overflow: hidden;
226
-          font-size: 20px;
227
-          height: 40px;
280
+          height: 48px;
228
           display: flex;
281
           display: flex;
229
           justify-content: center;
282
           justify-content: center;
230
           align-items: center;
283
           align-items: center;
284
+          font-size: 16px;
285
+          cursor: pointer;
231
 
286
 
232
           img {
287
           img {
233
-            width: 36px;
234
-            height: 36px;
288
+            width: 32px;
289
+            height: 32px;
235
             margin-right: 8px;
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 - 5
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
   getTypeByDept(id) {
455
   getTypeByDept(id) {
457
     let postData = {
456
     let postData = {
458
       idx: 0,
457
       idx: 0,
459
       sum: 1,
458
       sum: 1,
460
       systemConfiguration: { keyconfig: "busiViewDeptId" },
459
       systemConfiguration: { keyconfig: "busiViewDeptId" },
461
     };
460
     };
462
-    this.deptTypeLoading = true;
461
+    this.maskFlag = this.msg.loading("正在加载中..", {
462
+      nzDuration: 0,
463
+    }).messageId;
463
     this.mainService
464
     this.mainService
464
       .getFetchDataList("simple/data", "systemConfiguration", postData)
465
       .getFetchDataList("simple/data", "systemConfiguration", postData)
465
       .subscribe((result) => {
466
       .subscribe((result) => {
466
-        this.deptTypeLoading = false;
467
+        this.msg.remove(this.maskFlag);
468
+        this.maskFlag = false;
467
         if (result.status == 200) {
469
         if (result.status == 200) {
468
           let remember = JSON.parse(localStorage.getItem("remember"));
470
           let remember = JSON.parse(localStorage.getItem("remember"));
469
           window.open(
471
           window.open(
@@ -493,6 +495,15 @@ export class MainComponent implements OnInit {
493
     this.iShowMenuModal = false;
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
   logOut(): void {
508
   logOut(): void {
498
     // 假退出
509
     // 假退出
@@ -504,7 +515,6 @@ export class MainComponent implements OnInit {
504
     }
515
     }
505
     localStorage.removeItem("user");
516
     localStorage.removeItem("user");
506
     localStorage.removeItem("menu");
517
     localStorage.removeItem("menu");
507
-    localStorage.removeItem("phones");
508
     localStorage.removeItem("index");
518
     localStorage.removeItem("index");
509
 
519
 
510
     // 假退出
520
     // 假退出
@@ -517,7 +527,6 @@ export class MainComponent implements OnInit {
517
         }
527
         }
518
         localStorage.removeItem("user");
528
         localStorage.removeItem("user");
519
         localStorage.removeItem("menu");
529
         localStorage.removeItem("menu");
520
-        localStorage.removeItem("phones");
521
         localStorage.removeItem("index");
530
         localStorage.removeItem("index");
522
       }
531
       }
523
     });
532
     });

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

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

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

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

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

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

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

@@ -48,8 +48,8 @@ export class PathologyComponent implements OnInit, OnDestroy {
48
   })
48
   })
49
   osComponentRef5: OverlayScrollbarsComponent;
49
   osComponentRef5: OverlayScrollbarsComponent;
50
   constructor(
50
   constructor(
51
-	private mainService: MainService, 
52
-	public router: Router, 
51
+	private mainService: MainService,
52
+	public router: Router,
53
 	private route: ActivatedRoute,
53
 	private route: ActivatedRoute,
54
 	public tool: ToolService,
54
 	public tool: ToolService,
55
 	private fb: FormBuilder,
55
 	private fb: FormBuilder,
@@ -95,7 +95,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
95
   completedFlag = false;
95
   completedFlag = false;
96
   completedSearchKey = "";
96
   completedSearchKey = "";
97
   completedLoad = false;
97
   completedLoad = false;
98
-	
98
+
99
 	barCode:any; //条码搜索
99
 	barCode:any; //条码搜索
100
   // other
100
   // other
101
   loginUser: any = localStorage.getItem("user")
101
   loginUser: any = localStorage.getItem("user")
@@ -117,7 +117,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
117
 	fixationModal:boolean = false //标本接收固定
117
 	fixationModal:boolean = false //标本接收固定
118
 	verificationMoadl:boolean = false //标本核验
118
 	verificationMoadl:boolean = false //标本核验
119
 	specimenCode:any; //标本条码
119
 	specimenCode:any; //标本条码
120
-	listOneData:any=[]; 
120
+	listOneData:any=[];
121
 	listOneLength:any;
121
 	listOneLength:any;
122
 	pageOneIndex:any = 1;
122
 	pageOneIndex:any = 1;
123
 	pageSize:any = 10;
123
 	pageSize:any = 10;
@@ -255,7 +255,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
255
       this.runTime();
255
       this.runTime();
256
     }, 500);
256
     }, 500);
257
   }
257
   }
258
-	
258
+
259
 	//tab切换
259
 	//tab切换
260
 	tabClick(type){
260
 	tabClick(type){
261
 		this.activeIndex = type
261
 		this.activeIndex = type
@@ -269,7 +269,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
269
 			this.getHospitalData()
269
 			this.getHospitalData()
270
 		}
270
 		}
271
 	}
271
 	}
272
-	
272
+
273
 	// 获取今日接收数据
273
 	// 获取今日接收数据
274
 	getToday(){
274
 	getToday(){
275
 		this.mainService
275
 		this.mainService
@@ -284,7 +284,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
284
 	changeUserInp(e){
284
 	changeUserInp(e){
285
 		this.changeInpSubjectUser.next([e]);
285
 		this.changeInpSubjectUser.next([e]);
286
 	}
286
 	}
287
-	
287
+
288
 	// 获取配送人
288
 	// 获取配送人
289
 	getUserData(e){
289
 	getUserData(e){
290
 		let query={
290
 		let query={
@@ -301,7 +301,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
301
 			this.userData = res.list
301
 			this.userData = res.list
302
 		});
302
 		});
303
 	}
303
 	}
304
-	
304
+
305
 	// 搜索
305
 	// 搜索
306
 	search() {
306
 	search() {
307
 	  this.pageOneIndex = 1;
307
 	  this.pageOneIndex = 1;
@@ -340,7 +340,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
340
 	      that.listOneLength = data.totalNum;
340
 	      that.listOneLength = data.totalNum;
341
 	    });
341
 	    });
342
 	}
342
 	}
343
-	
343
+
344
 	// 实时术中快速数据
344
 	// 实时术中快速数据
345
 	getSpeedinessList() {
345
 	getSpeedinessList() {
346
 		var that = this;
346
 		var that = this;
@@ -362,7 +362,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
362
 		    that.listTwoLength = data.totalNum;
362
 		    that.listTwoLength = data.totalNum;
363
 		  });
363
 		  });
364
 	}
364
 	}
365
-	
365
+
366
 	// 打包配送
366
 	// 打包配送
367
 	getPackList() {
367
 	getPackList() {
368
 	  var that = this;
368
 	  var that = this;
@@ -382,7 +382,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
382
 	      that.listThreeLength = data.totalNum;
382
 	      that.listThreeLength = data.totalNum;
383
 	    });
383
 	    });
384
 	}
384
 	}
385
-	
385
+
386
 	// 查看
386
 	// 查看
387
 	project:any = [];
387
 	project:any = [];
388
 	oneLook(e,data){
388
 	oneLook(e,data){
@@ -404,7 +404,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
404
 			}
404
 			}
405
 		});
405
 		});
406
 	}
406
 	}
407
-	
407
+
408
 	// 关闭查看
408
 	// 关闭查看
409
 	closeDetail(){
409
 	closeDetail(){
410
 		this.listDetailMoadl = false
410
 		this.listDetailMoadl = false
@@ -412,7 +412,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
412
 			document.getElementById('Binput').focus();
412
 			document.getElementById('Binput').focus();
413
 		},200)
413
 		},200)
414
 	}
414
 	}
415
-	
415
+
416
 	// 接收
416
 	// 接收
417
 	connect(){
417
 	connect(){
418
 		this.mainService.generateBatchNumber()
418
 		this.mainService.generateBatchNumber()
@@ -427,7 +427,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
427
 			}
427
 			}
428
 		})
428
 		})
429
 	}
429
 	}
430
-	
430
+
431
 	// 打包
431
 	// 打包
432
 	packaging(){
432
 	packaging(){
433
 		this.mainService.generateBatchNumber()
433
 		this.mainService.generateBatchNumber()
@@ -442,14 +442,14 @@ export class PathologyComponent implements OnInit, OnDestroy {
442
 			}
442
 			}
443
 		})
443
 		})
444
 	}
444
 	}
445
-	
445
+
446
 	//打包查看标本
446
 	//打包查看标本
447
 	threeLook(e,data){
447
 	threeLook(e,data){
448
 		localStorage.setItem("pathologyActiveIndex",this.activeIndex)
448
 		localStorage.setItem("pathologyActiveIndex",this.activeIndex)
449
 		localStorage.setItem("dataType",'');
449
 		localStorage.setItem("dataType",'');
450
 		this.router.navigateByUrl(`/pathologyScan?packId=${data.id}&businessType=packagLook`);
450
 		this.router.navigateByUrl(`/pathologyScan?packId=${data.id}&businessType=packagLook`);
451
 	}
451
 	}
452
-	
452
+
453
 	// 配送
453
 	// 配送
454
 	distributionModal:boolean = false
454
 	distributionModal:boolean = false
455
 	distribution(e,data){
455
 	distribution(e,data){
@@ -463,7 +463,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
463
 		this.handoverUserId = null
463
 		this.handoverUserId = null
464
 		this.distributionModal = true
464
 		this.distributionModal = true
465
 	}
465
 	}
466
-	
466
+
467
 	// 确定配送
467
 	// 确定配送
468
 	submitDistributionForm(){
468
 	submitDistributionForm(){
469
 		for (const i in this.validateForm.controls) {
469
 		for (const i in this.validateForm.controls) {
@@ -491,9 +491,9 @@ export class PathologyComponent implements OnInit, OnDestroy {
491
 		      this.message.error(data.msg)
491
 		      this.message.error(data.msg)
492
 		    }
492
 		    }
493
 		  });
493
 		  });
494
-		
494
+
495
 	}
495
 	}
496
-	
496
+
497
 	// 取消配送
497
 	// 取消配送
498
 	hideDistributionModal(){
498
 	hideDistributionModal(){
499
 		this.distributionModal = false
499
 		this.distributionModal = false
@@ -501,16 +501,16 @@ export class PathologyComponent implements OnInit, OnDestroy {
501
 			document.getElementById('Binput').focus();
501
 			document.getElementById('Binput').focus();
502
 		},200)
502
 		},200)
503
 	}
503
 	}
504
-	
504
+
505
 	changeHospitalInp(e){
505
 	changeHospitalInp(e){
506
 		// this.changeInpSubjectHospital.next([e]);
506
 		// this.changeInpSubjectHospital.next([e]);
507
 	}
507
 	}
508
-	
508
+
509
 	changeDepartmentInp(e){
509
 	changeDepartmentInp(e){
510
 		this.isDeptLoading = true
510
 		this.isDeptLoading = true
511
 		this.changeInpSubjectDepartment.next([e]);
511
 		this.changeInpSubjectDepartment.next([e]);
512
 	}
512
 	}
513
-	
513
+
514
 	// 获取院区
514
 	// 获取院区
515
 	getHospitalData(){
515
 	getHospitalData(){
516
 		let arr = this.tool.getHospitalList().filter(i=>i.parent==undefined)
516
 		let arr = this.tool.getHospitalList().filter(i=>i.parent==undefined)
@@ -528,7 +528,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
528
 		//     this.hospital = res.list;
528
 		//     this.hospital = res.list;
529
 		//   });
529
 		//   });
530
 	}
530
 	}
531
-	
531
+
532
 	// 选择院区
532
 	// 选择院区
533
 	hospitalId:any=null;
533
 	hospitalId:any=null;
534
 	changeHospDate(e){
534
 	changeHospDate(e){
@@ -536,7 +536,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
536
 		this.hospitalId = e
536
 		this.hospitalId = e
537
 		this.getDepartmentData('',e)
537
 		this.getDepartmentData('',e)
538
 	}
538
 	}
539
-	
539
+
540
 	// 获取科室
540
 	// 获取科室
541
 	isDeptLoading:boolean = false;
541
 	isDeptLoading:boolean = false;
542
 	getDepartmentData(e,hospital){
542
 	getDepartmentData(e,hospital){
@@ -559,7 +559,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
559
 			  });
559
 			  });
560
 		});
560
 		});
561
 	}
561
 	}
562
-	
562
+
563
 	// 补打
563
 	// 补打
564
 	printModal:boolean = false;
564
 	printModal:boolean = false;
565
 	parintLoading:boolean = false;
565
 	parintLoading:boolean = false;
@@ -567,7 +567,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
567
 		this.rowData = item
567
 		this.rowData = item
568
 		this.printModal = true
568
 		this.printModal = true
569
 	}
569
 	}
570
-	
570
+
571
 	// 取消补打
571
 	// 取消补打
572
 	hidePrintModal(){
572
 	hidePrintModal(){
573
 		this.printModal = false
573
 		this.printModal = false
@@ -575,7 +575,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
575
 			document.getElementById('Binput').focus();
575
 			document.getElementById('Binput').focus();
576
 		},200)
576
 		},200)
577
 	}
577
 	}
578
-	
578
+
579
 	// 确定补打
579
 	// 确定补打
580
 	confirmPrintDel(){
580
 	confirmPrintDel(){
581
 		this.parintLoading = true
581
 		this.parintLoading = true
@@ -603,9 +603,9 @@ export class PathologyComponent implements OnInit, OnDestroy {
603
 				this.message.error(data.msg)
603
 				this.message.error(data.msg)
604
 			}
604
 			}
605
 		});
605
 		});
606
-		
606
+
607
 	}
607
 	}
608
-	
608
+
609
 	// 接收时间
609
 	// 接收时间
610
 	startDate:any;
610
 	startDate:any;
611
 	endDate:any;
611
 	endDate:any;
@@ -614,12 +614,12 @@ export class PathologyComponent implements OnInit, OnDestroy {
614
 		this.endDate = format(result[1], 'yyyy-MM-dd' +' '+'23:59:59');
614
 		this.endDate = format(result[1], 'yyyy-MM-dd' +' '+'23:59:59');
615
 		this.acceptTime = [this.startDate,this.endDate]
615
 		this.acceptTime = [this.startDate,this.endDate]
616
 	}
616
 	}
617
-	
617
+
618
 	// 获取批次号
618
 	// 获取批次号
619
 	generateBatchNumber(){
619
 	generateBatchNumber(){
620
 
620
 
621
 	}
621
 	}
622
-	
622
+
623
 	// 标本条码搜索
623
 	// 标本条码搜索
624
 	errorcODEMsg:any = null
624
 	errorcODEMsg:any = null
625
 	batchNo:any = null;
625
 	batchNo:any = null;
@@ -657,7 +657,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
657
 				})
657
 				})
658
 			}
658
 			}
659
 		})
659
 		})
660
-		
660
+
661
 	}
661
 	}
662
 	// 获取标本接收数据
662
 	// 获取标本接收数据
663
 	pageReceptionIndex:any = 1;
663
 	pageReceptionIndex:any = 1;
@@ -693,7 +693,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
693
 				this.listReceptionLength = res.totalNum;
693
 				this.listReceptionLength = res.totalNum;
694
 		  });
694
 		  });
695
 	}
695
 	}
696
-	
696
+
697
 	// 确定接收包
697
 	// 确定接收包
698
 	submitReceptionForm(){
698
 	submitReceptionForm(){
699
 		for (const i in this.validateConnectForm.controls) {
699
 		for (const i in this.validateConnectForm.controls) {
@@ -724,7 +724,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
724
 		    }
724
 		    }
725
 		  });
725
 		  });
726
 	}
726
 	}
727
-	
727
+
728
 	// 关闭配送接收
728
 	// 关闭配送接收
729
 	hideReceptionModal(){
729
 	hideReceptionModal(){
730
 		this.receptionModal = false
730
 		this.receptionModal = false
@@ -732,12 +732,12 @@ export class PathologyComponent implements OnInit, OnDestroy {
732
 			document.getElementById('Binput').focus();
732
 			document.getElementById('Binput').focus();
733
 		},200)
733
 		},200)
734
 	}
734
 	}
735
-	
735
+
736
 	// 选择固定时间
736
 	// 选择固定时间
737
 	formChangeDate(result){
737
 	formChangeDate(result){
738
 	  this.startDate = format(result, 'yyyy-MM-dd HH:mm:ss');
738
 	  this.startDate = format(result, 'yyyy-MM-dd HH:mm:ss');
739
 	}
739
 	}
740
-	
740
+
741
 	// 监听人员交接接收人工号输入
741
 	// 监听人员交接接收人工号输入
742
 	connectUserId:any = null;
742
 	connectUserId:any = null;
743
 	receptionName:any = null;
743
 	receptionName:any = null;
@@ -761,7 +761,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
761
 				}
761
 				}
762
 		  });
762
 		  });
763
 	}
763
 	}
764
-	
764
+
765
 	// 监听人员交接配送人工号输入
765
 	// 监听人员交接配送人工号输入
766
 	dispatchingUserId:any = null;
766
 	dispatchingUserId:any = null;
767
 	dispatchingName:any = null;
767
 	dispatchingName:any = null;
@@ -785,7 +785,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
785
 				}
785
 				}
786
 		  });
786
 		  });
787
 	}
787
 	}
788
-	
788
+
789
 	// 确定交接
789
 	// 确定交接
790
 	mustReceived:any = null;
790
 	mustReceived:any = null;
791
 	currReceived:any = null;
791
 	currReceived:any = null;
@@ -811,7 +811,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
811
 				this.dispatchingName = null;
811
 				this.dispatchingName = null;
812
 				this.dispatchingUserId = null
812
 				this.dispatchingUserId = null
813
 			}
813
 			}
814
-			
814
+
815
 			this.receptionName = null;
815
 			this.receptionName = null;
816
 			this.connectUserId = null
816
 			this.connectUserId = null
817
 			this.connectModal = true
817
 			this.connectModal = true
@@ -821,7 +821,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
821
 	hideConnectModal(){
821
 	hideConnectModal(){
822
 		this.connectModal = false
822
 		this.connectModal = false
823
 	}
823
 	}
824
-	
824
+
825
 	// 确定人员交接
825
 	// 确定人员交接
826
 	btnConnectLoading:boolean = false;
826
 	btnConnectLoading:boolean = false;
827
 	submitConnectForm(){
827
 	submitConnectForm(){
@@ -847,21 +847,21 @@ export class PathologyComponent implements OnInit, OnDestroy {
847
 		    }
847
 		    }
848
 		  });
848
 		  });
849
 	}
849
 	}
850
-	
850
+
851
 	// 确定打包
851
 	// 确定打包
852
 	packModal:boolean = false;
852
 	packModal:boolean = false;
853
 	submitScanForm(){
853
 	submitScanForm(){
854
 		this.packModal = true
854
 		this.packModal = true
855
 		// this.hideSpecimenModal()
855
 		// this.hideSpecimenModal()
856
 	}
856
 	}
857
-	
857
+
858
 	// 确定打包并打印
858
 	// 确定打包并打印
859
 	btnPackLoading:boolean = false;
859
 	btnPackLoading:boolean = false;
860
 	printData:any = [];
860
 	printData:any = [];
861
 	submitPackForm(){
861
 	submitPackForm(){
862
 		let that = this
862
 		let that = this
863
 		let data: any = {
863
 		let data: any = {
864
-			
864
+
865
 		};
865
 		};
866
 
866
 
867
 		this.btnPackLoading = true;
867
 		this.btnPackLoading = true;
@@ -889,7 +889,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
889
 				}
889
 				}
890
 		  });
890
 		  });
891
 	}
891
 	}
892
-	
892
+
893
 	// 关闭打包并打印
893
 	// 关闭打包并打印
894
 	hidePackModal(){
894
 	hidePackModal(){
895
 		this.packModal = false
895
 		this.packModal = false
@@ -897,7 +897,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
897
 			document.getElementById('specimen').focus();
897
 			document.getElementById('specimen').focus();
898
 		},200)
898
 		},200)
899
 	}
899
 	}
900
-	
900
+
901
 	// 关闭交接/打包
901
 	// 关闭交接/打包
902
 	hideSpecimenModal(){
902
 	hideSpecimenModal(){
903
 		this.barCode = null;
903
 		this.barCode = null;
@@ -907,7 +907,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
907
 			document.getElementById('Binput').focus();
907
 			document.getElementById('Binput').focus();
908
 		},200)
908
 		},200)
909
 	}
909
 	}
910
-	
910
+
911
 	// 获取标本详情
911
 	// 获取标本详情
912
 	getSampleData(item){
912
 	getSampleData(item){
913
 		// this.isSpinning = true
913
 		// this.isSpinning = true
@@ -928,7 +928,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
928
 			}
928
 			}
929
 		});
929
 		});
930
 	}
930
 	}
931
-	
931
+
932
 	// 获取科室
932
 	// 获取科室
933
 	getDept(){
933
 	getDept(){
934
 		this.setSpecimen()
934
 		this.setSpecimen()
@@ -957,7 +957,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
957
 			  .subscribe((res) => {
957
 			  .subscribe((res) => {
958
 			    that.operationData = res.list;
958
 			    that.operationData = res.list;
959
 			  });
959
 			  });
960
-				
960
+
961
 			that.mainService
961
 			that.mainService
962
 			  .getFetchDataList("data", "department", data2)
962
 			  .getFetchDataList("data", "department", data2)
963
 			  .subscribe((res) => {
963
 			  .subscribe((res) => {
@@ -966,7 +966,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
966
 			  });
966
 			  });
967
 		});
967
 		});
968
 	}
968
 	}
969
-	
969
+
970
 	// 获取关联科室详情
970
 	// 获取关联科室详情
971
 	getDeptDetail(){
971
 	getDeptDetail(){
972
 		this.mainService
972
 		this.mainService
@@ -986,7 +986,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
986
 				}
986
 				}
987
 		  });
987
 		  });
988
 	}
988
 	}
989
-	
989
+
990
 	// 获取是否关联标本间
990
 	// 获取是否关联标本间
991
 	setSpecimen(){
991
 	setSpecimen(){
992
 		this.validateForm = this.fb.group({
992
 		this.validateForm = this.fb.group({
@@ -996,7 +996,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
996
 		});
996
 		});
997
 		this.relevanceModal = true
997
 		this.relevanceModal = true
998
 	}
998
 	}
999
-	
999
+
1000
 	// 确定关联科室
1000
 	// 确定关联科室
1001
 	btnLoading:boolean = false;
1001
 	btnLoading:boolean = false;
1002
 	submitForm(){
1002
 	submitForm(){
@@ -1030,7 +1030,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1030
 		    }
1030
 		    }
1031
 		  });
1031
 		  });
1032
 	}
1032
 	}
1033
-	
1033
+
1034
 	getNewDept(){
1034
 	getNewDept(){
1035
 		let postData = {
1035
 		let postData = {
1036
 		  currentHosId: this.hosId,
1036
 		  currentHosId: this.hosId,
@@ -1056,12 +1056,12 @@ export class PathologyComponent implements OnInit, OnDestroy {
1056
 		  }
1056
 		  }
1057
 		});
1057
 		});
1058
 	}
1058
 	}
1059
-	
1059
+
1060
 	// 获取当前用户信息
1060
 	// 获取当前用户信息
1061
 	getCurrentUserNow() {
1061
 	getCurrentUserNow() {
1062
 	  this.mainService.getCurrentUser1().subscribe((data:any) => {
1062
 	  this.mainService.getCurrentUser1().subscribe((data:any) => {
1063
 	    if (data["status"] == 200) {
1063
 	    if (data["status"] == 200) {
1064
-				this.loginUser = data.data 
1064
+				this.loginUser = data.data
1065
 	      let user = JSON.parse(localStorage.getItem("user"));
1065
 	      let user = JSON.parse(localStorage.getItem("user"));
1066
 	      user.user.dept = data["data"].dept;
1066
 	      user.user.dept = data["data"].dept;
1067
 	      user.user.currentHospital = data["data"].currentHospital;
1067
 	      user.user.currentHospital = data["data"].currentHospital;
@@ -1069,7 +1069,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1069
 	    }
1069
 	    }
1070
 	  });
1070
 	  });
1071
 	}
1071
 	}
1072
-	
1072
+
1073
 	// 输入工号查询姓名
1073
 	// 输入工号查询姓名
1074
 	handoverUserId:any = null;
1074
 	handoverUserId:any = null;
1075
 	numberChange(e){
1075
 	numberChange(e){
@@ -1092,7 +1092,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1092
 				}
1092
 				}
1093
 		  });
1093
 		  });
1094
 	}
1094
 	}
1095
-	
1095
+
1096
 	// 提交固定标本接收
1096
 	// 提交固定标本接收
1097
 	submitVerificationForm(){
1097
 	submitVerificationForm(){
1098
 		for (const i in this.validateVerificationForm.controls) {
1098
 		for (const i in this.validateVerificationForm.controls) {
@@ -1100,7 +1100,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1100
 		  this.validateVerificationForm.controls[i].updateValueAndValidity();
1100
 		  this.validateVerificationForm.controls[i].updateValueAndValidity();
1101
 		}
1101
 		}
1102
 		if (this.validateVerificationForm.invalid) return;
1102
 		if (this.validateVerificationForm.invalid) return;
1103
-		
1103
+
1104
 		let data: any = {
1104
 		let data: any = {
1105
 			id:this.codeData.id,
1105
 			id:this.codeData.id,
1106
 			specimenDeptId:this.validateForm.value.specimen,
1106
 			specimenDeptId:this.validateForm.value.specimen,
@@ -1124,14 +1124,14 @@ export class PathologyComponent implements OnInit, OnDestroy {
1124
 			}
1124
 			}
1125
 		});
1125
 		});
1126
 	}
1126
 	}
1127
-	
1127
+
1128
 	// 成功/失败提示框
1128
 	// 成功/失败提示框
1129
 	closeModel(){
1129
 	closeModel(){
1130
 		this.hideReceptionModal()
1130
 		this.hideReceptionModal()
1131
 		this.hideConnectModal()
1131
 		this.hideConnectModal()
1132
 		this.hideSpecimenModal()
1132
 		this.hideSpecimenModal()
1133
 	}
1133
 	}
1134
-	
1134
+
1135
 	// 关闭配送信息
1135
 	// 关闭配送信息
1136
 	hideVerificationModal(){
1136
 	hideVerificationModal(){
1137
 		this.verificationMoadl = false
1137
 		this.verificationMoadl = false
@@ -1145,13 +1145,13 @@ export class PathologyComponent implements OnInit, OnDestroy {
1145
 		this.businessType = 'connect'
1145
 		this.businessType = 'connect'
1146
 		this.changeInpSubjectSpecimen.next([e]);
1146
 		this.changeInpSubjectSpecimen.next([e]);
1147
 	}
1147
 	}
1148
-	
1148
+
1149
 	// 监听交接/打包扫描条码
1149
 	// 监听交接/打包扫描条码
1150
 	tableLoading:boolean = false;
1150
 	tableLoading:boolean = false;
1151
 	codeChange(e){
1151
 	codeChange(e){
1152
 		this.changeInpSubject.next([e]);
1152
 		this.changeInpSubject.next([e]);
1153
 	}
1153
 	}
1154
-	
1154
+
1155
 	// 标本接收搜索条码
1155
 	// 标本接收搜索条码
1156
 	errorMsg:any = null;
1156
 	errorMsg:any = null;
1157
 	searchSpecimenData(e){
1157
 	searchSpecimenData(e){
@@ -1186,7 +1186,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1186
 			}
1186
 			}
1187
 		})
1187
 		})
1188
 	}
1188
 	}
1189
-	
1189
+
1190
 	// 关闭多只标本
1190
 	// 关闭多只标本
1191
 	hideMultiModal(){
1191
 	hideMultiModal(){
1192
 		this.multiModal = false
1192
 		this.multiModal = false
@@ -1194,7 +1194,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1194
 			document.getElementById('specimen').focus();
1194
 			document.getElementById('specimen').focus();
1195
 		},200)
1195
 		},200)
1196
 	}
1196
 	}
1197
-	
1197
+
1198
 	// 监听多只标本扫描
1198
 	// 监听多只标本扫描
1199
 	codeMultiChange(e){
1199
 	codeMultiChange(e){
1200
 		if(!e){
1200
 		if(!e){
@@ -1223,7 +1223,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1223
 			})
1223
 			})
1224
 		},500)
1224
 		},500)
1225
 	}
1225
 	}
1226
-	
1226
+
1227
 	// 多只标本确定接受
1227
 	// 多只标本确定接受
1228
 	btnMultiLoading:boolean = false;
1228
 	btnMultiLoading:boolean = false;
1229
 	submitMultiForm(){
1229
 	submitMultiForm(){
@@ -1231,7 +1231,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1231
 		this.btnMultiLoading = false
1231
 		this.btnMultiLoading = false
1232
 		this.hideMultiModal()
1232
 		this.hideMultiModal()
1233
 	}
1233
 	}
1234
-	
1234
+
1235
 	pathologyLogs:any=[];
1235
 	pathologyLogs:any=[];
1236
 	specimenList:any=[]
1236
 	specimenList:any=[]
1237
 	stepLength:any = 0;
1237
 	stepLength:any = 0;
@@ -1240,19 +1240,19 @@ export class PathologyComponent implements OnInit, OnDestroy {
1240
 	// 	this.getSampleData(item)
1240
 	// 	this.getSampleData(item)
1241
 	// 	clearInterval(this.logTimer);
1241
 	// 	clearInterval(this.logTimer);
1242
 	// 	if(type==1){
1242
 	// 	if(type==1){
1243
-			
1243
+
1244
 	// 	}else if(type==2){
1244
 	// 	}else if(type==2){
1245
-			
1245
+
1246
 	// 	}else{
1246
 	// 	}else{
1247
-			
1247
+
1248
 	// 	}
1248
 	// 	}
1249
 	// }
1249
 	// }
1250
-	
1250
+
1251
 	closeDetailMoadl(){
1251
 	closeDetailMoadl(){
1252
 		this.detailMoadl = false
1252
 		this.detailMoadl = false
1253
 	}
1253
 	}
1254
-	
1255
- 
1254
+
1255
+
1256
   // 自动刷新倒计时
1256
   // 自动刷新倒计时
1257
   autoUpdate(flag = true) {
1257
   autoUpdate(flag = true) {
1258
     if (flag) {
1258
     if (flag) {
@@ -1278,7 +1278,6 @@ export class PathologyComponent implements OnInit, OnDestroy {
1278
     }
1278
     }
1279
     localStorage.removeItem("user");
1279
     localStorage.removeItem("user");
1280
     localStorage.removeItem("menu");
1280
     localStorage.removeItem("menu");
1281
-    localStorage.removeItem("phones");
1282
     localStorage.removeItem("index");
1281
     localStorage.removeItem("index");
1283
 		localStorage.removeItem("scanCodeData");
1282
 		localStorage.removeItem("scanCodeData");
1284
 		localStorage.removeItem("dataType");
1283
 		localStorage.removeItem("dataType");
@@ -1293,7 +1292,6 @@ export class PathologyComponent implements OnInit, OnDestroy {
1293
         }
1292
         }
1294
         localStorage.removeItem("user");
1293
         localStorage.removeItem("user");
1295
         localStorage.removeItem("menu");
1294
         localStorage.removeItem("menu");
1296
-        localStorage.removeItem("phones");
1297
         localStorage.removeItem("index");
1295
         localStorage.removeItem("index");
1298
 				localStorage.removeItem("scanCodeData");
1296
 				localStorage.removeItem("scanCodeData");
1299
 				localStorage.removeItem("dataType");
1297
 				localStorage.removeItem("dataType");
@@ -1389,7 +1387,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
1389
       }
1387
       }
1390
     }, 1000);
1388
     }, 1000);
1391
   }
1389
   }
1392
-	
1390
+
1393
 	promptModalShow:boolean = false;
1391
 	promptModalShow:boolean = false;
1394
 	promptContent:any = null;
1392
 	promptContent:any = null;
1395
 	ifSuccess:any = null;
1393
 	ifSuccess:any = null;

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

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

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

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

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

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

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

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

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

@@ -47,8 +47,8 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
47
   })
47
   })
48
   osComponentRef5: OverlayScrollbarsComponent;
48
   osComponentRef5: OverlayScrollbarsComponent;
49
   constructor(
49
   constructor(
50
-	private mainService: MainService, 
51
-	public router: Router, 
50
+	private mainService: MainService,
51
+	public router: Router,
52
 	public tool: ToolService,
52
 	public tool: ToolService,
53
 	private fb: FormBuilder,
53
 	private fb: FormBuilder,
54
 	private message: NzMessageService,
54
 	private message: NzMessageService,
@@ -92,7 +92,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
92
   completedFlag = false;
92
   completedFlag = false;
93
   completedSearchKey = "";
93
   completedSearchKey = "";
94
   completedLoad = false;
94
   completedLoad = false;
95
-	
95
+
96
 	barCode:any; //条码搜索
96
 	barCode:any; //条码搜索
97
   // other
97
   // other
98
   loginUser: any = localStorage.getItem("user")
98
   loginUser: any = localStorage.getItem("user")
@@ -113,7 +113,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
113
 	fixationModal:boolean = false //标本接收固定
113
 	fixationModal:boolean = false //标本接收固定
114
 	verificationMoadl:boolean = false //标本核验
114
 	verificationMoadl:boolean = false //标本核验
115
 	specimenCode:any; //标本条码
115
 	specimenCode:any; //标本条码
116
-	listOfData:any=[]; 
116
+	listOfData:any=[];
117
 	fixativeData:any = []; //固体液类型
117
 	fixativeData:any = []; //固体液类型
118
 	hosId:any;
118
 	hosId:any;
119
 	userId:any;
119
 	userId:any;
@@ -161,7 +161,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
161
       this.runTime();
161
       this.runTime();
162
     }, 500);
162
     }, 500);
163
   }
163
   }
164
-	
164
+
165
 	// 标本条码搜索
165
 	// 标本条码搜索
166
 	searchSpecimen(e){
166
 	searchSpecimen(e){
167
 		if(!this.barCode){
167
 		if(!this.barCode){
@@ -199,12 +199,12 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
199
 			}
199
 			}
200
 		})
200
 		})
201
 	}
201
 	}
202
-	
202
+
203
 	// 选择固定时间
203
 	// 选择固定时间
204
 	formChangeDate(result){
204
 	formChangeDate(result){
205
 	  this.startDate = format(result, 'yyyy-MM-dd HH:mm:ss');
205
 	  this.startDate = format(result, 'yyyy-MM-dd HH:mm:ss');
206
 	}
206
 	}
207
-	
207
+
208
 	// 确定接受固定标本
208
 	// 确定接受固定标本
209
 	startDate:any;
209
 	startDate:any;
210
 	submitFixationForm(){
210
 	submitFixationForm(){
@@ -224,7 +224,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
224
 			this.verificationMoadl = true
224
 			this.verificationMoadl = true
225
 		});
225
 		});
226
 	}
226
 	}
227
-	
227
+
228
 	// 关闭接受固定标本
228
 	// 关闭接受固定标本
229
 	hideSpecimenModal(){
229
 	hideSpecimenModal(){
230
 		this.autoUpdate()
230
 		this.autoUpdate()
@@ -236,7 +236,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
236
 			document.getElementById('Binput').focus();
236
 			document.getElementById('Binput').focus();
237
 		},200)
237
 		},200)
238
 	}
238
 	}
239
-	
239
+
240
 	// 获取标本详情
240
 	// 获取标本详情
241
 	project:any = [];
241
 	project:any = [];
242
 	getSampleData(item){
242
 	getSampleData(item){
@@ -256,7 +256,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
256
 		  this.detailMoadl = true
256
 		  this.detailMoadl = true
257
 		});
257
 		});
258
 	}
258
 	}
259
-	
259
+
260
 	// 获取科室
260
 	// 获取科室
261
 	getDept(){
261
 	getDept(){
262
 		this.setSpecimen()
262
 		this.setSpecimen()
@@ -285,7 +285,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
285
 			  .subscribe((res) => {
285
 			  .subscribe((res) => {
286
 			    that.operationData = res.list;
286
 			    that.operationData = res.list;
287
 			  });
287
 			  });
288
-				
288
+
289
 			that.mainService
289
 			that.mainService
290
 			  .getFetchDataList("data", "department", data2)
290
 			  .getFetchDataList("data", "department", data2)
291
 			  .subscribe((res) => {
291
 			  .subscribe((res) => {
@@ -294,7 +294,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
294
 			  });
294
 			  });
295
 		});
295
 		});
296
 	}
296
 	}
297
-	
297
+
298
 	// 获取关联科室详情
298
 	// 获取关联科室详情
299
 	getDeptDetail(){
299
 	getDeptDetail(){
300
 		this.mainService
300
 		this.mainService
@@ -314,7 +314,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
314
 				}
314
 				}
315
 		  });
315
 		  });
316
 	}
316
 	}
317
-	
317
+
318
 	// 获取是否关联标本间
318
 	// 获取是否关联标本间
319
 	setSpecimen(){
319
 	setSpecimen(){
320
 		if(this.validateForm){
320
 		if(this.validateForm){
@@ -332,7 +332,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
332
 		}
332
 		}
333
 		this.relevanceModal = true
333
 		this.relevanceModal = true
334
 	}
334
 	}
335
-	
335
+
336
 	// 确定关联科室
336
 	// 确定关联科室
337
 	btnLoading:boolean = false;
337
 	btnLoading:boolean = false;
338
 	submitForm(){
338
 	submitForm(){
@@ -372,7 +372,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
372
 		    }
372
 		    }
373
 		  });
373
 		  });
374
 	}
374
 	}
375
-	
375
+
376
 	getNewDept(){
376
 	getNewDept(){
377
 		let postData = {
377
 		let postData = {
378
 		  currentHosId: this.hosId,
378
 		  currentHosId: this.hosId,
@@ -398,12 +398,12 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
398
 		  }
398
 		  }
399
 		});
399
 		});
400
 	}
400
 	}
401
-	
401
+
402
 	// 获取当前用户信息
402
 	// 获取当前用户信息
403
 	getCurrentUserNow() {
403
 	getCurrentUserNow() {
404
 	  this.mainService.getCurrentUser1().subscribe((data:any) => {
404
 	  this.mainService.getCurrentUser1().subscribe((data:any) => {
405
 	    if (data["status"] == 200) {
405
 	    if (data["status"] == 200) {
406
-				this.loginUser = data.data 
406
+				this.loginUser = data.data
407
 	      let user = JSON.parse(localStorage.getItem("user"));
407
 	      let user = JSON.parse(localStorage.getItem("user"));
408
 	      user.user.dept = data["data"].dept;
408
 	      user.user.dept = data["data"].dept;
409
 	      user.user.currentHospital = data["data"].currentHospital;
409
 	      user.user.currentHospital = data["data"].currentHospital;
@@ -411,7 +411,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
411
 	    }
411
 	    }
412
 	  });
412
 	  });
413
 	}
413
 	}
414
-	
414
+
415
 	// 输入工号查询姓名
415
 	// 输入工号查询姓名
416
 	handoverUserId:any = null;
416
 	handoverUserId:any = null;
417
 	numberChange(e){
417
 	numberChange(e){
@@ -435,7 +435,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
435
 				}
435
 				}
436
 		  });
436
 		  });
437
 	}
437
 	}
438
-	
438
+
439
 	// 提交固定标本接收
439
 	// 提交固定标本接收
440
 	submitVerificationForm(){
440
 	submitVerificationForm(){
441
 		for (const i in this.validateVerificationForm.controls) {
441
 		for (const i in this.validateVerificationForm.controls) {
@@ -443,7 +443,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
443
 		  this.validateVerificationForm.controls[i].updateValueAndValidity();
443
 		  this.validateVerificationForm.controls[i].updateValueAndValidity();
444
 		}
444
 		}
445
 		if (this.validateVerificationForm.invalid) return;
445
 		if (this.validateVerificationForm.invalid) return;
446
-		
446
+
447
 		let data: any = {
447
 		let data: any = {
448
 			id:this.codeData.id,
448
 			id:this.codeData.id,
449
 			specimenDeptId:this.validateForm.value.specimen,
449
 			specimenDeptId:this.validateForm.value.specimen,
@@ -474,7 +474,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
474
 			}
474
 			}
475
 		});
475
 		});
476
 	}
476
 	}
477
-	
477
+
478
 	closeModel(){
478
 	closeModel(){
479
 		this.verificationMoadl = false
479
 		this.verificationMoadl = false
480
 		this.fixationModal = false
480
 		this.fixationModal = false
@@ -482,7 +482,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
482
 			document.getElementById('Binput').focus();
482
 			document.getElementById('Binput').focus();
483
 		},200)
483
 		},200)
484
 	}
484
 	}
485
-	
485
+
486
 	// 关闭固定接受标本
486
 	// 关闭固定接受标本
487
 	hideVerificationModal(){
487
 	hideVerificationModal(){
488
 		this.verificationMoadl = false
488
 		this.verificationMoadl = false
@@ -490,19 +490,19 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
490
 			document.getElementById('Binput').focus();
490
 			document.getElementById('Binput').focus();
491
 		},200)
491
 		},200)
492
 	}
492
 	}
493
-	
493
+
494
 
494
 
495
 	// 监听标本条码
495
 	// 监听标本条码
496
 	specimenCodeChange(e){
496
 	specimenCodeChange(e){
497
 		this.changeInpSubjectSpecimen.next([e]);
497
 		this.changeInpSubjectSpecimen.next([e]);
498
 	}
498
 	}
499
-	
499
+
500
 	// 监听接受固定标本条码
500
 	// 监听接受固定标本条码
501
 	tableLoading:boolean = false;
501
 	tableLoading:boolean = false;
502
 	codeChange(e){
502
 	codeChange(e){
503
 		this.changeInpSubject.next([e]);
503
 		this.changeInpSubject.next([e]);
504
 	}
504
 	}
505
-	
505
+
506
 	fixationError:any;
506
 	fixationError:any;
507
 	searchSpecimenData(e){
507
 	searchSpecimenData(e){
508
 		if(!e){
508
 		if(!e){
@@ -522,13 +522,13 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
522
 			this.specimenCode = null
522
 			this.specimenCode = null
523
 			if(res.status==200){
523
 			if(res.status==200){
524
 				this.codeData = res.data[0]
524
 				this.codeData = res.data[0]
525
-				this.fixationError = null 
525
+				this.fixationError = null
526
 			}else{
526
 			}else{
527
-				this.fixationError = res.msg 
527
+				this.fixationError = res.msg
528
 			}
528
 			}
529
 		})
529
 		})
530
 	}
530
 	}
531
-	
531
+
532
 	// 查看详情
532
 	// 查看详情
533
 	detailMoadl:boolean = false;
533
 	detailMoadl:boolean = false;
534
 	pathologyLogs:any=[];
534
 	pathologyLogs:any=[];
@@ -539,14 +539,14 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
539
 		this.getSampleData(item)
539
 		this.getSampleData(item)
540
 		clearInterval(this.logTimer);
540
 		clearInterval(this.logTimer);
541
 		if(type==1){
541
 		if(type==1){
542
-			
542
+
543
 		}else if(type==2){
543
 		}else if(type==2){
544
-			
544
+
545
 		}else{
545
 		}else{
546
-			
546
+
547
 		}
547
 		}
548
 	}
548
 	}
549
-	
549
+
550
 	closeDetailMoadl(){
550
 	closeDetailMoadl(){
551
 		setTimeout(_=>{
551
 		setTimeout(_=>{
552
 			document.getElementById('Binput').focus();
552
 			document.getElementById('Binput').focus();
@@ -554,7 +554,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
554
 		this.detailMoadl = false
554
 		this.detailMoadl = false
555
 		this.autoUpdate(false);
555
 		this.autoUpdate(false);
556
 	}
556
 	}
557
-	
557
+
558
   // 统计
558
   // 统计
559
   // total() {
559
   // total() {
560
   //   let launch = JSON.parse(localStorage.getItem("user")).user.dept.id;
560
   //   let launch = JSON.parse(localStorage.getItem("user")).user.dept.id;
@@ -578,7 +578,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
578
   //   console.log(item);
578
   //   console.log(item);
579
   //   this.router.navigateByUrl(`specimenView2/detailSample/${item.id}`);
579
   //   this.router.navigateByUrl(`specimenView2/detailSample/${item.id}`);
580
   // }
580
   // }
581
-	
581
+
582
   // // 查看流程信息弹窗
582
   // // 查看流程信息弹窗
583
   // logPromptModalShow = false; //弹窗开关
583
   // logPromptModalShow = false; //弹窗开关
584
   // scode = ""; //查看记录携带
584
   // scode = ""; //查看记录携带
@@ -815,7 +815,6 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
815
     }
815
     }
816
     localStorage.removeItem("user");
816
     localStorage.removeItem("user");
817
     localStorage.removeItem("menu");
817
     localStorage.removeItem("menu");
818
-    localStorage.removeItem("phones");
819
     localStorage.removeItem("index");
818
     localStorage.removeItem("index");
820
     // 假退出
819
     // 假退出
821
     this.mainService.logOut().subscribe((data) => {
820
     this.mainService.logOut().subscribe((data) => {
@@ -827,7 +826,6 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
827
         }
826
         }
828
         localStorage.removeItem("user");
827
         localStorage.removeItem("user");
829
         localStorage.removeItem("menu");
828
         localStorage.removeItem("menu");
830
-        localStorage.removeItem("phones");
831
         localStorage.removeItem("index");
829
         localStorage.removeItem("index");
832
       }
830
       }
833
     });
831
     });
@@ -914,7 +912,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
914
       }
912
       }
915
     }, 1000);
913
     }, 1000);
916
   }
914
   }
917
-	
915
+
918
 	promptModalShow:boolean = false;
916
 	promptModalShow:boolean = false;
919
 	promptContent:any = null;
917
 	promptContent:any = null;
920
 	ifSuccess:any = null;
918
 	ifSuccess:any = null;

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

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

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

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

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

@@ -55,6 +55,42 @@
55
           <ul class="icon_lists dib-box">
55
           <ul class="icon_lists dib-box">
56
           
56
           
57
             <li class="dib">
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
               <span class="icon icon_transport">&#xe62b;</span>
94
               <span class="icon icon_transport">&#xe62b;</span>
59
                 <div class="name">下载</div>
95
                 <div class="name">下载</div>
60
                 <div class="code-name">&amp;#xe62b;</div>
96
                 <div class="code-name">&amp;#xe62b;</div>
@@ -841,6 +877,12 @@
841
               </li>
877
               </li>
842
           
878
           
843
             <li class="dib">
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
               <span class="icon icon_transport">&#xe633;</span>
886
               <span class="icon icon_transport">&#xe633;</span>
845
                 <div class="name">搜索</div>
887
                 <div class="name">搜索</div>
846
                 <div class="code-name">&amp;#xe633;</div>
888
                 <div class="code-name">&amp;#xe633;</div>
@@ -906,9 +948,9 @@
906
 <pre><code class="language-css"
948
 <pre><code class="language-css"
907
 >@font-face {
949
 >@font-face {
908
   font-family: 'icon_transport';
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
 </code></pre>
955
 </code></pre>
914
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
956
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -935,6 +977,60 @@
935
         <ul class="icon_lists dib-box">
977
         <ul class="icon_lists dib-box">
936
           
978
           
937
           <li class="dib">
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
             <span class="icon icon_transport transport-xiazai"></span>
1034
             <span class="icon icon_transport transport-xiazai"></span>
939
             <div class="name">
1035
             <div class="name">
940
               下载
1036
               下载
@@ -2114,6 +2210,15 @@
2114
           </li>
2210
           </li>
2115
           
2211
           
2116
           <li class="dib">
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
             <span class="icon icon_transport transport-sousuo"></span>
2222
             <span class="icon icon_transport transport-sousuo"></span>
2118
             <div class="name">
2223
             <div class="name">
2119
               搜索
2224
               搜索
@@ -2214,6 +2319,54 @@
2214
           
2319
           
2215
             <li class="dib">
2320
             <li class="dib">
2216
                 <svg class="icon svg-icon" aria-hidden="true">
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
                   <use xlink:href="#transport-xiazai"></use>
2370
                   <use xlink:href="#transport-xiazai"></use>
2218
                 </svg>
2371
                 </svg>
2219
                 <div class="name">下载</div>
2372
                 <div class="name">下载</div>
@@ -3262,6 +3415,14 @@
3262
           
3415
           
3263
             <li class="dib">
3416
             <li class="dib">
3264
                 <svg class="icon svg-icon" aria-hidden="true">
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
                   <use xlink:href="#transport-sousuo"></use>
3426
                   <use xlink:href="#transport-sousuo"></use>
3266
                 </svg>
3427
                 </svg>
3267
                 <div class="name">搜索</div>
3428
                 <div class="name">搜索</div>

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

@@ -1,8 +1,8 @@
1
 @font-face {
1
 @font-face {
2
   font-family: "icon_transport"; /* Project id 4543613 */
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
 .icon_transport {
8
 .icon_transport {
@@ -13,6 +13,30 @@
13
   -moz-osx-font-smoothing: grayscale;
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
 .transport-xiazai:before {
40
 .transport-xiazai:before {
17
   content: "\e62b";
41
   content: "\e62b";
18
 }
42
 }
@@ -537,6 +561,10 @@
537
   content: "\ea66";
561
   content: "\ea66";
538
 }
562
 }
539
 
563
 
564
+.transport-gengduoda-copy:before {
565
+  content: "\eeed";
566
+}
567
+
540
 .transport-sousuo:before {
568
 .transport-sousuo:before {
541
   content: "\e633";
569
   content: "\e633";
542
 }
570
 }

+ 0 - 0
src/assets/iconfont/iconfont.js


Some files were not shown because too many files changed in this diff