seimin 3 anni fa
parent
commit
394b2644b8
6 ha cambiato i file con 506 aggiunte e 55 eliminazioni
  1. 266 0
      package-lock.json
  2. 4 1
      package.json
  3. 190 52
      src/views/AppIndex.vue
  4. 8 0
      upload/config.js
  5. 36 0
      upload/index.js
  6. 2 2
      vue.config.js

+ 266 - 0
package-lock.json

@@ -1054,6 +1054,17 @@
1054 1054
         "to-fast-properties": "^2.0.0"
1055 1055
       }
1056 1056
     },
1057
+    "@dabh/diagnostics": {
1058
+      "version": "2.0.2",
1059
+      "resolved": "https://registry.nlark.com/@dabh/diagnostics/download/@dabh/diagnostics-2.0.2.tgz",
1060
+      "integrity": "sha1-KQ0I97OBuPlGB9yPRxoSxnX52zE=",
1061
+      "dev": true,
1062
+      "requires": {
1063
+        "colorspace": "1.1.x",
1064
+        "enabled": "2.0.x",
1065
+        "kuler": "^2.0.0"
1066
+      }
1067
+    },
1057 1068
     "@hapi/address": {
1058 1069
       "version": "2.1.4",
1059 1070
       "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz?cache=0&sync_timestamp=1593993745797&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Faddress%2Fdownload%2F%40hapi%2Faddress-2.1.4.tgz",
@@ -3464,6 +3475,34 @@
3464 3475
       "integrity": "sha1-TQuSEyXBT6+SYzCGpTbbbolWSxs=",
3465 3476
       "dev": true
3466 3477
     },
3478
+    "colors": {
3479
+      "version": "1.4.0",
3480
+      "resolved": "https://registry.nlark.com/colors/download/colors-1.4.0.tgz",
3481
+      "integrity": "sha1-xQSRR51MG9rtLJztMs98fcI2D3g=",
3482
+      "dev": true
3483
+    },
3484
+    "colorspace": {
3485
+      "version": "1.1.2",
3486
+      "resolved": "https://registry.npm.taobao.org/colorspace/download/colorspace-1.1.2.tgz",
3487
+      "integrity": "sha1-4BKJUNCCuGohaFgHlqCqXWxo2MU=",
3488
+      "dev": true,
3489
+      "requires": {
3490
+        "color": "3.0.x",
3491
+        "text-hex": "1.0.x"
3492
+      },
3493
+      "dependencies": {
3494
+        "color": {
3495
+          "version": "3.0.0",
3496
+          "resolved": "https://registry.nlark.com/color/download/color-3.0.0.tgz?cache=0&sync_timestamp=1628104117021&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcolor%2Fdownload%2Fcolor-3.0.0.tgz",
3497
+          "integrity": "sha1-2SC0Mo1TSjrIKV1o971LpsQnvpo=",
3498
+          "dev": true,
3499
+          "requires": {
3500
+            "color-convert": "^1.9.1",
3501
+            "color-string": "^1.5.2"
3502
+          }
3503
+        }
3504
+      }
3505
+    },
3467 3506
     "combined-stream": {
3468 3507
       "version": "1.0.8",
3469 3508
       "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
@@ -4617,6 +4656,12 @@
4617 4656
       "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
4618 4657
       "dev": true
4619 4658
     },
4659
+    "enabled": {
4660
+      "version": "2.0.0",
4661
+      "resolved": "https://registry.nlark.com/enabled/download/enabled-2.0.0.tgz",
4662
+      "integrity": "sha1-+d2S7C1vS7wNXR5k4h1hzUZl58I=",
4663
+      "dev": true
4664
+    },
4620 4665
     "encodeurl": {
4621 4666
       "version": "1.0.2",
4622 4667
       "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
@@ -4661,6 +4706,12 @@
4661 4706
       "integrity": "sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=",
4662 4707
       "dev": true
4663 4708
     },
4709
+    "err-code": {
4710
+      "version": "2.0.3",
4711
+      "resolved": "https://registry.nlark.com/err-code/download/err-code-2.0.3.tgz",
4712
+      "integrity": "sha1-I8Lzt1b/38YI0w4nyalBAkgH5/k=",
4713
+      "dev": true
4714
+    },
4664 4715
     "errno": {
4665 4716
       "version": "0.1.7",
4666 4717
       "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz",
@@ -5293,6 +5344,12 @@
5293 5344
       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
5294 5345
       "dev": true
5295 5346
     },
5347
+    "fast-safe-stringify": {
5348
+      "version": "2.0.8",
5349
+      "resolved": "https://registry.nlark.com/fast-safe-stringify/download/fast-safe-stringify-2.0.8.tgz",
5350
+      "integrity": "sha1-3Cr0jEbPcStoPoSbK71EazLek28=",
5351
+      "dev": true
5352
+    },
5296 5353
     "faye-websocket": {
5297 5354
       "version": "0.10.0",
5298 5355
       "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz",
@@ -5302,6 +5359,12 @@
5302 5359
         "websocket-driver": ">=0.5.1"
5303 5360
       }
5304 5361
     },
5362
+    "fecha": {
5363
+      "version": "4.2.1",
5364
+      "resolved": "https://registry.nlark.com/fecha/download/fecha-4.2.1.tgz",
5365
+      "integrity": "sha1-CoOtj4bvYqCR4iu1oDnNA9I+7M4=",
5366
+      "dev": true
5367
+    },
5305 5368
     "figgy-pudding": {
5306 5369
       "version": "3.5.2",
5307 5370
       "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz",
@@ -5462,6 +5525,12 @@
5462 5525
         "readable-stream": "^2.3.6"
5463 5526
       }
5464 5527
     },
5528
+    "fn.name": {
5529
+      "version": "1.1.0",
5530
+      "resolved": "https://registry.nlark.com/fn.name/download/fn.name-1.1.0.tgz",
5531
+      "integrity": "sha1-JsrYAXlnrqhzG8QpYdBKPVmIrMw=",
5532
+      "dev": true
5533
+    },
5465 5534
     "follow-redirects": {
5466 5535
       "version": "1.13.0",
5467 5536
       "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz",
@@ -6338,6 +6407,12 @@
6338 6407
         }
6339 6408
       }
6340 6409
     },
6410
+    "interpret": {
6411
+      "version": "1.4.0",
6412
+      "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.4.0.tgz",
6413
+      "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=",
6414
+      "dev": true
6415
+    },
6341 6416
     "invariant": {
6342 6417
       "version": "2.2.4",
6343 6418
       "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finvariant%2Fdownload%2Finvariant-2.2.4.tgz",
@@ -6844,6 +6919,12 @@
6844 6919
       "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
6845 6920
       "dev": true
6846 6921
     },
6922
+    "kuler": {
6923
+      "version": "2.0.0",
6924
+      "resolved": "https://registry.nlark.com/kuler/download/kuler-2.0.0.tgz",
6925
+      "integrity": "sha1-4sVwo4ADiPtEQH6FFTHB1nCwYbM=",
6926
+      "dev": true
6927
+    },
6847 6928
     "launch-editor": {
6848 6929
       "version": "2.2.1",
6849 6930
       "resolved": "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz",
@@ -7085,6 +7166,19 @@
7085 7166
         "chalk": "^2.0.1"
7086 7167
       }
7087 7168
     },
7169
+    "logform": {
7170
+      "version": "2.2.0",
7171
+      "resolved": "https://registry.npm.taobao.org/logform/download/logform-2.2.0.tgz",
7172
+      "integrity": "sha1-QPA20ZFh/Ha2irUP3H/klVREkvI=",
7173
+      "dev": true,
7174
+      "requires": {
7175
+        "colors": "^1.2.1",
7176
+        "fast-safe-stringify": "^2.0.4",
7177
+        "fecha": "^4.2.0",
7178
+        "ms": "^2.1.1",
7179
+        "triple-beam": "^1.3.0"
7180
+      }
7181
+    },
7088 7182
     "loglevel": {
7089 7183
       "version": "1.7.0",
7090 7184
       "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.0.tgz",
@@ -7887,6 +7981,15 @@
7887 7981
         "wrappy": "1"
7888 7982
       }
7889 7983
     },
7984
+    "one-time": {
7985
+      "version": "1.0.0",
7986
+      "resolved": "https://registry.nlark.com/one-time/download/one-time-1.0.0.tgz",
7987
+      "integrity": "sha1-4GvBdK7SFO1Y7e3lc7Qzu/gny0U=",
7988
+      "dev": true,
7989
+      "requires": {
7990
+        "fn.name": "1.x.x"
7991
+      }
7992
+    },
7890 7993
     "onetime": {
7891 7994
       "version": "2.0.1",
7892 7995
       "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz",
@@ -8924,6 +9027,16 @@
8924 9027
       "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
8925 9028
       "dev": true
8926 9029
     },
9030
+    "promise-retry": {
9031
+      "version": "2.0.1",
9032
+      "resolved": "https://registry.npm.taobao.org/promise-retry/download/promise-retry-2.0.1.tgz",
9033
+      "integrity": "sha1-/3R6E2IKtXumiPX8Z4VUEMNw2iI=",
9034
+      "dev": true,
9035
+      "requires": {
9036
+        "err-code": "^2.0.2",
9037
+        "retry": "^0.12.0"
9038
+      }
9039
+    },
8927 9040
     "proxy-addr": {
8928 9041
       "version": "2.0.6",
8929 9042
       "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
@@ -9127,6 +9240,15 @@
9127 9240
         "picomatch": "^2.2.1"
9128 9241
       }
9129 9242
     },
9243
+    "rechoir": {
9244
+      "version": "0.6.2",
9245
+      "resolved": "https://registry.nlark.com/rechoir/download/rechoir-0.6.2.tgz?cache=0&sync_timestamp=1627101677944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frechoir%2Fdownload%2Frechoir-0.6.2.tgz",
9246
+      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
9247
+      "dev": true,
9248
+      "requires": {
9249
+        "resolve": "^1.1.6"
9250
+      }
9251
+    },
9130 9252
     "regenerate": {
9131 9253
       "version": "1.4.1",
9132 9254
       "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz",
@@ -9736,6 +9858,17 @@
9736 9858
       "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=",
9737 9859
       "dev": true
9738 9860
     },
9861
+    "shelljs": {
9862
+      "version": "0.8.4",
9863
+      "resolved": "https://registry.nlark.com/shelljs/download/shelljs-0.8.4.tgz",
9864
+      "integrity": "sha1-3naE/ut2f4cWsyYHiooAh1iQ48I=",
9865
+      "dev": true,
9866
+      "requires": {
9867
+        "glob": "^7.0.0",
9868
+        "interpret": "^1.0.0",
9869
+        "rechoir": "^0.6.2"
9870
+      }
9871
+    },
9739 9872
     "signal-exit": {
9740 9873
       "version": "3.0.3",
9741 9874
       "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz",
@@ -10096,6 +10229,63 @@
10096 10229
       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
10097 10230
       "dev": true
10098 10231
     },
10232
+    "ssh2": {
10233
+      "version": "0.8.9",
10234
+      "resolved": "https://registry.nlark.com/ssh2/download/ssh2-0.8.9.tgz",
10235
+      "integrity": "sha1-VNo6bEuj2vDYR3pTikgTJgkYFfM=",
10236
+      "dev": true,
10237
+      "requires": {
10238
+        "ssh2-streams": "~0.4.10"
10239
+      }
10240
+    },
10241
+    "ssh2-sftp-client": {
10242
+      "version": "6.0.1",
10243
+      "resolved": "https://registry.nlark.com/ssh2-sftp-client/download/ssh2-sftp-client-6.0.1.tgz",
10244
+      "integrity": "sha1-zZAaz9UwPsXaDhBDbV3EhPNORkw=",
10245
+      "dev": true,
10246
+      "requires": {
10247
+        "concat-stream": "^2.0.0",
10248
+        "promise-retry": "^2.0.1",
10249
+        "ssh2": "^0.8.9",
10250
+        "winston": "^3.3.3"
10251
+      },
10252
+      "dependencies": {
10253
+        "concat-stream": {
10254
+          "version": "2.0.0",
10255
+          "resolved": "https://registry.nlark.com/concat-stream/download/concat-stream-2.0.0.tgz",
10256
+          "integrity": "sha1-QUz1r3kKSMYKub5FJ9VtXkETPLE=",
10257
+          "dev": true,
10258
+          "requires": {
10259
+            "buffer-from": "^1.0.0",
10260
+            "inherits": "^2.0.3",
10261
+            "readable-stream": "^3.0.2",
10262
+            "typedarray": "^0.0.6"
10263
+          }
10264
+        },
10265
+        "readable-stream": {
10266
+          "version": "3.6.0",
10267
+          "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz",
10268
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
10269
+          "dev": true,
10270
+          "requires": {
10271
+            "inherits": "^2.0.3",
10272
+            "string_decoder": "^1.1.1",
10273
+            "util-deprecate": "^1.0.1"
10274
+          }
10275
+        }
10276
+      }
10277
+    },
10278
+    "ssh2-streams": {
10279
+      "version": "0.4.10",
10280
+      "resolved": "https://registry.npm.taobao.org/ssh2-streams/download/ssh2-streams-0.4.10.tgz",
10281
+      "integrity": "sha1-SO9+ig452PKSHDBSHVbayzHSOjQ=",
10282
+      "dev": true,
10283
+      "requires": {
10284
+        "asn1": "~0.2.0",
10285
+        "bcrypt-pbkdf": "^1.0.2",
10286
+        "streamsearch": "~0.1.2"
10287
+      }
10288
+    },
10099 10289
     "sshpk": {
10100 10290
       "version": "1.16.1",
10101 10291
       "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz",
@@ -10128,6 +10318,12 @@
10128 10318
       "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=",
10129 10319
       "dev": true
10130 10320
     },
10321
+    "stack-trace": {
10322
+      "version": "0.0.10",
10323
+      "resolved": "https://registry.nlark.com/stack-trace/download/stack-trace-0.0.10.tgz?cache=0&sync_timestamp=1620387770510&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstack-trace%2Fdownload%2Fstack-trace-0.0.10.tgz",
10324
+      "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
10325
+      "dev": true
10326
+    },
10131 10327
     "stackframe": {
10132 10328
       "version": "1.2.0",
10133 10329
       "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz?cache=0&sync_timestamp=1590854148142&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-1.2.0.tgz",
@@ -10200,6 +10396,12 @@
10200 10396
       "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=",
10201 10397
       "dev": true
10202 10398
     },
10399
+    "streamsearch": {
10400
+      "version": "0.1.2",
10401
+      "resolved": "https://registry.nlark.com/streamsearch/download/streamsearch-0.1.2.tgz",
10402
+      "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
10403
+      "dev": true
10404
+    },
10203 10405
     "strict-uri-encode": {
10204 10406
       "version": "1.1.0",
10205 10407
       "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz",
@@ -10496,6 +10698,12 @@
10496 10698
         }
10497 10699
       }
10498 10700
     },
10701
+    "text-hex": {
10702
+      "version": "1.0.0",
10703
+      "resolved": "https://registry.npm.taobao.org/text-hex/download/text-hex-1.0.0.tgz",
10704
+      "integrity": "sha1-adycGxdEbueakr9biEu0uRJ1BvU=",
10705
+      "dev": true
10706
+    },
10499 10707
     "text-table": {
10500 10708
       "version": "0.2.0",
10501 10709
       "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz",
@@ -10653,6 +10861,12 @@
10653 10861
         "punycode": "^2.1.1"
10654 10862
       }
10655 10863
     },
10864
+    "triple-beam": {
10865
+      "version": "1.3.0",
10866
+      "resolved": "https://registry.nlark.com/triple-beam/download/triple-beam-1.3.0.tgz",
10867
+      "integrity": "sha1-pZUhTHKY24M57u7gg+TRC9jLjdk=",
10868
+      "dev": true
10869
+    },
10656 10870
     "tryer": {
10657 10871
       "version": "1.0.1",
10658 10872
       "resolved": "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz",
@@ -11885,6 +12099,58 @@
11885 12099
       "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
11886 12100
       "dev": true
11887 12101
     },
12102
+    "winston": {
12103
+      "version": "3.3.3",
12104
+      "resolved": "https://registry.npm.taobao.org/winston/download/winston-3.3.3.tgz",
12105
+      "integrity": "sha1-rmFyBCyvspeGr6PQnI/4M6t8kXA=",
12106
+      "dev": true,
12107
+      "requires": {
12108
+        "@dabh/diagnostics": "^2.0.2",
12109
+        "async": "^3.1.0",
12110
+        "is-stream": "^2.0.0",
12111
+        "logform": "^2.2.0",
12112
+        "one-time": "^1.0.0",
12113
+        "readable-stream": "^3.4.0",
12114
+        "stack-trace": "0.0.x",
12115
+        "triple-beam": "^1.3.0",
12116
+        "winston-transport": "^4.4.0"
12117
+      },
12118
+      "dependencies": {
12119
+        "async": {
12120
+          "version": "3.2.1",
12121
+          "resolved": "https://registry.nlark.com/async/download/async-3.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fasync%2Fdownload%2Fasync-3.2.1.tgz",
12122
+          "integrity": "sha1-0ydOxm0QekdHakxJE2qs2wBmX8g=",
12123
+          "dev": true
12124
+        },
12125
+        "is-stream": {
12126
+          "version": "2.0.1",
12127
+          "resolved": "https://registry.nlark.com/is-stream/download/is-stream-2.0.1.tgz?cache=0&sync_timestamp=1628592752355&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-stream%2Fdownload%2Fis-stream-2.0.1.tgz",
12128
+          "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=",
12129
+          "dev": true
12130
+        },
12131
+        "readable-stream": {
12132
+          "version": "3.6.0",
12133
+          "resolved": "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz",
12134
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
12135
+          "dev": true,
12136
+          "requires": {
12137
+            "inherits": "^2.0.3",
12138
+            "string_decoder": "^1.1.1",
12139
+            "util-deprecate": "^1.0.1"
12140
+          }
12141
+        }
12142
+      }
12143
+    },
12144
+    "winston-transport": {
12145
+      "version": "4.4.0",
12146
+      "resolved": "https://registry.npm.taobao.org/winston-transport/download/winston-transport-4.4.0.tgz",
12147
+      "integrity": "sha1-F69RjappDVsuzMqnrPeyDKeSXlk=",
12148
+      "dev": true,
12149
+      "requires": {
12150
+        "readable-stream": "^2.3.7",
12151
+        "triple-beam": "^1.2.0"
12152
+      }
12153
+    },
11888 12154
     "word-wrap": {
11889 12155
       "version": "1.2.3",
11890 12156
       "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz",

+ 4 - 1
package.json

@@ -5,7 +5,8 @@
5 5
   "scripts": {
6 6
     "start": "vue-cli-service serve",
7 7
     "build": "vue-cli-service build",
8
-    "lint": "vue-cli-service lint"
8
+    "lint": "vue-cli-service lint",
9
+    "upload": "node ./upload/index.js"
9 10
   },
10 11
   "dependencies": {
11 12
     "axios": "^0.20.0",
@@ -24,6 +25,8 @@
24 25
     "eslint-plugin-vue": "^6.2.2",
25 26
     "less": "^3.0.4",
26 27
     "less-loader": "^5.0.0",
28
+    "shelljs": "^0.8.4",
29
+    "ssh2-sftp-client": "^6.0.1",
27 30
     "vue-template-compiler": "^2.6.11"
28 31
   }
29 32
 }

+ 190 - 52
src/views/AppIndex.vue

@@ -78,10 +78,10 @@
78 78
         style="position: relative"
79 79
         v-show="
80 80
           (!loading1 && !loading5 && currentNavIndex == 1) ||
81
-          (!loading2 && !loading5 && !loading10 && currentNavIndex == 2) ||
82
-          (!loading4 && !loading5 && !loading10 && currentNavIndex == 3) ||
83
-          (!loading5 && !loading6 && currentNavIndex == 4) ||
84
-          (!loading5 && !loading9 && currentNavIndex == 5)
81
+            (!loading2 && !loading5 && !loading10 && currentNavIndex == 2) ||
82
+            (!loading4 && !loading5 && !loading10 && currentNavIndex == 3) ||
83
+            (!loading5 && !loading6 && currentNavIndex == 4) ||
84
+            (!loading5 && !loading9 && currentNavIndex == 5)
85 85
         "
86 86
       >
87 87
         <!-- 科室标本视图 -->
@@ -132,9 +132,9 @@
132 132
           class="cot_img"
133 133
           v-show="
134 134
             currentNavIndex == 1 &&
135
-            swiperList.length == 0 &&
136
-            !loading1 &&
137
-            !loading5
135
+              swiperList.length == 0 &&
136
+              !loading1 &&
137
+              !loading5
138 138
           "
139 139
         >
140 140
           <span>暂无数据</span>
@@ -163,7 +163,12 @@
163 163
             <div class="cot_all" v-for="(worke, i) in workerMessage" :key="i">
164 164
               <div class="cot sevenCol" v-for="data in worke" :key="data.id">
165 165
                 <div class="first">
166
-                  <span>{{ data.name }}</span>
166
+                  <div class="first_first">
167
+                    <span>{{ data.name }}</span>
168
+                    <span v-if="data.phone" class="first_firstPhone"
169
+                      >({{ data.phone }})</span
170
+                    >
171
+                  </div>
167 172
                   <span>累计{{ data.totalCount }}单</span>
168 173
                   <span
169 174
                     class="times imptime"
@@ -196,10 +201,10 @@
196 201
           class="cot_img"
197 202
           v-show="
198 203
             currentNavIndex == 2 &&
199
-            workerMessage.length == 0 &&
200
-            !loading2 &&
201
-            !loading5 &&
202
-            !loading10
204
+              workerMessage.length == 0 &&
205
+              !loading2 &&
206
+              !loading5 &&
207
+              !loading10
203 208
           "
204 209
         >
205 210
           <span>暂无数据</span>
@@ -259,10 +264,10 @@
259 264
           class="cot_img"
260 265
           v-show="
261 266
             currentNavIndex == 3 &&
262
-            onlines.length == 0 &&
263
-            !loading4 &&
264
-            !loading5 &&
265
-            !loading10
267
+              onlines.length == 0 &&
268
+              !loading4 &&
269
+              !loading5 &&
270
+              !loading10
266 271
           "
267 272
         >
268 273
           <span>暂无数据</span>
@@ -293,7 +298,10 @@
293 298
               <div class="main-box-item-header pp">
294 299
                 <h2 :title="item.name">{{ item.name }}</h2>
295 300
                 <div>{{ item.gdjczs }}</div>
296
-                <strong>{{ item.userName ? item.userName : "" }}</strong>
301
+                <strong
302
+                  >{{ item.userName ? item.userName : ""
303
+                  }}<span>{{ item.phone ? item.phone : "" }}</span></strong
304
+                >
297 305
               </div>
298 306
               <div class="main-box-item-content">
299 307
                 <div
@@ -309,7 +317,7 @@
309 317
                 </div>
310 318
                 <div class="main-box-item-contentBox green">
311 319
                   <h3>{{ item.gdnum }}</h3>
312
-                  <p>转总数</p>
320
+                  <p>转总数</p>
313 321
                 </div>
314 322
               </div>
315 323
             </div>
@@ -319,9 +327,9 @@
319 327
           class="cot_img"
320 328
           v-show="
321 329
             currentNavIndex == 4 &&
322
-            parentList.length == 0 &&
323
-            !loading5 &&
324
-            !loading6
330
+              parentList.length == 0 &&
331
+              !loading5 &&
332
+              !loading6
325 333
           "
326 334
         >
327 335
           <span>暂无数据</span>
@@ -361,9 +369,9 @@
361 369
           class="cot_img"
362 370
           v-show="
363 371
             currentNavIndex == 5 &&
364
-            drugList.length == 0 &&
365
-            !loading5 &&
366
-            !loading9
372
+              drugList.length == 0 &&
373
+              !loading5 &&
374
+              !loading9
367 375
           "
368 376
         >
369 377
           <span>暂无数据</span>
@@ -374,10 +382,10 @@
374 382
         class="main loading"
375 383
         v-show="
376 384
           ((loading1 || loading5) && currentNavIndex == 1) ||
377
-          ((loading2 || loading5 || loading10) && currentNavIndex == 2) ||
378
-          ((loading4 || loading5 || loading10) && currentNavIndex == 3) ||
379
-          ((loading5 || loading6) && currentNavIndex == 4) ||
380
-          ((loading5 || loading9) && currentNavIndex == 5)
385
+            ((loading2 || loading5 || loading10) && currentNavIndex == 2) ||
386
+            ((loading4 || loading5 || loading10) && currentNavIndex == 3) ||
387
+            ((loading5 || loading6) && currentNavIndex == 4) ||
388
+            ((loading5 || loading9) && currentNavIndex == 5)
381 389
         "
382 390
       >
383 391
         <img src="./../assets/images/loading.gif" alt="" />
@@ -447,7 +455,23 @@
447 455
       <!-- 标本科室视图弹层 -->
448 456
       <div v-if="detailModel" :class="{ detailModel }">
449 457
         <div class="box">
450
-          <h2 class="title">未取标本详情</h2>
458
+          <h2 class="title">
459
+            <div class="operateTitle">
460
+              标本详情
461
+              <div class="operate">
462
+                <label>
463
+                  <input type="checkbox" value="332" v-model="speState" /><span
464
+                    >未收取</span
465
+                  >
466
+                </label>
467
+                <label>
468
+                  <input type="checkbox" value="333" v-model="speState" /><span
469
+                    >已收取</span
470
+                  >
471
+                </label>
472
+              </div>
473
+            </div>
474
+          </h2>
451 475
           <div class="table">
452 476
             <div class="table-content">
453 477
               <table>
@@ -460,6 +484,7 @@
460 484
                     <th>床号</th>
461 485
                     <th>采集时间</th>
462 486
                     <th>目标科室</th>
487
+                    <th>收取人</th>
463 488
                   </tr>
464 489
                 </thead>
465 490
                 <tbody>
@@ -489,8 +514,10 @@
489 514
                           }"
490 515
                         ></div>
491 516
                       </td>
517
+                      <td>{{ detail.receiver || "-" }}</td>
492 518
                     </tr>
493 519
                   </vueCustomScrollbar>
520
+
494 521
                   <div
495 522
                     style="font-size: 18px"
496 523
                     v-if="!detailList.length && !loading3"
@@ -547,6 +574,7 @@
547 574
                       </td>
548 575
                     </tr>
549 576
                   </vueCustomScrollbar>
577
+
550 578
                   <div
551 579
                     style="font-size: 18px"
552 580
                     v-if="!detailParentList.length && !loading7"
@@ -578,24 +606,39 @@
578 606
         class="detailModelParent"
579 607
       >
580 608
         <div class="box" style="width: 1274px">
581
-          <h2 class="title">患者检查详情</h2>
609
+          <h2 class="title">
610
+            <div class="operateTitle">
611
+              患者检查详情
612
+              <div class="operate">
613
+                <label>
614
+                  <input type="radio" value="666" v-model="inspectState" /><span
615
+                    >所有检查</span
616
+                  >
617
+                </label>
618
+                <label>
619
+                  <input type="radio" value="307" v-model="inspectState" /><span
620
+                    >待检查</span
621
+                  >
622
+                </label>
623
+              </div>
624
+            </div>
625
+          </h2>
582 626
           <div class="table" style="width: 1234px">
583 627
             <div class="table-content" style="width: 1170px">
584 628
               <table>
585 629
                 <thead>
586 630
                   <tr>
587 631
                     <th>序号</th>
588
-                    <th style="width: 100px !important">患者姓名</th>
589
-                    <th>患者编码</th>
590
-                    <th style="width: 50px !important">床号</th>
632
+                    <th style="width: 150px !important">患者姓名(床号)</th>
591 633
                     <th>检查项目</th>
592 634
                     <th>预约时间</th>
593 635
                     <th>叫号信息</th>
594
-                    <th>到达时间</th>
595 636
                     <th>检查科室</th>
637
+                    <th style="width: 70px !important">是否建单</th>
596 638
                     <th style="width: 70px !important">是否送达</th>
639
+                    <th>送达时间</th>
597 640
                     <th style="width: 70px !important">检查状态</th>
598
-                    <th style="width: 70px !important">是否建单</th>
641
+                    <th>陪检人</th>
599 642
                   </tr>
600 643
                 </thead>
601 644
                 <tbody>
@@ -610,37 +653,36 @@
610 653
                     >
611 654
                       <td>{{ i + 1 }}</td>
612 655
                       <td
613
-                        style="width: 100px !important"
656
+                        style="width: 150px !important"
614 657
                         :style="{
615 658
                           color: detail.focusPatient == 1 ? 'red' : '',
616 659
                         }"
617 660
                       >
618 661
                         {{ detail.patientName || "-" }}
619
-                      </td>
620
-                      <td>{{ detail.patientCode || "-" }}</td>
621
-                      <td style="width: 50px !important">
622
-                        {{ detail.bedNum || "-" }}
662
+                        <span v-if="detail.bedNum">({{ detail.bedNum }})</span>
623 663
                       </td>
624 664
                       <td>{{ detail.inspectName || "-" }}</td>
625 665
                       <td>{{ detail.yyTime || "-" }}</td>
626 666
                       <td>{{ detail.reservationNumber || "-" }}</td>
627
-                      <td>{{ detail.arriveTime || "-" }}</td>
628 667
                       <td>
629 668
                         {{ detail.execDept ? detail.execDept.dept : "-" }}
630 669
                       </td>
631 670
                       <td style="width: 70px !important">
671
+                        {{ detail.gdId ? "是" : "否" }}
672
+                      </td>
673
+                      <td style="width: 70px !important">
632 674
                         {{ detail.arriveTime ? "是" : "否" }}
633 675
                       </td>
676
+                      <td>{{ detail.arriveTime || "-" }}</td>
634 677
                       <td style="width: 70px !important">
635 678
                         {{
636 679
                           detail.inspectState ? detail.inspectState.name : "-"
637 680
                         }}
638 681
                       </td>
639
-                      <td style="width: 70px !important">
640
-                        {{ detail.gdId ? "是" : "否" }}
641
-                      </td>
682
+                      <td></td>
642 683
                     </tr>
643 684
                   </vueCustomScrollbar>
685
+
644 686
                   <div
645 687
                     style="font-size: 18px"
646 688
                     v-if="!detailSpeList.length && !loading8"
@@ -692,7 +734,7 @@ export default {
692 734
     showModel,
693 735
   },
694 736
   filters: {
695
-    length6: function (value) {
737
+    length6: function(value) {
696 738
       return value.slice(0, 6);
697 739
     },
698 740
   },
@@ -782,8 +824,26 @@ export default {
782 824
       groupId3: 0,
783 825
       // 1是综合排班,2是自选排班
784 826
       workType: 0,
827
+      //科室标本的标本详情 332是未收取 333是已收取
828
+      speState: [],
829
+      //科室标本,当前选中的科室
830
+      currentSpecimenDept: null,
831
+      //病房患者的标本详情 307是待检查
832
+      inspectState: "",
833
+      //病房患者,当前选中的科室
834
+      currentInspectDept: null,
785 835
     };
786 836
   },
837
+  watch: {
838
+    //科室标本的标本详情,已收取,未收取
839
+    speState() {
840
+      this.getDetailBySpecimen(this.currentSpecimenDept);
841
+    },
842
+    //病房患者的检查详情
843
+    inspectState() {
844
+      this.getDetailByInspect(this.currentInspectDept);
845
+    },
846
+  },
787 847
   methods: {
788 848
     // 搜索分组
789 849
     selectGroup() {
@@ -902,12 +962,23 @@ export default {
902 962
       console.log(item);
903 963
       clearTimeout(this.timer);
904 964
       clearTimeout(this.timer1);
965
+      this.speState = ["333", "332"];
966
+      this.currentSpecimenDept = item;
905 967
       this.detailModel = true;
968
+    },
969
+    // 获取标本详情(标本科室视图)
970
+    getDetailBySpecimen(item) {
906 971
       let postData = {
907 972
         hosIds: this.$route.params.hosIds,
908 973
         deptId: item.deptId,
909 974
         urgent: -1,
910 975
       };
976
+      if (this.speState.length > 0) {
977
+        postData.speState = this.speState.toString();
978
+      } else if (this.speState.length === 0) {
979
+        this.detailList = [];
980
+        return;
981
+      }
911 982
       this.loading3 = true;
912 983
       post("/nurse/getListSpecimenDetails", postData).then((result) => {
913 984
         this.loading3 = false;
@@ -942,16 +1013,29 @@ export default {
942 1013
       this.polling();
943 1014
       this.scrollInfinite();
944 1015
     },
945
-    // 点击详情(病房患者视图->重点关注患者人数)
1016
+    // 点击详情(病房患者视图->患者检查详情)
946 1017
     detailSpe(item) {
947 1018
       console.log(item);
948 1019
       clearTimeout(this.timer5);
949 1020
       clearTimeout(this.timer55);
1021
+      this.inspectState = "666";
1022
+      this.currentInspectDept = item;
950 1023
       this.detailSpeModel = true;
1024
+    },
1025
+    // 获取检查详情(病房患者视图)
1026
+    getDetailByInspect(item) {
951 1027
       let postData = {
952 1028
         hosIds: this.$route.params.hosIds,
953
-        deptid: item.id,
1029
+        deptId: item.id,
954 1030
       };
1031
+      if (this.inspectState) {
1032
+        if (this.inspectState === "307") {
1033
+          postData.inspectState = this.inspectState;
1034
+        }
1035
+      } else {
1036
+        this.detailSpeList = [];
1037
+        return;
1038
+      }
955 1039
       this.loading8 = true;
956 1040
       post("/nurse/getViewData/getInspect", postData).then((result) => {
957 1041
         this.loading8 = false;
@@ -1441,7 +1525,7 @@ export default {
1441 1525
     }
1442 1526
   }
1443 1527
   .box {
1444
-    width: 1000px;
1528
+    width: 1167px;
1445 1529
     height: 580px;
1446 1530
     border-radius: 8px;
1447 1531
     background-color: #fff;
@@ -1464,9 +1548,55 @@ export default {
1464 1548
       font-size: 18px;
1465 1549
       color: #333;
1466 1550
       font-weight: bold;
1551
+      .operateTitle {
1552
+        position: relative;
1553
+        .operate {
1554
+          font-weight: normal;
1555
+          font-size: 14px;
1556
+          width: 200px;
1557
+          position: absolute;
1558
+          top: 0;
1559
+          left: 100%;
1560
+          label {
1561
+            cursor: pointer;
1562
+            margin-left: 8px;
1563
+            display: inline-flex;
1564
+            align-items: center;
1565
+            span {
1566
+              margin-left: 4px;
1567
+            }
1568
+            input[type="checkbox"] {
1569
+              cursor: pointer;
1570
+              position: relative;
1571
+              width: 15px;
1572
+              height: 15px;
1573
+              font-size: 15px;
1574
+            }
1575
+
1576
+            input[type="checkbox"]:checked::after {
1577
+              position: absolute;
1578
+              overflow: hidden;
1579
+              background-color: #49b856;
1580
+              border: 1px solid #767676;
1581
+              color: #fff;
1582
+              width: 15px;
1583
+              height: 15px;
1584
+              border-radius: 4px;
1585
+              line-height: 0.8;
1586
+              display: inline-block;
1587
+              content: "\e618;";
1588
+              font-size: 15px;
1589
+              font-family: "icon_transport" !important;
1590
+              font-style: normal;
1591
+              -webkit-font-smoothing: antialiased;
1592
+              -moz-osx-font-smoothing: grayscale;
1593
+            }
1594
+          }
1595
+        }
1596
+      }
1467 1597
     }
1468 1598
     .table {
1469
-      width: 960px;
1599
+      width: 1127px;
1470 1600
       height: 474px;
1471 1601
       background-color: #f9fafb;
1472 1602
       border: 1px solid #e5e9ed;
@@ -1475,7 +1605,7 @@ export default {
1475 1605
       justify-content: center;
1476 1606
       align-items: center;
1477 1607
       .table-content {
1478
-        width: 896px;
1608
+        width: 1063px;
1479 1609
         height: 420px;
1480 1610
         background-color: #fff;
1481 1611
         border-radius: 8px;
@@ -1942,6 +2072,14 @@ export default {
1942 2072
     display: flex;
1943 2073
     justify-content: space-between;
1944 2074
     align-items: center;
2075
+    .first_first {
2076
+      display: flex;
2077
+      flex-direction: column;
2078
+      align-items: center;
2079
+      .first_firstPhone {
2080
+        font-size: 12px;
2081
+      }
2082
+    }
1945 2083
   }
1946 2084
   .message_cot .cot .first span {
1947 2085
     display: inline-block;
@@ -1964,7 +2102,7 @@ export default {
1964 2102
   }
1965 2103
 
1966 2104
   .message_cot .cot .second {
1967
-    margin-top: 16px;
2105
+    margin-top: 8px;
1968 2106
     width: 100%;
1969 2107
     height: 20px;
1970 2108
   }
@@ -2003,4 +2141,4 @@ export default {
2003 2141
     font-size: 13px;
2004 2142
   }
2005 2143
 }
2006
-</style>
2144
+</style>

+ 8 - 0
upload/config.js

@@ -0,0 +1,8 @@
1
+module.exports = {
2
+  ip: "192.168.3.108", // ssh地址
3
+  username: "root", // ssh 用户名
4
+  port: 22,      //端口
5
+  password: "123456", // ssh 密码
6
+  path: '/home/itsm/project/itsm-web/specimenView', // 上传地址
7
+  rmpath: '/home/itsm/project/itsm-web/specimenView' // 删除地址
8
+}

+ 36 - 0
upload/index.js

@@ -0,0 +1,36 @@
1
+const config = require('./config.js')
2
+const shell = require('shelljs')
3
+const path = require('path');
4
+let Client = require('ssh2-sftp-client');
5
+
6
+function connectSSh() {
7
+  let sftp = new Client();
8
+  sftp.connect({
9
+    host: config.ip,
10
+    port: config.port,
11
+    username: config.username,
12
+    password: config.password
13
+  }).then(() => {
14
+    console.log("-----先执行删除服务器文件-----")
15
+    return sftp.rmdir(config.rmpath, true);
16
+  }).then(() => {
17
+    // 上传文件
18
+    console.log("-----开始上传-----")
19
+    return sftp.uploadDir(path.resolve(__dirname, '../dist/specimenView'), config.path);
20
+  }).then((data) => {
21
+    console.log("-----上传完成-----");
22
+    sftp.end();
23
+  }).catch((err) => {
24
+    console.log(err, '-----失败-----');
25
+    sftp.end();
26
+  });
27
+}
28
+function runTask() {
29
+  //打包完成
30
+  if (shell.exec(`npm run build`).code == 0) {
31
+    console.log("-----打包成功-----");
32
+    //提交上传
33
+    connectSSh();
34
+  }
35
+}
36
+runTask()

+ 2 - 2
vue.config.js

@@ -4,13 +4,13 @@ module.exports = {
4 4
   productionSourceMap: false,
5 5
   devServer: {
6 6
     open: false, // 是否自动弹出浏览器页面
7
-    host: 'localhost',
7
+    host: '0.0.0.0',
8 8
     port: '8888',
9 9
     https: false, // 是否使用https协议
10 10
     hotOnly: true, // 是否开启热更新
11 11
     proxy: {
12 12
       '/service': {
13
-        target: 'http://zzzx.xyszxyy.com:8087', // API服务器的地址
13
+        target: 'http://192.168.3.96', // API服务器的地址
14 14
         ws: true, // 代理websockets
15 15
         changeOrigin: true, // 虚拟的站点需要更管origin
16 16
         pathRewrite: {