ソースを参照

添加患者评价功能;更新vant

lighter 2 年 前
コミット
f53e030b5d
33 ファイル変更910 行追加1500 行削除
  1. 2 1
      .gitignore
  2. 0 840
      package-lock.json
  3. 1 1
      package.json
  4. 17 0
      src/api/comment.js
  5. 2 2
      src/utils/check-patient-id.js
  6. 36 36
      src/utils/request.js
  7. 318 314
      src/views/hospital-service/HospitalServiceHome.vue
  8. 3 3
      src/views/hospital-service/appointment/AppointmentConfirm.vue
  9. 97 3
      src/views/hospital-service/appointment/DoctorArrangement.vue
  10. 9 3
      src/views/hospital-service/appointment/PayAppointmentFee.vue
  11. 9 3
      src/views/hospital-service/appointment/PayClinicAppointmentOrder.vue
  12. 5 2
      src/views/hospital-service/appointment/SelectDoctorAndDate.vue
  13. 6 3
      src/views/hospital-service/appointment/management/RefundAppointment.vue
  14. 3 3
      src/views/hospital-service/assessments/ClinicSatisfiedAssessment.vue
  15. 5 5
      src/views/hospital-service/assessments/Covid19Assessment.vue
  16. 8 5
      src/views/hospital-service/assessments/DepressionAssessment.vue
  17. 175 175
      src/views/hospital-service/assessments/InpatientSatisfiedAssessment.vue
  18. 3 3
      src/views/hospital-service/covid-exam/CheckExamResult.vue
  19. 14 17
      src/views/hospital-service/covid-vaccinate/CovidVaccinate.vue
  20. 9 9
      src/views/hospital-service/covid-vaccinate/ExcuteAppointment.vue
  21. 2 2
      src/views/hospital-service/electronic_health_card/ElectronicHealthCardHome.vue
  22. 5 2
      src/views/hospital-service/electronic_health_card/NewUserReg.vue
  23. 5 2
      src/views/hospital-service/health-cart/BookExam.vue
  24. 3 3
      src/views/hospital-service/health-cart/ExaminationCategory.vue
  25. 6 3
      src/views/hospital-service/health-cart/ResignOrRefund.vue
  26. 10 4
      src/views/hospital-service/inpatient-service/DisplayPrepaid.vue
  27. 101 20
      src/views/hospital-service/pay-mz-fee/UnPaidDetail.vue
  28. 1 0
      src/views/hospital-service/pay-mz-fee/UnPaidList.vue
  29. 5 2
      src/views/hospital-service/physical-exam/PhysicalExamIndex.vue
  30. 7 4
      src/views/isolations/StudentInspection.vue
  31. 10 4
      src/views/mine/patient-id-cards/BindPatientCard.vue
  32. 9 9
      src/views/mine/patient-id-cards/CreatePatientCard.vue
  33. 24 17
      src/views/mine/patient-id-cards/PatientCardInfo.vue

+ 2 - 1
.gitignore

@@ -2,4 +2,5 @@ node_modules
 .DS_Store
 dist
 dist-ssr
-*.local
+*.local
+package-lock.json

+ 0 - 840
package-lock.json

@@ -1,840 +0,0 @@
-{
-  "name": "wxservice-web",
-  "version": "1.0.3",
-  "lockfileVersion": 2,
-  "requires": true,
-  "packages": {
-    "": {
-      "name": "wxservice-web",
-      "version": "1.0.3",
-      "dependencies": {
-        "axios": "^0.21.1",
-        "js-cookie": "^2.2.1",
-        "jsbarcode": "^3.11.4",
-        "qrcanvas": "^3.1.2",
-        "vant": "^3.0.5",
-        "vue": "^3.0.5",
-        "vue-router": "^4.0.2",
-        "vuex": "^4.0.0-rc.2"
-      },
-      "devDependencies": {
-        "@vitejs/plugin-vue": "^1.1.5",
-        "@vue/compiler-sfc": "^3.0.5",
-        "vite": "^2.0.5"
-      }
-    },
-    "node_modules/@babel/parser": {
-      "version": "7.18.5",
-      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.5.tgz",
-      "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==",
-      "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/runtime": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.12.5.tgz?cache=0&sync_timestamp=1604441208794&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.12.5.tgz",
-      "integrity": "sha1-QQ5+SHRB4bNgwpvnFdhw2bmFiC4=",
-      "dependencies": {
-        "regenerator-runtime": "^0.13.4"
-      }
-    },
-    "node_modules/@popperjs/core": {
-      "version": "2.11.5",
-      "resolved": "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.5.tgz",
-      "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw=="
-    },
-    "node_modules/@vant/icons": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmmirror.com/@vant/icons/-/icons-1.8.0.tgz",
-      "integrity": "sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg=="
-    },
-    "node_modules/@vant/popperjs": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.2.1.tgz",
-      "integrity": "sha512-qzQlrPE4aOsBzfrktDVwzQy/QICCTKifmjrruhY58+Q2fobUYp/T9QINluIafzsD3VJwgP8+HFVLBsyDmy3VZQ==",
-      "dependencies": {
-        "@popperjs/core": "^2.9.2"
-      }
-    },
-    "node_modules/@vant/use": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmmirror.com/@vant/use/-/use-1.4.1.tgz",
-      "integrity": "sha512-YonNN0SuJLEJuqdoMcVAJm2JUZWkHNrW81QzeF6FLyG5HFUGlmTM5Sby7gdS3Z/8UDMlkWRQpJxBWbmVzmUWxQ=="
-    },
-    "node_modules/@vitejs/plugin-vue": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/@vitejs/plugin-vue/download/@vitejs/plugin-vue-1.1.5.tgz",
-      "integrity": "sha1-+h6OXgScNeITZy4z9z/oFwatXb4=",
-      "dev": true,
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "peerDependencies": {
-        "@vue/compiler-sfc": "^3.0.6"
-      }
-    },
-    "node_modules/@vue/compiler-core": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz",
-      "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==",
-      "dependencies": {
-        "@babel/parser": "^7.16.4",
-        "@vue/shared": "3.2.37",
-        "estree-walker": "^2.0.2",
-        "source-map": "^0.6.1"
-      }
-    },
-    "node_modules/@vue/compiler-dom": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz",
-      "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==",
-      "dependencies": {
-        "@vue/compiler-core": "3.2.37",
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "node_modules/@vue/compiler-sfc": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz",
-      "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==",
-      "dependencies": {
-        "@babel/parser": "^7.16.4",
-        "@vue/compiler-core": "3.2.37",
-        "@vue/compiler-dom": "3.2.37",
-        "@vue/compiler-ssr": "3.2.37",
-        "@vue/reactivity-transform": "3.2.37",
-        "@vue/shared": "3.2.37",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.25.7",
-        "postcss": "^8.1.10",
-        "source-map": "^0.6.1"
-      }
-    },
-    "node_modules/@vue/compiler-ssr": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz",
-      "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==",
-      "dependencies": {
-        "@vue/compiler-dom": "3.2.37",
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "node_modules/@vue/devtools-api": {
-      "version": "6.1.4",
-      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz",
-      "integrity": "sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ=="
-    },
-    "node_modules/@vue/reactivity": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz",
-      "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==",
-      "dependencies": {
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "node_modules/@vue/reactivity-transform": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz",
-      "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==",
-      "dependencies": {
-        "@babel/parser": "^7.16.4",
-        "@vue/compiler-core": "3.2.37",
-        "@vue/shared": "3.2.37",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.25.7"
-      }
-    },
-    "node_modules/@vue/runtime-core": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz",
-      "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==",
-      "dependencies": {
-        "@vue/reactivity": "3.2.37",
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "node_modules/@vue/runtime-dom": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz",
-      "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==",
-      "dependencies": {
-        "@vue/runtime-core": "3.2.37",
-        "@vue/shared": "3.2.37",
-        "csstype": "^2.6.8"
-      }
-    },
-    "node_modules/@vue/server-renderer": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz",
-      "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==",
-      "dependencies": {
-        "@vue/compiler-ssr": "3.2.37",
-        "@vue/shared": "3.2.37"
-      },
-      "peerDependencies": {
-        "vue": "3.2.37"
-      }
-    },
-    "node_modules/@vue/shared": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz",
-      "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw=="
-    },
-    "node_modules/axios": {
-      "version": "0.21.1",
-      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz?cache=0&sync_timestamp=1608609188013&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.21.1.tgz",
-      "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=",
-      "dependencies": {
-        "follow-redirects": "^1.10.0"
-      }
-    },
-    "node_modules/colorette": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.2.tgz?cache=0&sync_timestamp=1614259623635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.2.tgz",
-      "integrity": "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ="
-    },
-    "node_modules/csstype": {
-      "version": "2.6.20",
-      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz",
-      "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
-    },
-    "node_modules/esbuild": {
-      "version": "0.8.57",
-      "resolved": "https://registry.npm.taobao.org/esbuild/download/esbuild-0.8.57.tgz",
-      "integrity": "sha1-pC0CvCtXxwvNDviX/iRHZrtt2SY=",
-      "dev": true,
-      "hasInstallScript": true,
-      "bin": {
-        "esbuild": "bin/esbuild"
-      }
-    },
-    "node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
-    },
-    "node_modules/follow-redirects": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.1.tgz?cache=0&sync_timestamp=1607916952336&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.1.tgz",
-      "integrity": "sha1-X2m4Ezds7k/QR0o6uoNd8Eq3Y7c=",
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz",
-      "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=",
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
-      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
-      "dev": true
-    },
-    "node_modules/has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
-      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz?cache=0&sync_timestamp=1606411666495&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-core-module%2Fdownload%2Fis-core-module-2.2.0.tgz",
-      "integrity": "sha1-lwN+89UiJNhRY/VZeytj2a/tmBo=",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.3"
-      }
-    },
-    "node_modules/js-cookie": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/js-cookie/download/js-cookie-2.2.1.tgz?cache=0&sync_timestamp=1599571425022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-cookie%2Fdownload%2Fjs-cookie-2.2.1.tgz",
-      "integrity": "sha1-aeEG3F1YBolFYpAqpbrsN0Tpsrg="
-    },
-    "node_modules/jsbarcode": {
-      "version": "3.11.5",
-      "resolved": "https://registry.npmmirror.com/jsbarcode/-/jsbarcode-3.11.5.tgz",
-      "integrity": "sha512-zv3KsH51zD00I/LrFzFSM6dst7rDn0vIMzaiZFL7qusTjPZiPtxg3zxetp0RR7obmjTw4f6NyGgbdkBCgZUIrA==",
-      "bin": {
-        "auto.js": "bin/barcodes/CODE128/auto.js",
-        "Barcode.js": "bin/barcodes/Barcode.js",
-        "barcodes": "bin/barcodes",
-        "canvas.js": "bin/renderers/canvas.js",
-        "checksums.js": "bin/barcodes/MSI/checksums.js",
-        "codabar": "bin/barcodes/codabar",
-        "CODE128": "bin/barcodes/CODE128",
-        "CODE128_AUTO.js": "bin/barcodes/CODE128/CODE128_AUTO.js",
-        "CODE128.js": "bin/barcodes/CODE128/CODE128.js",
-        "CODE128A.js": "bin/barcodes/CODE128/CODE128A.js",
-        "CODE128B.js": "bin/barcodes/CODE128/CODE128B.js",
-        "CODE128C.js": "bin/barcodes/CODE128/CODE128C.js",
-        "CODE39": "bin/barcodes/CODE39",
-        "constants.js": "bin/barcodes/ITF/constants.js",
-        "defaults.js": "bin/options/defaults.js",
-        "EAN_UPC": "bin/barcodes/EAN_UPC",
-        "EAN.js": "bin/barcodes/EAN_UPC/EAN.js",
-        "EAN13.js": "bin/barcodes/EAN_UPC/EAN13.js",
-        "EAN2.js": "bin/barcodes/EAN_UPC/EAN2.js",
-        "EAN5.js": "bin/barcodes/EAN_UPC/EAN5.js",
-        "EAN8.js": "bin/barcodes/EAN_UPC/EAN8.js",
-        "encoder.js": "bin/barcodes/EAN_UPC/encoder.js",
-        "ErrorHandler.js": "bin/exceptions/ErrorHandler.js",
-        "exceptions": "bin/exceptions",
-        "exceptions.js": "bin/exceptions/exceptions.js",
-        "fixOptions.js": "bin/help/fixOptions.js",
-        "GenericBarcode": "bin/barcodes/GenericBarcode",
-        "getOptionsFromElement.js": "bin/help/getOptionsFromElement.js",
-        "getRenderProperties.js": "bin/help/getRenderProperties.js",
-        "help": "bin/help",
-        "index.js": "bin/renderers/index.js",
-        "index.tmp.js": "bin/barcodes/index.tmp.js",
-        "ITF": "bin/barcodes/ITF",
-        "ITF.js": "bin/barcodes/ITF/ITF.js",
-        "ITF14.js": "bin/barcodes/ITF/ITF14.js",
-        "JsBarcode.js": "bin/JsBarcode.js",
-        "linearizeEncodings.js": "bin/help/linearizeEncodings.js",
-        "merge.js": "bin/help/merge.js",
-        "MSI": "bin/barcodes/MSI",
-        "MSI.js": "bin/barcodes/MSI/MSI.js",
-        "MSI10.js": "bin/barcodes/MSI/MSI10.js",
-        "MSI1010.js": "bin/barcodes/MSI/MSI1010.js",
-        "MSI11.js": "bin/barcodes/MSI/MSI11.js",
-        "MSI1110.js": "bin/barcodes/MSI/MSI1110.js",
-        "object.js": "bin/renderers/object.js",
-        "options": "bin/options",
-        "optionsFromStrings.js": "bin/help/optionsFromStrings.js",
-        "pharmacode": "bin/barcodes/pharmacode",
-        "renderers": "bin/renderers",
-        "shared.js": "bin/renderers/shared.js",
-        "svg.js": "bin/renderers/svg.js",
-        "UPC.js": "bin/barcodes/EAN_UPC/UPC.js",
-        "UPCE.js": "bin/barcodes/EAN_UPC/UPCE.js"
-      }
-    },
-    "node_modules/magic-string": {
-      "version": "0.25.7",
-      "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz",
-      "integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=",
-      "dependencies": {
-        "sourcemap-codec": "^1.4.4"
-      }
-    },
-    "node_modules/nanoid": {
-      "version": "3.1.20",
-      "resolved": "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.20.tgz",
-      "integrity": "sha1-utwmPGsdzxS3HvqoX2q0wdbPx4g=",
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz",
-      "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=",
-      "dev": true
-    },
-    "node_modules/postcss": {
-      "version": "8.2.8",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-8.2.8.tgz?cache=0&sync_timestamp=1615328942199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-8.2.8.tgz",
-      "integrity": "sha1-C5D5OC79pCTE8PaaLq1vaDDQjs4=",
-      "dependencies": {
-        "colorette": "^1.2.2",
-        "nanoid": "^3.1.20",
-        "source-map": "^0.6.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      }
-    },
-    "node_modules/qrcanvas": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npm.taobao.org/qrcanvas/download/qrcanvas-3.1.2.tgz",
-      "integrity": "sha1-gaJekbLCfprOkdqVWRy/sQDWhwI=",
-      "dependencies": {
-        "@babel/runtime": "^7.11.2",
-        "qrcode-generator": "^1.4.4"
-      }
-    },
-    "node_modules/qrcode-generator": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npm.taobao.org/qrcode-generator/download/qrcode-generator-1.4.4.tgz",
-      "integrity": "sha1-Y/dxIkhUdZMpqZBIgGpT7SeHQOc="
-    },
-    "node_modules/regenerator-runtime": {
-      "version": "0.13.7",
-      "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595457225731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz",
-      "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U="
-    },
-    "node_modules/resolve": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz",
-      "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.2.0",
-        "path-parse": "^1.0.6"
-      }
-    },
-    "node_modules/rollup": {
-      "version": "2.41.1",
-      "resolved": "https://registry.npm.taobao.org/rollup/download/rollup-2.41.1.tgz",
-      "integrity": "sha1-x8etpCsTvlBfrNUW8T+2l8JMERY=",
-      "dev": true,
-      "bin": {
-        "rollup": "dist/bin/rollup"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.1"
-      }
-    },
-    "node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-      "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sourcemap-codec": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
-      "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ="
-    },
-    "node_modules/vant": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmmirror.com/vant/-/vant-3.5.1.tgz",
-      "integrity": "sha512-SoTrAnesooXnAAR9IDn/zfna24tgShkC8/lAJJQsOa0ynmR61AnV1wOwCsUNf2Q1CobQIGi3AHTUan7cPzupEA==",
-      "dependencies": {
-        "@vant/icons": "^1.8.0",
-        "@vant/popperjs": "^1.2.1",
-        "@vant/use": "^1.4.1"
-      },
-      "peerDependencies": {
-        "vue": "^3.0.0"
-      }
-    },
-    "node_modules/vite": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npm.taobao.org/vite/download/vite-2.0.5.tgz",
-      "integrity": "sha1-rEaFej+oaG0HeSHmG9SKmGkx3x0=",
-      "dev": true,
-      "dependencies": {
-        "esbuild": "^0.8.52",
-        "postcss": "^8.2.1",
-        "resolve": "^1.19.0",
-        "rollup": "^2.38.5"
-      },
-      "bin": {
-        "vite": "bin/vite.js"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.1"
-      }
-    },
-    "node_modules/vue": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz",
-      "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==",
-      "dependencies": {
-        "@vue/compiler-dom": "3.2.37",
-        "@vue/compiler-sfc": "3.2.37",
-        "@vue/runtime-dom": "3.2.37",
-        "@vue/server-renderer": "3.2.37",
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "node_modules/vue-router": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-4.0.2.tgz",
-      "integrity": "sha1-VwK/j6FFNbgBQv3iJr9BqEkXsfQ="
-    },
-    "node_modules/vuex": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz",
-      "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==",
-      "dependencies": {
-        "@vue/devtools-api": "^6.0.0-beta.11"
-      },
-      "peerDependencies": {
-        "vue": "^3.0.2"
-      }
-    }
-  },
-  "dependencies": {
-    "@babel/parser": {
-      "version": "7.18.5",
-      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.5.tgz",
-      "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw=="
-    },
-    "@babel/runtime": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.12.5.tgz?cache=0&sync_timestamp=1604441208794&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.12.5.tgz",
-      "integrity": "sha1-QQ5+SHRB4bNgwpvnFdhw2bmFiC4=",
-      "requires": {
-        "regenerator-runtime": "^0.13.4"
-      }
-    },
-    "@popperjs/core": {
-      "version": "2.11.5",
-      "resolved": "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.5.tgz",
-      "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw=="
-    },
-    "@vant/icons": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmmirror.com/@vant/icons/-/icons-1.8.0.tgz",
-      "integrity": "sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg=="
-    },
-    "@vant/popperjs": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.2.1.tgz",
-      "integrity": "sha512-qzQlrPE4aOsBzfrktDVwzQy/QICCTKifmjrruhY58+Q2fobUYp/T9QINluIafzsD3VJwgP8+HFVLBsyDmy3VZQ==",
-      "requires": {
-        "@popperjs/core": "^2.9.2"
-      }
-    },
-    "@vant/use": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmmirror.com/@vant/use/-/use-1.4.1.tgz",
-      "integrity": "sha512-YonNN0SuJLEJuqdoMcVAJm2JUZWkHNrW81QzeF6FLyG5HFUGlmTM5Sby7gdS3Z/8UDMlkWRQpJxBWbmVzmUWxQ=="
-    },
-    "@vitejs/plugin-vue": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/@vitejs/plugin-vue/download/@vitejs/plugin-vue-1.1.5.tgz",
-      "integrity": "sha1-+h6OXgScNeITZy4z9z/oFwatXb4=",
-      "dev": true,
-      "requires": {}
-    },
-    "@vue/compiler-core": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz",
-      "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==",
-      "requires": {
-        "@babel/parser": "^7.16.4",
-        "@vue/shared": "3.2.37",
-        "estree-walker": "^2.0.2",
-        "source-map": "^0.6.1"
-      }
-    },
-    "@vue/compiler-dom": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz",
-      "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==",
-      "requires": {
-        "@vue/compiler-core": "3.2.37",
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "@vue/compiler-sfc": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz",
-      "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==",
-      "requires": {
-        "@babel/parser": "^7.16.4",
-        "@vue/compiler-core": "3.2.37",
-        "@vue/compiler-dom": "3.2.37",
-        "@vue/compiler-ssr": "3.2.37",
-        "@vue/reactivity-transform": "3.2.37",
-        "@vue/shared": "3.2.37",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.25.7",
-        "postcss": "^8.1.10",
-        "source-map": "^0.6.1"
-      }
-    },
-    "@vue/compiler-ssr": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz",
-      "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==",
-      "requires": {
-        "@vue/compiler-dom": "3.2.37",
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "@vue/devtools-api": {
-      "version": "6.1.4",
-      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz",
-      "integrity": "sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ=="
-    },
-    "@vue/reactivity": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz",
-      "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==",
-      "requires": {
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "@vue/reactivity-transform": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz",
-      "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==",
-      "requires": {
-        "@babel/parser": "^7.16.4",
-        "@vue/compiler-core": "3.2.37",
-        "@vue/shared": "3.2.37",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.25.7"
-      }
-    },
-    "@vue/runtime-core": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz",
-      "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==",
-      "requires": {
-        "@vue/reactivity": "3.2.37",
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "@vue/runtime-dom": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz",
-      "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==",
-      "requires": {
-        "@vue/runtime-core": "3.2.37",
-        "@vue/shared": "3.2.37",
-        "csstype": "^2.6.8"
-      }
-    },
-    "@vue/server-renderer": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz",
-      "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==",
-      "requires": {
-        "@vue/compiler-ssr": "3.2.37",
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "@vue/shared": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz",
-      "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw=="
-    },
-    "axios": {
-      "version": "0.21.1",
-      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz?cache=0&sync_timestamp=1608609188013&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.21.1.tgz",
-      "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=",
-      "requires": {
-        "follow-redirects": "^1.10.0"
-      }
-    },
-    "colorette": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.2.tgz?cache=0&sync_timestamp=1614259623635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.2.tgz",
-      "integrity": "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ="
-    },
-    "csstype": {
-      "version": "2.6.20",
-      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz",
-      "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
-    },
-    "esbuild": {
-      "version": "0.8.57",
-      "resolved": "https://registry.npm.taobao.org/esbuild/download/esbuild-0.8.57.tgz",
-      "integrity": "sha1-pC0CvCtXxwvNDviX/iRHZrtt2SY=",
-      "dev": true
-    },
-    "estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
-    },
-    "follow-redirects": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.1.tgz?cache=0&sync_timestamp=1607916952336&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.1.tgz",
-      "integrity": "sha1-X2m4Ezds7k/QR0o6uoNd8Eq3Y7c="
-    },
-    "fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz",
-      "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=",
-      "dev": true,
-      "optional": true
-    },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
-      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
-      "dev": true
-    },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
-      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
-      }
-    },
-    "is-core-module": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz?cache=0&sync_timestamp=1606411666495&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-core-module%2Fdownload%2Fis-core-module-2.2.0.tgz",
-      "integrity": "sha1-lwN+89UiJNhRY/VZeytj2a/tmBo=",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.3"
-      }
-    },
-    "js-cookie": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/js-cookie/download/js-cookie-2.2.1.tgz?cache=0&sync_timestamp=1599571425022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-cookie%2Fdownload%2Fjs-cookie-2.2.1.tgz",
-      "integrity": "sha1-aeEG3F1YBolFYpAqpbrsN0Tpsrg="
-    },
-    "jsbarcode": {
-      "version": "3.11.5",
-      "resolved": "https://registry.npmmirror.com/jsbarcode/-/jsbarcode-3.11.5.tgz",
-      "integrity": "sha512-zv3KsH51zD00I/LrFzFSM6dst7rDn0vIMzaiZFL7qusTjPZiPtxg3zxetp0RR7obmjTw4f6NyGgbdkBCgZUIrA=="
-    },
-    "magic-string": {
-      "version": "0.25.7",
-      "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz",
-      "integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=",
-      "requires": {
-        "sourcemap-codec": "^1.4.4"
-      }
-    },
-    "nanoid": {
-      "version": "3.1.20",
-      "resolved": "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.20.tgz",
-      "integrity": "sha1-utwmPGsdzxS3HvqoX2q0wdbPx4g="
-    },
-    "path-parse": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz",
-      "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=",
-      "dev": true
-    },
-    "postcss": {
-      "version": "8.2.8",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-8.2.8.tgz?cache=0&sync_timestamp=1615328942199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-8.2.8.tgz",
-      "integrity": "sha1-C5D5OC79pCTE8PaaLq1vaDDQjs4=",
-      "requires": {
-        "colorette": "^1.2.2",
-        "nanoid": "^3.1.20",
-        "source-map": "^0.6.1"
-      }
-    },
-    "qrcanvas": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npm.taobao.org/qrcanvas/download/qrcanvas-3.1.2.tgz",
-      "integrity": "sha1-gaJekbLCfprOkdqVWRy/sQDWhwI=",
-      "requires": {
-        "@babel/runtime": "^7.11.2",
-        "qrcode-generator": "^1.4.4"
-      }
-    },
-    "qrcode-generator": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npm.taobao.org/qrcode-generator/download/qrcode-generator-1.4.4.tgz",
-      "integrity": "sha1-Y/dxIkhUdZMpqZBIgGpT7SeHQOc="
-    },
-    "regenerator-runtime": {
-      "version": "0.13.7",
-      "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595457225731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz",
-      "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U="
-    },
-    "resolve": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz",
-      "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=",
-      "dev": true,
-      "requires": {
-        "is-core-module": "^2.2.0",
-        "path-parse": "^1.0.6"
-      }
-    },
-    "rollup": {
-      "version": "2.41.1",
-      "resolved": "https://registry.npm.taobao.org/rollup/download/rollup-2.41.1.tgz",
-      "integrity": "sha1-x8etpCsTvlBfrNUW8T+2l8JMERY=",
-      "dev": true,
-      "requires": {
-        "fsevents": "~2.3.1"
-      }
-    },
-    "source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-      "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
-    },
-    "sourcemap-codec": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
-      "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ="
-    },
-    "vant": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmmirror.com/vant/-/vant-3.5.1.tgz",
-      "integrity": "sha512-SoTrAnesooXnAAR9IDn/zfna24tgShkC8/lAJJQsOa0ynmR61AnV1wOwCsUNf2Q1CobQIGi3AHTUan7cPzupEA==",
-      "requires": {
-        "@vant/icons": "^1.8.0",
-        "@vant/popperjs": "^1.2.1",
-        "@vant/use": "^1.4.1"
-      }
-    },
-    "vite": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npm.taobao.org/vite/download/vite-2.0.5.tgz",
-      "integrity": "sha1-rEaFej+oaG0HeSHmG9SKmGkx3x0=",
-      "dev": true,
-      "requires": {
-        "esbuild": "^0.8.52",
-        "fsevents": "~2.3.1",
-        "postcss": "^8.2.1",
-        "resolve": "^1.19.0",
-        "rollup": "^2.38.5"
-      }
-    },
-    "vue": {
-      "version": "3.2.37",
-      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz",
-      "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==",
-      "requires": {
-        "@vue/compiler-dom": "3.2.37",
-        "@vue/compiler-sfc": "3.2.37",
-        "@vue/runtime-dom": "3.2.37",
-        "@vue/server-renderer": "3.2.37",
-        "@vue/shared": "3.2.37"
-      }
-    },
-    "vue-router": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-4.0.2.tgz",
-      "integrity": "sha1-VwK/j6FFNbgBQv3iJr9BqEkXsfQ="
-    },
-    "vuex": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz",
-      "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==",
-      "requires": {
-        "@vue/devtools-api": "^6.0.0-beta.11"
-      }
-    }
-  }
-}

+ 1 - 1
package.json

@@ -11,7 +11,7 @@
     "js-cookie": "^2.2.1",
     "qrcanvas": "^3.1.2",
     "jsbarcode": "^3.11.4",
-    "vant": "^3.0.5",
+    "vant": "^4.6.0",
     "vue": "^3.0.5",
     "vue-router": "^4.0.2",
     "vuex": "^4.0.0-rc.2"

+ 17 - 0
src/api/comment.js

@@ -0,0 +1,17 @@
+import request from '../utils/request'
+
+export function commitNewComment(data) {
+    return request({
+        url: '/comment/commitNewComment',
+        method: 'post',
+        data
+    })
+}
+
+export function fetchDoctorComments(data) {
+    return request({
+        url: '/comment/fetchDoctorComments',
+        method: 'post',
+        data
+    })
+}

+ 2 - 2
src/utils/check-patient-id.js

@@ -1,7 +1,7 @@
 import router from '../router'
 import store from '../store'
 import { getPatientIdByOpenId } from '../api/patient-id-cards'
-import { Dialog } from 'vant'
+import { showDialog } from 'vant'
 import Cookies from 'js-cookie'
 export function checkPatientId() {
   const openId = getLocalOpenId()
@@ -20,7 +20,7 @@ function commitPatientCards(cards) {
 function showNotification() {
   setTimeout(() => {
     if (router.currentRoute.value.fullPath.indexOf('newUserRegForElectronicHealthCard') === -1) {
-      Dialog.alert({
+      showDialog({
         title: '提示',
         message: '您的就诊人为空,请前往添加。',
       }).then(() => {

+ 36 - 36
src/utils/request.js

@@ -1,50 +1,50 @@
 import axios from 'axios'
-import { Toast, Dialog } from 'vant'
+import {showDialog, showToast} from 'vant'
 import store from '../store/index'
 
 const service = axios.create({
-  baseURL: import.meta.env.VITE_BASE_URL,
-  withCredentials: true,
-  timeout: 0,
+    baseURL: import.meta.env.VITE_BASE_URL,
+    withCredentials: true,
+    timeout: 0,
 })
 
 service.interceptors.request.use(
-  (config) => {
-    store.commit('SET_LOADING', true)
-    return config
-  },
-  (error) => {
-    store.commit('SET_LOADING', false)
-    return Promise.reject(error)
-  }
+    (config) => {
+        store.commit('SET_LOADING', true)
+        return config
+    },
+    (error) => {
+        store.commit('SET_LOADING', false)
+        return Promise.reject(error)
+    }
 )
 
 service.interceptors.response.use(
-  (response) => {
-    store.commit('SET_LOADING', false)
-    if (response.data.code === 200) {
-      return response.data.data
-    }
-    if (response.data.code === 0) {
-      return response.data
-    }
-    if (response.data.code > 1000 && response.data.code < 2000) {
-      Toast({
-        message: response.data.message,
-        position: 'top',
-      })
-    } else if (response.data.code > 2000 && response.data.code < 3000) {
-      Dialog.alert({
-        title: '提示',
-        message: response.data.message,
-      })
+    (response) => {
+        store.commit('SET_LOADING', false)
+        if (response.data.code === 200) {
+            return response.data.data
+        }
+        if (response.data.code === 0) {
+            return response.data
+        }
+        if (response.data.code > 1000 && response.data.code < 2000) {
+            showToast({
+                message: response.data.message,
+                position: 'top',
+            });
+        } else if (response.data.code > 2000 && response.data.code < 3000) {
+            showDialog({
+                title: '提示',
+                message: response.data.message,
+            }).then(() => {})
+        }
+        return Promise.reject(new Error(response.data.message || '服务器内部错误'))
+    },
+    (error) => {
+        store.commit('SET_LOADING', false)
+        return Promise.reject(error)
     }
-    return Promise.reject(new Error(response.data.message || '服务器内部错误'))
-  },
-  (error) => {
-    store.commit('SET_LOADING', false)
-    return Promise.reject(error)
-  }
 )
 
 export default service

+ 318 - 314
src/views/hospital-service/HospitalServiceHome.vue

@@ -1,22 +1,22 @@
 <template>
-    <window-size :showBackNav="false">
-        <div class="logo-div">
-            <div style="display: flex">
-                <div><img src="../../assets/thyy_logo.png" style="height: 60px"/></div>
-                <div style="color: #00525e">
-                    <h3>医疗服务平台</h3>
-                </div>
-            </div>
-            <div style="font-size: 13px">
-                <i class="van-icon van-icon-user-o"></i>
-                <span style="margin-left: 4px; color: #777" @click="router.push('/myPatientIdCards')">{{
-                    defaultPatientId
-                    }}</span>
-            </div>
+  <window-size :showBackNav="false">
+    <div class="logo-div">
+      <div style="display: flex">
+        <div><img src="../../assets/thyy_logo.png" style="height: 60px"/></div>
+        <div style="color: #00525e">
+          <h3>医疗服务平台</h3>
         </div>
-        <div style="position: relative; width: 95%; margin-top: 10px; height: 70px; display: flex">
-            <div
-                    style="
+      </div>
+      <div style="font-size: 13px">
+        <i class="van-icon van-icon-user-o"></i>
+        <span style="margin-left: 4px; color: #777" @click="router.push('/myPatientIdCards')">{{
+            defaultPatientId
+          }}</span>
+      </div>
+    </div>
+    <div style="position: relative; width: 95%; margin-top: 10px; height: 70px; display: flex">
+      <div
+          style="
           width: 45%;
           margin-left: 5%;
           height: 70px;
@@ -26,11 +26,11 @@
           align-items: center;
           background-image: url('http://staticweb.hnthyy.cn/images/ybdzpzrk.png');
         "
-                    @click="toybdzpz"
-            >
-            </div>
-            <div
-                    style="
+          @click="toybdzpz"
+      >
+      </div>
+      <div
+          style="
           width: 45%;
           margin-left: 5%;
           height: 70px;
@@ -40,114 +40,118 @@
           align-items: center;
           background-image: url('http://staticweb.hnthyy.cn/images/dzjkkrk.png');
         "
-                    @click="todzjkk"
-            >
+          @click="todzjkk"
+      >
+      </div>
+    </div>
+    <div id="router-lane">
+      <div style="height: 10px"></div>
+      <van-row gutter="5">
+        <van-col span="6" @click="routeTo('/appointment')">
+          <img src="../../assets/hospital-service/yuyueguahao.png"/>
+          <div class="icon-label">预约挂号</div>
+        </van-col>
+        <van-col span="6" @click="routeTo('/nightClinic')">
+          <img src="../../assets/hospital-service/night-clinic.png"/>
+          <div class="icon-label">夜间门诊</div>
+        </van-col>
+        <van-col span="6" @click="routeTo(filterPath('/unPaidList/', '/selectPayPatient'))">
+          <img src="../../assets/hospital-service/menzhenjiaofei.png"/>
+          <div class="icon-label">门诊缴费</div>
+        </van-col>
+        <van-col span="6" @click="routeTo(filterPath('/checkExamIndex/', '/selectExamPatient'))">
+          <img src="../../assets/hospital-service/baogaochaxun.png"/>
+          <div class="icon-label">报告查询</div>
+        </van-col>
+      </van-row>
+      <div style="height: 10px"></div>
+      <van-row gutter="5">
+        <van-col span="6" @click="routeTo(filterPath('/inPatientService/', '/selectInpatientCard'))">
+          <img src="../../assets/hospital-service/zhuyuanfuwu.png"/>
+          <div class="icon-label">住院服务</div>
+        </van-col>
+        <van-col span="6" @click="routeTo(filterPath('/assessments/', '/selectAssessmentPatient'))">
+          <img src="../../assets/hospital-service/wenjuandiaocha.png"/>
+          <div class="icon-label">问卷调查</div>
+        </van-col>
+        <van-col span="6" @click="routeTo(filterPath('/physicalExamIndex/', '/selectPhysicalExamPatient'))">
+          <img src="../../assets/hospital-service/tijianbaogao.png"/>
+          <div class="icon-label">体检报告</div>
+        </van-col>
+        <van-col span="6" @click="routeTo(filterPath('/healthCartCategory/', '/selectHealthCartPatient'))">
+          <img src="../../assets/hospital-service/gouwuche.png"/>
+          <div class="icon-label">自助预约</div>
+        </van-col>
+      </van-row>
+      <div style="height: 10px"></div>
+      <van-row gutter="5">
+        <van-col span="6" @click="routeTo('/onlineConsult')">
+          <img src="../../assets/hospital-service/online-consult.png"/>
+          <div class="icon-label">在线咨询</div>
+        </van-col>
+        <van-col span="6" @click="routeTo('/selectTargetPatient')">
+          <img src="../../assets/hospital-service/appointmentmanagement.png"/>
+          <div class="icon-label">挂号管理</div>
+        </van-col>
+        <van-col span="6" @click="routeTo('/selectPriceQueryBranch')">
+          <img src="../../assets/hospital-service/price-query.png"/>
+          <div class="icon-label">价格查询</div>
+        </van-col>
+        <van-col span="6" @click="clickComplaintsAndSuggestions">
+          <img src="../../assets/hospital-service/complaints_and_suggestions.png"/>
+          <div class="icon-label">投诉与建议</div>
+        </van-col>
+      </van-row>
+    </div>
+    <div style="width: 90%; margin-left: 5%; margin-top: 15px">
+      <van-tag size="large" type="warning">名医直达</van-tag>
+    </div>
+    <div :style="swipeStyle">
+      <div :style="loadingStyle" v-show="loading">
+        <van-loading size="24px" type="spinner" vertical></van-loading>
+      </div>
+      <van-swipe :autoplay="10000" :show-indicators="false" vertical style="height: 100%">
+        <van-swipe-item v-for="(arr, index) in doctors" :key="index">
+          <div :style="swipeRowStyle" v-for="item in arr" :key="item.doctorCode" @click="clickDoctor(item)">
+            <van-image
+                round
+                fit="cover"
+                style="margin-top: 5px; margin-left: 5px"
+                :width="portraitWidth"
+                :height="portraitHeight"
+                :src="'data:image/png;base64,' + item.portrait"
+            />
+            <div :style="infoStyle">
+              {{ item.doctorName }} | {{ item.deptName }} | {{ item.doctorTitle }}
+              <div v-show="item.introduction" :style="specialtyStyle">{{ item.introduction }}</div>
             </div>
+          </div>
+        </van-swipe-item>
+      </van-swipe>
+    </div>
+    <div class="van-overlay" style="z-index: 2001" v-show="showComplaintsAndSuggestions">
+      <div
+          style="position: absolute; top: 60px; left: 30px; right: 30px; background: white; border-radius: 10px; padding-bottom: 20px">
+        <div
+            style="margin: 20px 0 20px 20px;font-size: 15px; font-weight: bold; padding-bottom: 10px; border-bottom: 1px solid gray">
+          投诉与建议
         </div>
-        <div id="router-lane">
-            <div style="height: 10px"></div>
-            <van-row gutter="5">
-                <van-col span="6" @click="routeTo('/appointment')">
-                    <img src="../../assets/hospital-service/yuyueguahao.png"/>
-                    <div class="icon-label">预约挂号</div>
-                </van-col>
-                <van-col span="6" @click="routeTo('/nightClinic')">
-                    <img src="../../assets/hospital-service/night-clinic.png"/>
-                    <div class="icon-label">夜间门诊</div>
-                </van-col>
-                <van-col span="6" @click="routeTo(filterPath('/unPaidList/', '/selectPayPatient'))">
-                    <img src="../../assets/hospital-service/menzhenjiaofei.png"/>
-                    <div class="icon-label">门诊缴费</div>
-                </van-col>
-                <van-col span="6" @click="routeTo(filterPath('/checkExamIndex/', '/selectExamPatient'))">
-                    <img src="../../assets/hospital-service/baogaochaxun.png"/>
-                    <div class="icon-label">报告查询</div>
-                </van-col>
-            </van-row>
-            <div style="height: 10px"></div>
-            <van-row gutter="5">
-                <van-col span="6" @click="routeTo(filterPath('/inPatientService/', '/selectInpatientCard'))">
-                    <img src="../../assets/hospital-service/zhuyuanfuwu.png"/>
-                    <div class="icon-label">住院服务</div>
-                </van-col>
-                <van-col span="6" @click="routeTo(filterPath('/assessments/', '/selectAssessmentPatient'))">
-                    <img src="../../assets/hospital-service/wenjuandiaocha.png"/>
-                    <div class="icon-label">问卷调查</div>
-                </van-col>
-                <van-col span="6" @click="routeTo(filterPath('/physicalExamIndex/', '/selectPhysicalExamPatient'))">
-                    <img src="../../assets/hospital-service/tijianbaogao.png"/>
-                    <div class="icon-label">体检报告</div>
-                </van-col>
-                <van-col span="6" @click="routeTo(filterPath('/healthCartCategory/', '/selectHealthCartPatient'))">
-                    <img src="../../assets/hospital-service/gouwuche.png"/>
-                    <div class="icon-label">自助预约</div>
-                </van-col>
-            </van-row>
-            <div style="height: 10px"></div>
-            <van-row gutter="5">
-                <van-col span="6" @click="routeTo('/onlineConsult')">
-                    <img src="../../assets/hospital-service/online-consult.png"/>
-                    <div class="icon-label">在线咨询</div>
-                </van-col>
-                <van-col span="6" @click="routeTo('/selectTargetPatient')">
-                    <img src="../../assets/hospital-service/appointmentmanagement.png"/>
-                    <div class="icon-label">挂号管理</div>
-                </van-col>
-                <van-col span="6" @click="routeTo('/selectPriceQueryBranch')">
-                    <img src="../../assets/hospital-service/price-query.png"/>
-                    <div class="icon-label">价格查询</div>
-                </van-col>
-                <van-col span="6" @click="clickComplaintsAndSuggestions">
-                    <img src="../../assets/hospital-service/complaints_and_suggestions.png"/>
-                    <div class="icon-label">投诉与建议</div>
-                </van-col>
-            </van-row>
-        </div>
-        <div style="width: 90%; margin-left: 5%; margin-top: 15px">
-            <van-tag size="large" type="warning">名医直达</van-tag>
+        <van-field required v-model="complaintsAndSuggestions.department" label="投诉科室"></van-field>
+        <van-field required v-model="complaintsAndSuggestions.object" label="投诉对象"></van-field>
+        <van-field required v-model="complaintsAndSuggestions.content" label="投诉与建议"></van-field>
+        <van-field required v-model="complaintsAndSuggestions.contact" label="联系方式"></van-field>
+        <van-field v-model="complaintsAndSuggestions.name" label="您的姓名"></van-field>
+        <div style="display: flex; margin-top: 30px">
+          <div style="width: 50%; padding: 12px">
+            <van-button block @click="showComplaintsAndSuggestions = false">取消</van-button>
+          </div>
+          <div style="width: 50%; padding: 12px">
+            <van-button block type="primary" @click="confirmComplaints">提交</van-button>
+          </div>
         </div>
-        <div :style="swipeStyle">
-            <div :style="loadingStyle" v-show="loading">
-                <van-loading size="24px" type="spinner" vertical></van-loading>
-            </div>
-            <van-swipe :autoplay="10000" :show-indicators="false" vertical style="height: 100%">
-                <van-swipe-item v-for="(arr, index) in doctors" :key="index">
-                    <div :style="swipeRowStyle" v-for="item in arr" :key="item.doctorCode" @click="clickDoctor(item)">
-                        <van-image
-                                round
-                                fit="cover"
-                                style="margin-top: 5px; margin-left: 5px"
-                                :width="portraitWidth"
-                                :height="portraitHeight"
-                                :src="'data:image/png;base64,' + item.portrait"
-                        />
-                        <div :style="infoStyle">
-                            {{ item.doctorName }} | {{ item.deptName }} | {{ item.doctorTitle }}
-                            <div v-show="item.introduction" :style="specialtyStyle">{{ item.introduction }}</div>
-                        </div>
-                    </div>
-                </van-swipe-item>
-            </van-swipe>
-        </div>
-        <div class="van-overlay" style="z-index: 2001" v-show="showComplaintsAndSuggestions">
-            <div style="position: absolute; top: 60px; left: 30px; right: 30px; background: white; border-radius: 10px; padding-bottom: 20px">
-                <div style="margin: 20px 0 20px 20px;font-size: 15px; font-weight: bold; padding-bottom: 10px; border-bottom: 1px solid gray">投诉与建议</div>
-                <van-field required v-model="complaintsAndSuggestions.department" label="投诉科室"></van-field>
-                <van-field required v-model="complaintsAndSuggestions.object" label="投诉对象"></van-field>
-                <van-field required v-model="complaintsAndSuggestions.content" label="投诉与建议"></van-field>
-                <van-field required v-model="complaintsAndSuggestions.contact" label="联系方式"></van-field>
-                <van-field v-model="complaintsAndSuggestions.name" label="您的姓名"></van-field>
-                <div style="display: flex; margin-top: 30px">
-                    <div style="width: 50%; padding: 12px">
-                        <van-button block @click="showComplaintsAndSuggestions = false">取消</van-button>
-                    </div>
-                    <div style="width: 50%; padding: 12px">
-                        <van-button block type="primary" @click="confirmComplaints">提交</van-button>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </window-size>
+      </div>
+    </div>
+  </window-size>
 </template>
 
 <script>
@@ -156,241 +160,241 @@ import store from '../../store'
 import {getDate} from '../../utils/date'
 import router from '../../router'
 import axios from 'axios'
-import {Dialog, Toast} from "vant";
 import {submitComplaintsAndSuggestions} from "../../api/assessments";
+import {showDialog} from "vant";
 
 export default {
-    setup() {
-        const windowSize = store.state.windowSize
-        const swipeStyle = {
-            width: '90%',
-            marginLeft: '5%',
-            marginTop: '5px',
-            height: windowSize.h - 460 + 'px',
-            h: windowSize.h - 460,
-            w: windowSize.w * 0.9,
-        }
+  setup() {
+    const windowSize = store.state.windowSize
+    const swipeStyle = {
+      width: '90%',
+      marginLeft: '5%',
+      marginTop: '5px',
+      height: windowSize.h - 460 + 'px',
+      h: windowSize.h - 460,
+      w: windowSize.w * 0.9,
+    }
 
-        const swipeRowStyle = {
-            width: '100%',
-            height: swipeStyle.h / 3 - 5 + 'px',
-            marginBottom: '5px',
-            borderRadius: '8px',
-            backgroundColor: '#00525e',
-            backgroundImage: 'linear-gradient(to bottom right, #03a0b8, #00525e)',
-            display: 'flex',
-            h: swipeStyle.h / 3 - 5,
-            color: 'white',
-        }
+    const swipeRowStyle = {
+      width: '100%',
+      height: swipeStyle.h / 3 - 5 + 'px',
+      marginBottom: '5px',
+      borderRadius: '8px',
+      backgroundColor: '#00525e',
+      backgroundImage: 'linear-gradient(to bottom right, #03a0b8, #00525e)',
+      display: 'flex',
+      h: swipeStyle.h / 3 - 5,
+      color: 'white',
+    }
 
-        const loadingStyle = {
-            position: 'fixed',
-            top: 400 + swipeStyle.h / 2 - 32 + 'px',
-            left: 0,
-            right: 0,
-            bottom: '50px',
-        }
+    const loadingStyle = {
+      position: 'fixed',
+      top: 400 + swipeStyle.h / 2 - 32 + 'px',
+      left: 0,
+      right: 0,
+      bottom: '50px',
+    }
 
-        const portraitHeight = swipeRowStyle.h - 10 + 'px'
-        const portraitWidth = swipeRowStyle.h * 0.65 + 'px'
+    const portraitHeight = swipeRowStyle.h - 10 + 'px'
+    const portraitWidth = swipeRowStyle.h * 0.65 + 'px'
 
-        const infoStyle = {
-            width: swipeStyle.w - swipeRowStyle.h * 0.65 - 10 + 'px',
-            height: '32px',
-            fontSize: '13px',
-            fontWeight: 'bold',
-            marginLeft: '10px',
-            marginTop: swipeRowStyle.h / 2 - 20 + 'px',
-        }
+    const infoStyle = {
+      width: swipeStyle.w - swipeRowStyle.h * 0.65 - 10 + 'px',
+      height: '32px',
+      fontSize: '13px',
+      fontWeight: 'bold',
+      marginLeft: '10px',
+      marginTop: swipeRowStyle.h / 2 - 20 + 'px',
+    }
 
-        const specialtyStyle = {
-            overflow: 'hidden',
-            textOverflow: 'ellipsis',
-            whiteSpace: 'nowrap',
-            fontSize: '12px',
-            fontWeight: 'normal',
-            paddingRight: '15px',
+    const specialtyStyle = {
+      overflow: 'hidden',
+      textOverflow: 'ellipsis',
+      whiteSpace: 'nowrap',
+      fontSize: '12px',
+      fontWeight: 'normal',
+      paddingRight: '15px',
+    }
+    const cards = computed(() => {
+      return store.state.patientCards
+    })
+    const filterPath = (singleCardPath, multipleCardsPath) => {
+      return cards.value.length === 1 ? singleCardPath + cards.value[0].patientId : multipleCardsPath
+    }
+    const defaultPatientId = computed(() => {
+      if (cards.value.length === 0) {
+        return '未绑卡'
+      }
+      if (cards.value.length === 1) {
+        return cards.value[0].patientId
+      }
+      for (let i = 0; i < cards.value.length; i++) {
+        if (cards.value[i].isDefault === 1) {
+          return cards.value[i].patientId
         }
-        const cards = computed(() => {
-            return store.state.patientCards
-        })
-        const filterPath = (singleCardPath, multipleCardsPath) => {
-            return cards.value.length === 1 ? singleCardPath + cards.value[0].patientId : multipleCardsPath
-        }
-        const defaultPatientId = computed(() => {
-            if (cards.value.length === 0) {
-                return '未绑卡'
-            }
-            if (cards.value.length === 1) {
-                return cards.value[0].patientId
-            }
-            for (let i = 0; i < cards.value.length; i++) {
-                if (cards.value[i].isDefault === 1) {
-                    return cards.value[i].patientId
-                }
-            }
-        })
+      }
+    })
 
-        const doctors = computed(() => {
-            return store.state.homePageDoctors
-        })
-        const date = getDate()
-        const clickDoctor = (val) => {
-            const path = '/doctorArrangement/' + date + '/' + val.deptCode + '/' + val.doctorCode
-            router.push(path)
-        }
+    const doctors = computed(() => {
+      return store.state.homePageDoctors
+    })
+    const date = getDate()
+    const clickDoctor = (val) => {
+      const path = '/doctorArrangement/' + date + '/' + val.deptCode + '/' + val.doctorCode
+      router.push(path)
+    }
 
-        const routeTo = (val) => {
-            router.push(val)
-        }
+    const routeTo = (val) => {
+      router.push(val)
+    }
 
-        const toVaccinateAppointment = () => {
-            if (cards.value.length === 1) {
-                window.open('http://www.hnthyy.cn:8080/covidVaccinate/' + cards.value[0].patientId, '_self')
-            } else {
-                router.push('/selectCovidVaccinatePatient')
-            }
-        }
+    const toVaccinateAppointment = () => {
+      if (cards.value.length === 1) {
+        window.open('http://www.hnthyy.cn:8080/covidVaccinate/' + cards.value[0].patientId, '_self')
+      } else {
+        router.push('/selectCovidVaccinatePatient')
+      }
+    }
 
-        const toybdzpz = () => {
-            store.commit('SET_LOADING', true)
-            window.location.href =
-                'https://mp.weixin.qq.com/insurance/card/creditjump?cityid=430100&from=u1ZYLGrYTJspxoHAQoU96w.%3D#wechat_redirect'
-        }
+    const toybdzpz = () => {
+      store.commit('SET_LOADING', true)
+      window.location.href =
+          'https://mp.weixin.qq.com/insurance/card/creditjump?cityid=430100&from=u1ZYLGrYTJspxoHAQoU96w.%3D#wechat_redirect'
+    }
 
-        const todzjkk = () => {
-            router.push('/electronicHealthCardHome')
-        }
+    const todzjkk = () => {
+      router.push('/electronicHealthCardHome')
+    }
 
-        const showComplaintsAndSuggestions = ref(false)
-        const complaintsAndSuggestions = reactive({
-            openId: localStorage.getItem('openId'),
-            department: null,
-            object: null,
-            content: null,
-            contact: null,
-            name: null,
-        })
-        const clickComplaintsAndSuggestions = () => {
-            showComplaintsAndSuggestions.value = true
-        }
-        const confirmComplaints = () => {
-            submitComplaintsAndSuggestions(complaintsAndSuggestions).then(res => {
-                showComplaintsAndSuggestions.value = false
-                Dialog.alert({
-                    title: '提示',
-                    message: '提交成功!',
-                })
-            })
-        }
+    const showComplaintsAndSuggestions = ref(false)
+    const complaintsAndSuggestions = reactive({
+      openId: localStorage.getItem('openId'),
+      department: null,
+      object: null,
+      content: null,
+      contact: null,
+      name: null,
+    })
+    const clickComplaintsAndSuggestions = () => {
+      showComplaintsAndSuggestions.value = true
+    }
+    const confirmComplaints = () => {
+      submitComplaintsAndSuggestions(complaintsAndSuggestions).then(res => {
+        showComplaintsAndSuggestions.value = false
+        showDialog({
+          title: '提示',
+          message: '提交成功!',
+        }).then(() => {})
+      })
+    }
 
-        const loading = ref(false)
-        onMounted(() => {
-            if (doctors.value.length === 0) {
-                loading.value = true
-                const url = import.meta.env.VITE_BASE_URL + '/homepage/selectHomePageDoctors'
-                axios({
-                    withCredentials: true,
-                    url: url,
-                }).then((res) => {
-                    store.commit('SET_HOMEPAGEDOCTORS', res.data.data)
-                    loading.value = false
-                })
-            }
+    const loading = ref(false)
+    onMounted(() => {
+      if (doctors.value.length === 0) {
+        loading.value = true
+        const url = import.meta.env.VITE_BASE_URL + '/homepage/selectHomePageDoctors'
+        axios({
+          withCredentials: true,
+          url: url,
+        }).then((res) => {
+          store.commit('SET_HOMEPAGEDOCTORS', res.data.data)
+          loading.value = false
         })
-        return {
-            filterPath,
-            doctors,
-            router,
-            clickDoctor,
-            swipeStyle,
-            swipeRowStyle,
-            portraitHeight,
-            portraitWidth,
-            infoStyle,
-            specialtyStyle,
-            defaultPatientId,
-            routeTo,
-            toVaccinateAppointment,
-            loadingStyle,
-            loading,
-            toybdzpz,
-            todzjkk,
-            showComplaintsAndSuggestions,
-            complaintsAndSuggestions,
-            clickComplaintsAndSuggestions,
-            confirmComplaints
-        }
-    },
+      }
+    })
+    return {
+      filterPath,
+      doctors,
+      router,
+      clickDoctor,
+      swipeStyle,
+      swipeRowStyle,
+      portraitHeight,
+      portraitWidth,
+      infoStyle,
+      specialtyStyle,
+      defaultPatientId,
+      routeTo,
+      toVaccinateAppointment,
+      loadingStyle,
+      loading,
+      toybdzpz,
+      todzjkk,
+      showComplaintsAndSuggestions,
+      complaintsAndSuggestions,
+      clickComplaintsAndSuggestions,
+      confirmComplaints
+    }
+  },
 }
 </script>
 
 <style scoped>
 .logo-div {
-    width: 92.5%;
-    margin-left: 3%;
-    height: 60px;
-    line-height: 60px;
-    display: flex;
-    justify-content: space-between;
+  width: 92.5%;
+  margin-left: 3%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
 }
 
 .big-box {
-    margin-top: 10px;
-    width: 90%;
-    margin-left: 5%;
-    height: 70px;
-    background-size: 100%;
-    border-radius: 8px;
-    display: flex;
-    align-items: center;
+  margin-top: 10px;
+  width: 90%;
+  margin-left: 5%;
+  height: 70px;
+  background-size: 100%;
+  border-radius: 8px;
+  display: flex;
+  align-items: center;
 }
 
 .hsjctext {
-    font-size: 36px;
-    color: rgba(4, 59, 104, 0.9);
-    font-weight: bold;
-    padding-left: 8px;
+  font-size: 36px;
+  color: rgba(4, 59, 104, 0.9);
+  font-weight: bold;
+  padding-left: 8px;
 }
 
 .large-icon {
-    margin-left: 10px;
-    margin-top: 11px;
+  margin-left: 10px;
+  margin-top: 11px;
 }
 
 .xinguanjiance {
-    background: url('../../assets/hospital-service/xinguanjiancebackground.png') no-repeat !important;
-    background-size: 100% !important;
+  background: url('../../assets/hospital-service/xinguanjiancebackground.png') no-repeat !important;
+  background-size: 100% !important;
 }
 
 .bold-text {
-    font-weight: bold;
+  font-weight: bold;
 }
 
 #router-lane .van-col {
-    text-align: center;
+  text-align: center;
 }
 
 #router-lane img {
-    width: 32px;
-    height: 32px;
+  width: 32px;
+  height: 32px;
 }
 
 .icon-label {
-    font-size: 13px;
-    color: #333;
-    /* color:#048a9e; */
+  font-size: 13px;
+  color: #333;
+  /* color:#048a9e; */
 }
 
 .doctor-loading-box {
-    position: fixed;
-    display: inline-block;
-    width: 120px;
-    padding: 15px 0;
-    vertical-align: middle;
-    background-color: #fff;
-    border-radius: 4px;
-    border: 1px solid #ebeef5;
-    box-shadow: 1px 2px 9px 5px rgba(0, 0, 0, 0.1);
+  position: fixed;
+  display: inline-block;
+  width: 120px;
+  padding: 15px 0;
+  vertical-align: middle;
+  background-color: #fff;
+  border-radius: 4px;
+  border: 1px solid #ebeef5;
+  box-shadow: 1px 2px 9px 5px rgba(0, 0, 0, 0.1);
 }
 </style>

+ 3 - 3
src/views/hospital-service/appointment/AppointmentConfirm.vue

@@ -59,7 +59,7 @@ import store from '../../../store'
 import {computed, onMounted, ref, watchEffect} from 'vue'
 import {checkAppointmentRequirements, getGhFee} from '../../../api/appointment'
 import router from '../../../router'
-import {Dialog, Toast} from 'vant'
+import {showConfirmDialog, showToast} from 'vant'
 
 export default {
     name: 'AppointConfirm',
@@ -92,7 +92,7 @@ export default {
                         appointment.patientName = item.name
                     }
                 })
-                Dialog.confirm({
+              showConfirmDialog({
                     title: '温馨提示',
                     message: '超过预约日期未就诊,不予退号、换号、转科,敬请谅解。',
                     confirmButtonText: '确认挂号',
@@ -113,7 +113,7 @@ export default {
                     appointment.fee = res.fee
                     disableGhBtn.value = false
                     if (res.message) {
-                        Toast({
+                      showToast({
                             message: res.message,
                             position: 'top',
                             duration: 3000,

+ 97 - 3
src/views/hospital-service/appointment/DoctorArrangement.vue

@@ -98,6 +98,61 @@
                     :disabled="!currentAppointmentItem.apTime">确认</van-button>
       </div>
     </van-action-sheet>
+
+    <div style="margin-top: 8px; background: white">
+      <van-cell title="患者评价" value="查看全部" is-link @click="handleClickShowAllComments"></van-cell>
+      <div style="margin-top: 8px" v-for="item in fewComments">
+        <div style="position: relative; display: flex; align-items: center; font-size: 12px; padding: 0 16px">
+          <div style="color: gray">{{ item.fuzzyName }}</div>
+          <div style="margin-left: 8px">
+            <van-rate
+                v-model="item.commentLevel"
+                :size="15"
+                color="#ffd21e"
+                void-icon="star"
+                void-color="#eee"
+            />
+          </div>
+          <div style="color: gray; position: absolute; right: 20px">
+            {{ item.commentTime }}
+          </div>
+        </div>
+        <div style="padding: 8px 16px; font-size: 12px; color: black">
+          {{ item.commentContent }}
+        </div>
+      </div>
+    </div>
+
+    <van-action-sheet v-model:show="showAllComments" title="患者评价">
+      <van-list
+          v-model:loading="commentLoading"
+          :finished="allComments.finished"
+          finished-text="没有更多了"
+          :offset="100"
+          @load="onCommentLoad">
+        <div style="margin-top: 8px; border-bottom: 1px solid lightgray" v-for="item in allComments.list">
+          <div style="position: relative; display: flex; align-items: center; font-size: 12px; padding: 0 16px">
+            <div style="color: gray">{{ item.fuzzyName }}</div>
+            <div style="margin-left: 8px">
+              <van-rate
+                  v-model="item.commentLevel"
+                  :size="15"
+                  color="#ffd21e"
+                  void-icon="star"
+                  void-color="#eee"
+              />
+            </div>
+            <div style="color: gray; position: absolute; right: 20px">
+              {{ item.commentTime }}
+            </div>
+          </div>
+          <div style="padding: 8px 16px; font-size: 12px; color: black">
+            {{ item.commentContent }}
+          </div>
+        </div>
+      </van-list>
+    </van-action-sheet>
+
   </window-size>
 </template>
 
@@ -116,7 +171,8 @@ import { collectDoctor, disCollectDoctor } from '../../../api/my-collection'
 import { getLocalOpenId } from '../../../utils/check-patient-id'
 import { genTextPortrait } from '../../../utils/portrait'
 import { getOneWeekText, getNextSevenDate } from '../../../utils/date'
-import { Toast } from 'vant'
+import { showToast } from 'vant'
+import {fetchDoctorComments} from "../../../api/comment";
 
 const router = useRouter()
 const deptCode = router.currentRoute.value.params.dept
@@ -197,7 +253,10 @@ const collectAction = () => {
   }
   if (data.doctorInfo.collected === 0) {
     collectDoctor(param).then(() => {
-      Toast.success('已收藏')
+      showToast({
+        message: '已收藏',
+        position: 'top'
+      })
       getDoctorInfo(doctorCode, openId).then((res) => {
         data.doctorInfo = res
         if (!res.portrait) {
@@ -207,7 +266,10 @@ const collectAction = () => {
     })
   } else {
     disCollectDoctor(param).then(() => {
-      Toast.success('已取消收藏')
+      showToast({
+        message: '已取消收藏',
+        position: 'top'
+      })
       getDoctorInfo(doctorCode, openId).then((res) => {
         data.doctorInfo = res
         if (!res.portrait) {
@@ -262,6 +324,32 @@ const showDoctorQrCode = () => {
   })
 }
 
+const fewComments = ref([])
+const showAllComments = ref(false)
+const commentLoading = ref(false);
+const allComments = reactive({
+  finished: false,
+  minId: null,
+  list: []
+})
+
+const handleClickShowAllComments = () => {
+  showAllComments.value = true
+  onCommentLoad()
+}
+const onCommentLoad = () => {
+  if (allComments.finished) {
+    return
+  }
+  fetchDoctorComments({doctorCode: doctorCode, pageSize: 20, minId: allComments.minId}).then(res => {
+    allComments.minId = res.minId
+    allComments.finished = res.finished
+    allComments.list = allComments.list.concat(res.list)
+    commentLoading.value = false;
+  })
+};
+
+
 onMounted(() => {
   getDoctorInfo(doctorCode, openId).then((res) => {
     data.doctorInfo = res
@@ -269,6 +357,12 @@ onMounted(() => {
       data.doctorInfo.portrait = genTextPortrait(res.doctorName)
     }
   })
+
+  fetchDoctorComments({doctorCode}).then(res => {
+    fewComments.value = res.list
+    allComments.finished = res.finished
+  })
+
   const param = {
     date: data.nextSevenDate[0].fullDate,
     deptCode: deptCode,

+ 9 - 3
src/views/hospital-service/appointment/PayAppointmentFee.vue

@@ -47,7 +47,7 @@ import store from '../../../store'
 import { reactive } from 'vue'
 import { getLocalOpenId } from '../../../utils/check-patient-id'
 import { wxPay } from '../../../utils/wx-pay'
-import { Toast } from 'vant'
+import { showToast } from 'vant'
 import router from '../../../router'
 import {savePrescription} from "../../../api/order-covid-exam";
 export default {
@@ -71,7 +71,10 @@ export default {
         apTime: data.appointment.apTime
       }
       wxPay(param).then((result) => {
-        Toast.success(result)
+        showToast({
+          message: result,
+          position: 'top'
+        })
         if (data.appointment.extra === 'covid19-exam') {
           savePrescription(data.appointment.patientId, 1).then(() => {
             router.push(`/unPaidList/${data.appointment.patientId}`)
@@ -80,7 +83,10 @@ export default {
           router.push('/hospitalService');
         }
       }).catch((result) => {
-        Toast.success(result)
+        showToast({
+          message: result,
+          position: 'top'
+        })
         router.push('/hospitalService')
       })
     }

+ 9 - 3
src/views/hospital-service/appointment/PayClinicAppointmentOrder.vue

@@ -51,7 +51,7 @@ import {onMounted, ref} from 'vue'
 import { getLocalOpenId } from '../../../utils/check-patient-id'
 import { wxPay } from '../../../utils/wx-pay'
 import { getMzyReqrecInfo } from '../../../api/appointment.js'
-import { Toast } from 'vant'
+import { showToast } from 'vant'
 import {useRouter} from "vue-router";
 export default {
   name: 'PayClinicAppointmentOrder',
@@ -76,10 +76,16 @@ export default {
         mzyRequestId: appointment.times
       }
       wxPay(param).then((result) => {
-        Toast.success(result)
+        showToast({
+          message: result,
+          position: 'top',
+        });
         router.push('/hospitalService')
       }).catch((result) => {
-        Toast.success(result)
+        showToast({
+          message: result,
+          position: 'top',
+        });
         router.push('/hospitalService')
       })
     }

+ 5 - 2
src/views/hospital-service/appointment/SelectDoctorAndDate.vue

@@ -58,7 +58,7 @@ import { getOneWeekText, getNextSevenDate } from '../../../utils/date'
 import { onMounted, reactive } from 'vue'
 import { getSourcesByDate, getDoctorSources } from '../../../api/appointment'
 import store from '../../../store'
-import {Dialog, Toast} from 'vant'
+import {showToast} from 'vant'
 export default {
   name: 'SelectDoctorAndDate',
   setup() {
@@ -116,7 +116,10 @@ export default {
     }
     const toDoctorArangement = (val) => {
       if (val.leftNum === 0) {
-        Toast.fail(val.doctorName + '医生已无号')
+        showToast({
+          message: '医生已无号',
+          position: 'top'
+        })
       } else {
         const to = '/doctorArrangement/' + data.dateSelected + '/' + deptCode + '/' + val.doctorCode
         router.push(to)

+ 6 - 3
src/views/hospital-service/appointment/management/RefundAppointment.vue

@@ -29,7 +29,7 @@
 <script>
 import {onMounted, ref} from 'vue'
 import {getMzyReqrecInfo, cancelReqrec} from '../../../../api/appointment.js'
-import {Dialog, Toast} from 'vant'
+import {showConfirmDialog, showToast} from 'vant'
 import {useRouter} from "vue-router";
 import {getDateDiff} from "../../../../utils/date";
 
@@ -46,12 +46,15 @@ export default {
     const disableRefundButton = ref(true)
 
     const revokeMzyReq = () => {
-      Dialog.confirm({
+      showConfirmDialog({
         title: '温馨提示',
         message: '是否确认退号退费?'
       }).then(() => {
         cancelReqrec(mzyReq.value).then(() => {
-          Toast.success('退号成功,您的资金已原路退回,请留意微信退款信息。');
+          showToast({
+            message: '退号成功,您的资金已原路退回,请留意微信退款信息。',
+            position: 'top',
+          });
           router.go(-1)
         })
       }).catch(() => {})

+ 3 - 3
src/views/hospital-service/assessments/ClinicSatisfiedAssessment.vue

@@ -30,7 +30,7 @@
 <script setup>
 import {reactive, ref} from "vue";
 import {submitClinicSatisfiedAssessment} from '../../../api/assessments'
-import {Dialog} from "vant";
+import {showDialog} from "vant";
 import {useRouter} from "vue-router";
 
 const router = useRouter()
@@ -79,8 +79,8 @@ const checkboxOptions2 = [
 
 const submitAnswer = () => {
     submitClinicSatisfiedAssessment(answer).then(res => {
-        disableSubmitButton.value = true
-        Dialog.alert({
+      disableSubmitButton.value = true
+      showDialog({
             title: '提示',
             message: '提交成功!',
         })

+ 5 - 5
src/views/hospital-service/assessments/Covid19Assessment.vue

@@ -92,7 +92,7 @@ import { getDate } from '../../../utils/date'
 import { getPatientInfo, submitCovidAssessment } from '../../../api/assessments'
 import { validateCovid19Answer } from '../../../utils/validate'
 import { savePrescription } from '../../../api/order-covid-exam'
-import { Dialog } from 'vant'
+import { showDialog } from 'vant'
 import allArea from '../../../utils/area'
 import { useRouter } from 'vue-router'
 
@@ -162,14 +162,14 @@ export default {
       const message = validateCovid19Answer(answer)
       if (message === '') {
         submitCovidAssessment(answer).then((res) => {
-          Dialog.alert({
+          showDialog({
             title: '提示',
             message: '提交成功!',
           }).then(() => {
             if (answer.patientId && from.value !== '') {
               if (from.value === 'register') {
                 if (res && res.length > 1) {
-                  Dialog.alert({
+                  showDialog({
                     title: '提示',
                     message: res,
                   }).then(() => {
@@ -190,7 +190,7 @@ export default {
           })
         })
       } else {
-        Dialog.alert({
+        showDialog({
           title: '提示',
           message: message,
         }).then(() => {
@@ -204,7 +204,7 @@ export default {
     onMounted(() => {
       const patientId = router.currentRoute.value.params.patientId
       if (!patientId || patientId === ':patientId') {
-        Dialog.alert({
+        showDialog({
           message: '请先绑定就诊卡!',
           title: '提示',
         }).then(() => {

+ 8 - 5
src/views/hospital-service/assessments/DepressionAssessment.vue

@@ -31,7 +31,7 @@ import store from '../../../store'
 import { onMounted, reactive, ref } from 'vue'
 import { getPatientInfo, submitDepressionAssessment } from '../../../api/assessments'
 import { validateDepressionAnswer } from '../../../utils/validate'
-import { Toast, Dialog } from 'vant'
+import { showToast, showDialog } from 'vant'
 import { useRouter } from 'vue-router'
 
 export default {
@@ -89,22 +89,25 @@ export default {
     const submit = () => {
       const valid = validateDepressionAnswer(answer)
       if (valid < 20) {
-        Toast.fail('有未填的选项')
+        showToast({
+          message: '有未填的选项',
+          position: 'top'
+        })
       } else {
         answer.score = valid
         submitDepressionAssessment(answer).then(() => {
           if (valid < 50) {
-            Dialog.alert({
+            showDialog({
               title: '恭喜',
               message: '没有抑郁的烦恼。',
             }).then(() => {})
           } else if (valid < 60) {
-            Dialog.alert({
+            showDialog({
               title: '注意',
               message: '需要引起注意,分数越高,抑郁倾向越明显。',
             }).then(() => {})
           } else {
-            Dialog.alert({
+            showDialog({
               title: '严重',
               message: '应该及时拜访心理医生,进行治疗。',
             }).then(() => {})

+ 175 - 175
src/views/hospital-service/assessments/InpatientSatisfiedAssessment.vue

@@ -1,216 +1,216 @@
 <template>
-    <window-size>
-        <div class="question-box">
-            <p>1-1、您对住院科室护理人员服务满意吗?</p>
-            <div style="margin-top: 4px">
-                <van-radio-group v-model="answer.item1" direction="horizontal">
-                    <van-radio name="A">满意</van-radio>
-                    <van-radio name="B">不满意</van-radio>
-                </van-radio-group>
-            </div>
-            <div v-show="answer.item1 === 'B'">
-                <p style="margin-top: 6px">1-2、您对住院科室护理人员哪些服务不满意?</p>
-                <van-checkbox-group v-model="answer.item2Arr" direction="horizontal">
-                    <van-checkbox
-                            shape="square"
-                            v-for="child in checkboxOptions1"
-                            :key="child.key"
-                            :name="child.key"
-                            style="margin-top: 5px"
-                    >{{ child.label }}
-                    </van-checkbox>
-                </van-checkbox-group>
-            </div>
-        </div>
-        <div class="question-box">
-            <p>2-1、您对住院科室医生服务满意吗?</p>
-            <div style="margin-top: 4px">
-                <van-radio-group v-model="answer.item3" direction="horizontal">
-                    <van-radio name="A">满意</van-radio>
-                    <van-radio name="B">不满意</van-radio>
-                </van-radio-group>
-            </div>
-            <div v-show="answer.item3 === 'B'">
-                <p style="margin-top: 6px">2-2、您对住院科室医生哪些服务不满意?</p>
-                <van-checkbox-group v-model="answer.item4Arr" direction="horizontal">
-                    <van-checkbox
-                            shape="square"
-                            v-for="child in checkboxOptions2"
-                            :key="child.key"
-                            :name="child.key"
-                            style="margin-top: 5px"
-                    >{{ child.label }}
-                    </van-checkbox>
-                </van-checkbox-group>
-            </div>
-        </div>
-        <div class="question-box">
-            <p>3-1、您对医院环境卫生满意吗?</p>
-            <div style="margin-top: 4px">
-                <van-radio-group v-model="answer.item5" direction="horizontal">
-                    <van-radio name="A">满意</van-radio>
-                    <van-radio name="B">不满意</van-radio>
-                </van-radio-group>
-            </div>
-            <div v-show="answer.item5 === 'B'">
-                <p style="margin-top: 6px">3-2、您对医院环境卫生哪些项目不满意?</p>
-                <van-checkbox-group v-model="answer.item6Arr" direction="horizontal">
-                    <van-checkbox
-                            shape="square"
-                            v-for="child in checkboxOptions3"
-                            :key="child.key"
-                            :name="child.key"
-                            style="margin-top: 5px"
-                    >{{ child.label }}
-                    </van-checkbox>
-                </van-checkbox-group>
-            </div>
-        </div>
-        <div class="question-box">
-            <p>4-1、您对医院食堂满意吗?</p>
-            <div style="margin-top: 4px">
-                <van-radio-group v-model="answer.item7" direction="horizontal">
-                    <van-radio name="A">满意</van-radio>
-                    <van-radio name="B">不满意</van-radio>
-                    <van-radio name="C">未接触</van-radio>
-                </van-radio-group>
-            </div>
-            <div v-show="answer.item7 === 'B'">
-                <p style="margin-top: 6px">4-2、您对医院环境卫生哪些项目不满意?</p>
-                <van-checkbox-group v-model="answer.item8Arr" direction="horizontal">
-                    <van-checkbox
-                            shape="square"
-                            v-for="child in checkboxOptions4"
-                            :key="child.key"
-                            :name="child.key"
-                            style="margin-top: 5px"
-                    >{{ child.label }}
-                    </van-checkbox>
-                </van-checkbox-group>
-            </div>
-        </div>
-        <div v-for="(item, index) in headQuestions" :key="item.key" class="question-box">
-            <p>{{ item.label }}</p>
-            <div style="margin-top: 4px">
-                <van-radio-group v-model="answer['item' + item.key]" direction="horizontal">
-                    <van-radio name="A">满意</van-radio>
-                    <van-radio name="B">不满意</van-radio>
-                    <van-radio name="C">未接触</van-radio>
-                </van-radio-group>
-            </div>
-            <div v-show="answer['item' + item.key] === 'B'">
-                <p style="margin-top: 6px">{{ tailQuestions[index].label }}</p>
-                <van-checkbox-group v-model="answer['item' + (item.key + 1) + 'Arr']" direction="horizontal">
-                    <van-checkbox
-                            shape="square"
-                            v-for="child in (item.key === 11 ? checkboxOptions2 : checkboxOptions)"
-                            :key="child.key"
-                            :name="child.key"
-                            style="margin-top: 5px"
-                    >{{ child.label }}
-                    </van-checkbox>
-                </van-checkbox-group>
-            </div>
-        </div>
-        <div style="height: 20px"></div>
-        <van-button type="primary" block :disabled="disableSubmitButton" @click="submitAnswer">提交</van-button>
-    </window-size>
+  <window-size>
+    <div class="question-box">
+      <p>1-1、您对住院科室护理人员服务满意吗?</p>
+      <div style="margin-top: 4px">
+        <van-radio-group v-model="answer.item1" direction="horizontal">
+          <van-radio name="A">满意</van-radio>
+          <van-radio name="B">不满意</van-radio>
+        </van-radio-group>
+      </div>
+      <div v-show="answer.item1 === 'B'">
+        <p style="margin-top: 6px">1-2、您对住院科室护理人员哪些服务不满意?</p>
+        <van-checkbox-group v-model="answer.item2Arr" direction="horizontal">
+          <van-checkbox
+              shape="square"
+              v-for="child in checkboxOptions1"
+              :key="child.key"
+              :name="child.key"
+              style="margin-top: 5px"
+          >{{ child.label }}
+          </van-checkbox>
+        </van-checkbox-group>
+      </div>
+    </div>
+    <div class="question-box">
+      <p>2-1、您对住院科室医生服务满意吗?</p>
+      <div style="margin-top: 4px">
+        <van-radio-group v-model="answer.item3" direction="horizontal">
+          <van-radio name="A">满意</van-radio>
+          <van-radio name="B">不满意</van-radio>
+        </van-radio-group>
+      </div>
+      <div v-show="answer.item3 === 'B'">
+        <p style="margin-top: 6px">2-2、您对住院科室医生哪些服务不满意?</p>
+        <van-checkbox-group v-model="answer.item4Arr" direction="horizontal">
+          <van-checkbox
+              shape="square"
+              v-for="child in checkboxOptions2"
+              :key="child.key"
+              :name="child.key"
+              style="margin-top: 5px"
+          >{{ child.label }}
+          </van-checkbox>
+        </van-checkbox-group>
+      </div>
+    </div>
+    <div class="question-box">
+      <p>3-1、您对医院环境卫生满意吗?</p>
+      <div style="margin-top: 4px">
+        <van-radio-group v-model="answer.item5" direction="horizontal">
+          <van-radio name="A">满意</van-radio>
+          <van-radio name="B">不满意</van-radio>
+        </van-radio-group>
+      </div>
+      <div v-show="answer.item5 === 'B'">
+        <p style="margin-top: 6px">3-2、您对医院环境卫生哪些项目不满意?</p>
+        <van-checkbox-group v-model="answer.item6Arr" direction="horizontal">
+          <van-checkbox
+              shape="square"
+              v-for="child in checkboxOptions3"
+              :key="child.key"
+              :name="child.key"
+              style="margin-top: 5px"
+          >{{ child.label }}
+          </van-checkbox>
+        </van-checkbox-group>
+      </div>
+    </div>
+    <div class="question-box">
+      <p>4-1、您对医院食堂满意吗?</p>
+      <div style="margin-top: 4px">
+        <van-radio-group v-model="answer.item7" direction="horizontal">
+          <van-radio name="A">满意</van-radio>
+          <van-radio name="B">不满意</van-radio>
+          <van-radio name="C">未接触</van-radio>
+        </van-radio-group>
+      </div>
+      <div v-show="answer.item7 === 'B'">
+        <p style="margin-top: 6px">4-2、您对医院环境卫生哪些项目不满意?</p>
+        <van-checkbox-group v-model="answer.item8Arr" direction="horizontal">
+          <van-checkbox
+              shape="square"
+              v-for="child in checkboxOptions4"
+              :key="child.key"
+              :name="child.key"
+              style="margin-top: 5px"
+          >{{ child.label }}
+          </van-checkbox>
+        </van-checkbox-group>
+      </div>
+    </div>
+    <div v-for="(item, index) in headQuestions" :key="item.key" class="question-box">
+      <p>{{ item.label }}</p>
+      <div style="margin-top: 4px">
+        <van-radio-group v-model="answer['item' + item.key]" direction="horizontal">
+          <van-radio name="A">满意</van-radio>
+          <van-radio name="B">不满意</van-radio>
+          <van-radio name="C">未接触</van-radio>
+        </van-radio-group>
+      </div>
+      <div v-show="answer['item' + item.key] === 'B'">
+        <p style="margin-top: 6px">{{ tailQuestions[index].label }}</p>
+        <van-checkbox-group v-model="answer['item' + (item.key + 1) + 'Arr']" direction="horizontal">
+          <van-checkbox
+              shape="square"
+              v-for="child in (item.key === 11 ? checkboxOptions2 : checkboxOptions)"
+              :key="child.key"
+              :name="child.key"
+              style="margin-top: 5px"
+          >{{ child.label }}
+          </van-checkbox>
+        </van-checkbox-group>
+      </div>
+    </div>
+    <div style="height: 20px"></div>
+    <van-button type="primary" block :disabled="disableSubmitButton" @click="submitAnswer">提交</van-button>
+  </window-size>
 </template>
 <script setup>
 import {reactive, ref} from "vue";
 import {submitInpatientSatisfiedAssessment} from '../../../api/assessments'
-import {Dialog} from "vant";
+import {showDialog} from "vant";
 import {useRouter} from "vue-router";
 
 const router = useRouter()
 const answer = reactive({
-    patientId: router.currentRoute.value.params.patientId
+  patientId: router.currentRoute.value.params.patientId
 })
 const disableSubmitButton = ref(false)
 
 const checkboxOptions1 = [
-    {key: 'A', label: '技术水平'},
-    {key: 'B', label: '隐私保护'},
-    {key: 'C', label: '服务态度'},
-    {key: 'D', label: '沟通解释'},
-    {key: 'E', label: '病情巡视'},
-    {key: 'F', label: '服装礼仪'},
-    {key: 'G', label: '其他'},
+  {key: 'A', label: '技术水平'},
+  {key: 'B', label: '隐私保护'},
+  {key: 'C', label: '服务态度'},
+  {key: 'D', label: '沟通解释'},
+  {key: 'E', label: '病情巡视'},
+  {key: 'F', label: '服装礼仪'},
+  {key: 'G', label: '其他'},
 ]
 
 const checkboxOptions2 = [
-    {key: 'A', label: '技术水平'},
-    {key: 'B', label: '隐私保护'},
-    {key: 'C', label: '服务态度'},
-    {key: 'D', label: '沟通解释'},
-    {key: 'E', label: '按时查房'},
-    {key: 'F', label: '服装礼仪'},
-    {key: 'G', label: '其他'},
+  {key: 'A', label: '技术水平'},
+  {key: 'B', label: '隐私保护'},
+  {key: 'C', label: '服务态度'},
+  {key: 'D', label: '沟通解释'},
+  {key: 'E', label: '按时查房'},
+  {key: 'F', label: '服装礼仪'},
+  {key: 'G', label: '其他'},
 ]
 
 const checkboxOptions3 = [
-    {key: 'A', label: '卫生情况'},
-    {key: 'B', label: '布局不合理'},
-    {key: 'C', label: '服务态度'},
-    {key: 'D', label: '舒适度'},
-    {key: 'E', label: '按时清理'},
-    {key: 'F', label: '服装礼仪'},
-    {key: 'G', label: '其他'},
+  {key: 'A', label: '卫生情况'},
+  {key: 'B', label: '布局不合理'},
+  {key: 'C', label: '服务态度'},
+  {key: 'D', label: '舒适度'},
+  {key: 'E', label: '按时清理'},
+  {key: 'F', label: '服装礼仪'},
+  {key: 'G', label: '其他'},
 ]
 
 const checkboxOptions4 = [
-    {key: 'A', label: '卫生情况'},
-    {key: 'B', label: '口味'},
-    {key: 'C', label: '菜品'},
-    {key: 'D', label: '服务态度'},
-    {key: 'F', label: '服装礼仪'},
-    {key: 'G', label: '其他'},
+  {key: 'A', label: '卫生情况'},
+  {key: 'B', label: '口味'},
+  {key: 'C', label: '菜品'},
+  {key: 'D', label: '服务态度'},
+  {key: 'F', label: '服装礼仪'},
+  {key: 'G', label: '其他'},
 ]
 
 const headQuestions = [
-    {key: 9, label: '5-1、您对药剂科工作人员服务满意吗?'},
-    {key: 11, label: '6-1、您对放射科工作人员服务满意吗?'},
-    {key: 13, label: '7-1、您对超声影像科工作人员服务满意吗?'},
-    {key: 15, label: '8-1、您对检验科工作人员服务满意吗?'},
-    {key: 17, label: '9-1、您对收费窗口工作人员服务满意吗?'},
-    {key: 19, label: '10-1、您对门诊医护人员服务满意吗?'},
-    {key: 21, label: '11-1、您对急诊医护人员服务满意吗?'},
+  {key: 9, label: '5-1、您对药剂科工作人员服务满意吗?'},
+  {key: 11, label: '6-1、您对放射科工作人员服务满意吗?'},
+  {key: 13, label: '7-1、您对超声影像科工作人员服务满意吗?'},
+  {key: 15, label: '8-1、您对检验科工作人员服务满意吗?'},
+  {key: 17, label: '9-1、您对收费窗口工作人员服务满意吗?'},
+  {key: 19, label: '10-1、您对门诊医护人员服务满意吗?'},
+  {key: 21, label: '11-1、您对急诊医护人员服务满意吗?'},
 ]
 
 const tailQuestions = [
-    {key: 10, label: '5-2、您对药剂科工作人员哪些服务不满意?'},
-    {key: 12, label: '6-2、您对放射科工作人员哪些服务不满意?'},
-    {key: 14, label: '7-2、您对超声影像科工作人员哪些服务不满意?'},
-    {key: 16, label: '8-2、您对检验科工作人员哪些服务不满意?'},
-    {key: 18, label: '9-2、您对收费窗口工作人员哪些服务不满意?'},
-    {key: 20, label: '10-2、您对门诊医护人员哪些服务不满意?'},
-    {key: 22, label: '11-2、您对急诊医护人员哪些服务不满意?'},
+  {key: 10, label: '5-2、您对药剂科工作人员哪些服务不满意?'},
+  {key: 12, label: '6-2、您对放射科工作人员哪些服务不满意?'},
+  {key: 14, label: '7-2、您对超声影像科工作人员哪些服务不满意?'},
+  {key: 16, label: '8-2、您对检验科工作人员哪些服务不满意?'},
+  {key: 18, label: '9-2、您对收费窗口工作人员哪些服务不满意?'},
+  {key: 20, label: '10-2、您对门诊医护人员哪些服务不满意?'},
+  {key: 22, label: '11-2、您对急诊医护人员哪些服务不满意?'},
 ]
 
 const checkboxOptions = [
-    {key: 'A', label: '叫号服务'},
-    {key: 'B', label: '等待时长'},
-    {key: 'C', label: '服务态度'},
-    {key: 'D', label: '沟通解释'},
-    {key: 'E', label: '及时响应'},
-    {key: 'F', label: '服装礼仪'},
-    {key: 'G', label: '准确率'},
+  {key: 'A', label: '叫号服务'},
+  {key: 'B', label: '等待时长'},
+  {key: 'C', label: '服务态度'},
+  {key: 'D', label: '沟通解释'},
+  {key: 'E', label: '及时响应'},
+  {key: 'F', label: '服装礼仪'},
+  {key: 'G', label: '准确率'},
 ]
 
 const submitAnswer = () => {
-    submitInpatientSatisfiedAssessment(answer).then(res => {
-        disableSubmitButton.value = true
-        Dialog.alert({
-            title: '提示',
-            message: '提交成功!',
-        })
-    })
+  submitInpatientSatisfiedAssessment(answer).then(res => {
+    disableSubmitButton.value = true
+    showDialog({
+      title: '提示',
+      message: '提交成功!',
+    }).then(() => {})
+  })
 }
 </script>
 
 <style scoped>
 .question-box {
-    padding: 6px 0 12px 6px;
-    border-bottom: 1px dashed gray;
+  padding: 6px 0 12px 6px;
+  border-bottom: 1px dashed gray;
 }
 </style>

+ 3 - 3
src/views/hospital-service/covid-exam/CheckExamResult.vue

@@ -22,7 +22,7 @@
 <script>
 import { onMounted, ref } from 'vue'
 import { checkCovidExamIndexBySocialNo } from '../../../api/check-exam'
-import { Toast } from 'vant'
+import { showToast } from 'vant'
 import { useRouter } from 'vue-router'
 import { getPatientInfo } from '../../../api/assessments'
 import { computed } from '@vue/reactivity'
@@ -38,10 +38,10 @@ export default {
     })
     const startQuery = () => {
       if (!socialNo.value) {
-        Toast({
+        showToast({
           message: '请输入正确的身份证号码',
           position: 'top',
-        })
+        });
       } else {
         checkCovidExamIndexBySocialNo(socialNo.value).then((res) => {
           store.commit('SET_COVIDEXAMIDCARD', socialNo.value)

+ 14 - 17
src/views/hospital-service/covid-vaccinate/CovidVaccinate.vue

@@ -22,7 +22,7 @@
 import router from '../../../router'
 import { computed, onMounted, ref } from 'vue'
 import { selectVaccinates } from '../../../api/covid-vaccinate'
-import { Dialog, Toast } from 'vant'
+import { showConfirmDialog, showToast } from 'vant'
 export default {
   setup() {
     let patientId = router.currentRoute.value.params.patientId
@@ -35,32 +35,29 @@ export default {
     }
     const toCovidVaccinateAppointment = (item) => {
       if (item.minLeftNum < 1) {
-        Toast({
+        showToast({
           message: '该疫苗已无库存,暂时无法预约,敬请谅解。',
           position: 'top',
-          duration: 3000,
-        })
+        });
         return
       }
-      Dialog.confirm({
+      showConfirmDialog({
         title: '温馨提示',
         message: item.bookTip,
         messageAlign: 'left',
         confirmButtonText: '继续预约',
         cancelButtonText: '重选疫苗',
-      })
-        .then(() => {
-          router.push({
-            name: 'excuteAppointment',
-            params: {
-              patientId: patientId,
-              vaccinateCode: item.vaccinateCode,
-              vaccinateName: item.vaccinateName,
-              vaccinateFactory: item.vaccinateFactory,
-            },
-          })
+      }).then(() => {
+        router.push({
+          name: 'excuteAppointment',
+          params: {
+            patientId: patientId,
+            vaccinateCode: item.vaccinateCode,
+            vaccinateName: item.vaccinateName,
+            vaccinateFactory: item.vaccinateFactory,
+          },
         })
-        .catch(() => {})
+      }).catch(() => {})
     }
 
     onMounted(() => {

+ 9 - 9
src/views/hospital-service/covid-vaccinate/ExcuteAppointment.vue

@@ -54,7 +54,7 @@ import {
   getPatientInfoAndJobCategories,
   submitVaccinateAppointment,
 } from '../../../api/covid-vaccinate'
-import { Dialog, Toast } from 'vant'
+import { showDialog, showToast } from 'vant'
 import { isValidIdcard, isValidPhone } from '../../../utils/validate'
 export default {
   setup() {
@@ -128,35 +128,35 @@ export default {
 
     const submit = () => {
       if (!vaccinate.vaccinateCode || !vaccinate.vaccinateFactory) {
-        Toast({
+        showToast({
           message: '请选择疫苗厂家!',
           position: 'top',
         })
         return
       }
       if (!vaccinate.name) {
-        Toast({
+        showToast({
           message: '请输入姓名!',
           position: 'top',
         })
         return
       }
       if (!isValidPhone(vaccinate.phone)) {
-        Toast({
+        showToast({
           message: '请输入正确的手机号码',
           position: 'top',
         })
         return
       }
       if (!isValidIdcard(vaccinate.socialNo)) {
-        Toast({
+        showToast({
           message: '请输入正确的身份证号码',
           position: 'top',
         })
         return
       }
       if (!vaccinate.corpName) {
-        Toast({
+        showToast({
           message: '请输入工作单位,没有工作单位请填‘无’',
           position: 'top',
           duration: 3000,
@@ -164,7 +164,7 @@ export default {
         return
       }
       if (!vaccinate.jobCategory) {
-        Toast({
+        showToast({
           message: '请选择工作性质,如不确定请选‘其他人员’,如无工作请选择‘家务及待业人员’',
           position: 'top',
           duration: 3000,
@@ -172,14 +172,14 @@ export default {
         return
       }
       if (!vaccinate.executeDate) {
-        Toast({
+        showToast({
           message: '请选择接种日期',
           position: 'top',
         })
         return
       }
       submitVaccinateAppointment(vaccinate).then((res) => {
-        Dialog.alert({
+        showDialog({
           title: '提示',
           message: res,
         }).then(() => {

+ 2 - 2
src/views/hospital-service/electronic_health_card/ElectronicHealthCardHome.vue

@@ -21,7 +21,7 @@
 <script>
 import {computed, onMounted, ref} from "vue";
 import {getRegisteredCards} from '../../../api/electronic-health-card'
-import {Dialog} from "vant";
+import {showDialog} from "vant";
 import ElectronicHealthCard from '../../../components/electronic-health-card/index.vue'
 import router from '../../../router/index'
 export default {
@@ -70,7 +70,7 @@ export default {
           }
         })
       } else {
-        Dialog.alert({
+        showDialog({
           title: '提示',
           message: '缺少关键要素值,请从微信公众号重新打开。',
         }).then(() => {

+ 5 - 2
src/views/hospital-service/electronic_health_card/NewUserReg.vue

@@ -37,7 +37,7 @@ import {onMounted, reactive, ref} from "vue";
 import {register} from '../../../api/electronic-health-card'
 import {analyseIdCard} from "../../../api/electronic-health-card";
 import {resize} from "../../../utils/image";
-import {Toast} from "vant";
+import {showToast} from "vant";
 import {getPatientIdByOpenId} from "../../../api/patient-id-cards";
 import store from "../../../store";
 
@@ -75,7 +75,10 @@ export default {
 
     const applyHealthCard = () => {
       register(userinfo).then(res => {
-        Toast.success('申领成功。')
+        showToast({
+          message: '申领成功。',
+          position: 'top'
+        })
         getPatientIdByOpenId(localStorage.getItem('openId')).then((cards) => {
           if (cards.length > 0) {
             store.commit('SET_PATIENTCARDS', cards)

+ 5 - 2
src/views/hospital-service/health-cart/BookExam.vue

@@ -32,7 +32,7 @@
 </template>
 
 <script>
-import { Toast } from 'vant'
+import { showToast } from 'vant'
 import { getBookTip, saveBookPrescription } from '../../../api/bookable'
 import router from '../../../router'
 import store from '../../../store'
@@ -71,7 +71,10 @@ export default {
       showTips.value = false
       saveBookPrescription(bookItem).then((res) => {
         store.commit('SET_YJREQNO', res)
-        Toast.success('自助开单成功。')
+        showToast({
+          message: '自助开单成功。',
+          position: 'top',
+        });
         router.push('/unPaidList/' + bookItem.patientId)
       })
     }

+ 3 - 3
src/views/hospital-service/health-cart/ExaminationCategory.vue

@@ -8,7 +8,7 @@
 
 <script>
 import { useRouter } from 'vue-router'
-import {Dialog} from "vant";
+import {showConfirmDialog, showDialog} from "vant";
 import store from "../../../store";
 import {getDoctorSources} from "../../../api/appointment.js";
 import {getTodayAndWeek} from "../../../utils/date";
@@ -20,7 +20,7 @@ export default {
     const patientId = router.currentRoute.value.params.patientId
     const dateAndWeek = getTodayAndWeek()
     const beforeCovidExam = () => {
-      Dialog.confirm({
+      showConfirmDialog({
         title: '温馨提示',
         message: '是否确认自助下单核酸检测?',
         confirmButtonText: '确认',
@@ -40,7 +40,7 @@ export default {
           getDoctorSources(params).then(res2 => {
             simpleClinic(res2[0])
           }).catch(() => {
-            Dialog.alert({
+            showDialog({
               title: '提示',
               message: '没有获取到今日简易门诊号源,请稍后再试。',
             }).then(() => {})

+ 6 - 3
src/views/hospital-service/health-cart/ResignOrRefund.vue

@@ -39,7 +39,7 @@
 import { onMounted, ref } from 'vue'
 import router from '../../../router'
 import { applyRefund, changeYjReqTime, getOtherTimeForRejectedReq, getRejectedYjReq } from '../../../api/bookable'
-import { Dialog, Toast } from 'vant'
+import { showDialog, showToast } from 'vant'
 export default {
   setup() {
     const reqNo = router.currentRoute.value.params.reqNo
@@ -62,12 +62,15 @@ export default {
         endTime: checked.value.endTime,
       }
       changeYjReqTime(param).then((res) => {
-        Toast.success(res)
+        showToast({
+          message: res,
+          position: 'top'
+        })
       })
     }
     const doRefund = () => {
       applyRefund(reqNo).then((res) => {
-        Dialog.alert({
+        showDialog({
           title: '温馨提示',
           message: res,
         }).then(() => {

+ 10 - 4
src/views/hospital-service/inpatient-service/DisplayPrepaid.vue

@@ -72,7 +72,7 @@
 import { ref } from 'vue'
 import { getLocalOpenId } from '../../../utils/check-patient-id'
 import { wxPay } from '../../../utils/wx-pay'
-import { Dialog, Toast } from 'vant'
+import { showConfirmDialog, showToast } from 'vant'
 import { useRouter } from 'vue-router'
 export default {
   setup() {
@@ -92,7 +92,7 @@ export default {
       if (otherAmount.value) {
         prepaidAmount.value = otherAmount.value
       }
-      Dialog.confirm({
+      showConfirmDialog({
         message: '您正在为【' + params.name + '】缴纳住院预交金,金额为【' + prepaidAmount.value + '】。确认支付吗?',
         title: '提示',
         confirmButtonText: '支付',
@@ -116,11 +116,17 @@ export default {
       }
       wxPay(param)
         .then((result) => {
-          Toast.success(result)
+          showToast({
+            message: result,
+            position: 'top'
+          })
           router.push('/hospitalService')
         })
         .catch((result) => {
-          Toast.success(result)
+          showToast({
+            message: result,
+            position: 'top'
+          })
           router.push('/hospitalService')
         })
     }

+ 101 - 20
src/views/hospital-service/pay-mz-fee/UnPaidDetail.vue

@@ -51,32 +51,65 @@
     <van-button block type="primary" @click="wechatPay">微信支付(¥ {{ makePrice(params.selfAmt) }})</van-button>
 
     <van-dialog
-      v-model:show="showBillInfo"
-      title="缴费成功提醒"
-      show-confirm-button
-      :show-cancel-button="false"
-      @closed="router.push('/hospitalService')"
+        v-model:show="showBillInfo"
+        title="缴费成功提醒"
+        show-confirm-button
+        :show-cancel-button="false"
+        @closed="router.push('/hospitalService')"
     >
       <div style="height: 12px"></div>
-      <van-cell title="用户姓名" :value="params.patName" />
-      <van-cell title="订单号" :value="params.hisOrdNum" />
-      <van-cell title="缴费金额" :value="makePrice(params.selfAmt)" />
-      <van-cell title="医生" :value="params.doctorName" />
-      <van-cell title="科室" :value="params.deptName" />
-      <van-cell title="医院" value="长沙泰和医院" />
-      <van-cell title="缴费时间" :value="params.paytime" />
+      <van-cell title="用户姓名" :value="params.patName"/>
+      <van-cell title="订单号" :value="params.hisOrdNum"/>
+      <van-cell title="缴费金额" :value="makePrice(params.selfAmt)"/>
+      <van-cell title="医生" :value="params.doctorName"/>
+      <van-cell title="科室" :value="params.deptName"/>
+      <van-cell title="医院" value="长沙泰和医院"/>
+      <van-cell title="缴费时间" :value="params.paytime"/>
+    </van-dialog>
+
+    <van-dialog
+        v-model:show="showRate"
+        title="请您对医生作出评价"
+        show-confirm-button
+        show-cancel-button
+        confirm-button-text="提交"
+        @cancel="router.push('/hospitalService')"
+        @confirm="submitComment">
+      <div style="padding: 20px">
+        <div>
+          评分:
+          <van-rate
+              v-model="comment.commentLevel"
+              :size="20"
+              color="#ffd21e"
+              void-icon="star"
+              void-color="#eee"
+          />
+          <span style="margin-left: 12px; font-size: 12px; color: gray">({{rateLevelExplain}})</span>
+        </div>
+        <van-field
+            v-model="comment.commentContent"
+            rows="5"
+            autosize
+            type="textarea"
+            placeholder="请在此输入评价内容..."
+            style="border: 1px solid lightgray; border-radius: 5px; margin-top: 12px"
+        />
+      </div>
     </van-dialog>
   </window-size>
 </template>
 
 <script>
-import { useRouter } from 'vue-router'
-import { getUnPaidDetail } from '../../../api/pay-mz-fee'
-import { onMounted, ref } from 'vue'
-import { getLocalOpenId } from '../../../utils/check-patient-id'
-import { wxPay } from '../../../utils/wx-pay'
+import {useRouter} from 'vue-router'
+import {getUnPaidDetail} from '../../../api/pay-mz-fee'
+import {computed, onMounted, reactive, ref} from 'vue'
+import {getLocalOpenId} from '../../../utils/check-patient-id'
+import {wxPay} from '../../../utils/wx-pay'
 import store from '../../../store'
-import { Toast } from 'vant'
+import {showToast} from 'vant';
+import {commitNewComment} from "../../../api/comment";
+
 export default {
   name: 'UnPaidDetail',
   setup() {
@@ -84,6 +117,43 @@ export default {
     const params = router.currentRoute.value.params
     const fees = ref([])
     const showBillInfo = ref(false)
+    const showRate = ref(false)
+    const comment = reactive({
+      commentLevel: 5,
+      commentContent: '',
+      doctorName: '',
+      hisOrdNum: '',
+      patientName: '',
+      patientId: ''
+    })
+    const rateLevelExplain = computed(() => {
+      switch (comment.commentLevel) {
+        case 5:
+          return '非常满意'
+        case 4:
+          return '满意'
+        case 3:
+          return '一般'
+        case 2:
+          return '不满意'
+        case 1:
+          return '很不满意'
+      }
+    })
+    const submitComment = () => {
+      comment.doctorCode = params.doctorCode
+      comment.doctorName = params.doctorName
+      comment.hisOrdNum = params.hisOrdNum
+      comment.patientId = params.patientId
+      comment.patientName = params.patName
+      commitNewComment(comment).then(res => {
+        showToast({
+          message: res,
+          position: 'top',
+        });
+        router.push('/hospitalService')
+      })
+    }
     const wechatPay = () => {
       let bodyText = '门诊缴费'
       if (fees.value.length === 1) {
@@ -102,8 +172,15 @@ export default {
         params.paytime = result.payDatetime
         showBillInfo.value = true
       }).catch((result) => {
-        Toast.success(result)
-        router.push('/hospitalService')
+        showToast({
+          message: result,
+          position: 'top',
+        });
+        if (params.doctorCode === '99999') {
+          router.push('/hospitalService')
+        } else {
+          showRate.value = true
+        }
       })
     }
     onMounted(() => {
@@ -116,9 +193,13 @@ export default {
       params,
       fees,
       showBillInfo,
+      showRate,
+      comment,
+      rateLevelExplain,
       makePrice,
       makeMoney,
       wechatPay,
+      submitComment,
     }
   },
 }

+ 1 - 0
src/views/hospital-service/pay-mz-fee/UnPaidList.vue

@@ -34,6 +34,7 @@ export default {
           hisOrdNum: item.hisOrdNum,
           patName: item.patName,
           deptName: item.deptName,
+          doctorCode: item.doctorCode,
           doctorName: item.doctorName,
           totalAmt: item.totalAmt,
           selfAmt: item.selfAmt,

+ 5 - 2
src/views/hospital-service/physical-exam/PhysicalExamIndex.vue

@@ -25,7 +25,7 @@ import {onMounted, ref, Ref} from "vue";
 import {useStore} from "vuex";
 import axios from "axios";
 import leaveWx from '../../../assets/leave_weixin.png'
-import {Toast} from "vant";
+import {showToast} from "vant";
 
 const store: object = useStore();
 const router: object = useRouter();
@@ -97,7 +97,10 @@ const handleClickIndex = (tjIndex:object): void => {
       link.click()
       document.body.removeChild(link)
     } else {
-      Toast.fail('没有查询到可导出的体检报告。')
+      showToast({
+        message: '没有查询到可导出的体检报告。',
+        position: 'top',
+      });
     }
   }).catch((error) => {
     console.error(error)

+ 7 - 4
src/views/isolations/StudentInspection.vue

@@ -50,7 +50,7 @@ import { reactive, ref } from 'vue'
 import wxPay from '../../assets/isolations/wxpay-xh.png'
 import { isValidIdcard, isValidPhone } from '../../utils/validate'
 import { saveStudentInspection } from '../../api/isolations'
-import { Toast } from 'vant'
+import { showToast } from 'vant'
 export default {
   setup() {
     const student = reactive({})
@@ -96,7 +96,7 @@ export default {
     const beforeShowQrcode = () => {
       const message = validate()
       if (message) {
-        Toast({
+        showToast({
           message,
           position: 'top',
         })
@@ -108,13 +108,16 @@ export default {
     const saveTjInfo = () => {
       const message = validate()
       if (message) {
-        Toast({
+        showToast({
           message,
           position: 'top',
         })
       } else {
         saveStudentInspection(student).then((res) => {
-          Toast.success(res)
+          showToast({
+            message: res,
+            position: 'top'
+          })
         })
       }
     }

+ 10 - 4
src/views/mine/patient-id-cards/BindPatientCard.vue

@@ -92,7 +92,7 @@ import allArea from '../../../utils/area'
 import { getLocalOpenId } from '../../../utils/check-patient-id'
 import { bindPatientId, hasValidIdCard } from '../../../api/patient-id-cards'
 import { validateBindPatientId } from '../../../utils/validate'
-import { Dialog, Toast } from 'vant'
+import { showDialog, showToast } from 'vant'
 import router from '../../../router'
 export default {
   name: 'BindPatientCard',
@@ -141,7 +141,7 @@ export default {
     const beforeBindCard = () => {
       const validate = validateBindPatientId(card)
       if (validate !== 'success') {
-        Dialog.alert({
+        showDialog({
           title: '提示',
           message: validate,
         })
@@ -164,7 +164,10 @@ export default {
     const bindCard = () => {
       bindPatientId(card).then((res) => {
         if (res.code === 0) {
-          Toast.success('绑定成功')
+          showToast({
+            message: '绑定成功',
+            position: 'top'
+          })
           store.commit('SET_PATIENTCARDS', res.cards)
           router.go(-1)
         } else {
@@ -181,7 +184,10 @@ export default {
           card.cardType = 1
           card.cardNo = item.patientId
           bindPatientId(card).then((res) => {
-            Toast.success('绑定成功')
+            showToast({
+              message: '绑定成功',
+              position: 'top'
+            })
             store.commit('SET_PATIENTCARDS', res.cards)
             router.go(-1)
           })

+ 9 - 9
src/views/mine/patient-id-cards/CreatePatientCard.vue

@@ -76,7 +76,7 @@ import capImg from '../../../assets/capture-img.png'
 import allArea from '../../../utils/area'
 import { readImage, readInput } from '../../../api/patient-id-cards'
 import { isValidIdcard, isValidPhone } from '../../../utils/validate'
-import { Toast } from 'vant'
+import { showToast } from 'vant'
 import router from '../../../router'
 import { getLocalOpenId } from '../../../utils/check-patient-id'
 import { resize } from '../../../utils/image'
@@ -156,7 +156,7 @@ export default {
           resolve(false)
         } else {
           if (!inputInfo.name) {
-            Toast({
+            showToast({
               message: '请输入姓名',
               position: 'top',
             })
@@ -164,7 +164,7 @@ export default {
             return
           }
           if (!isValidIdcard(inputInfo.socialNo) && !isValidIdcard(inputInfo.guardIdNo)) {
-            Toast({
+            showToast({
               message: '请输入正确的身份证号码',
               position: 'top',
             })
@@ -172,7 +172,7 @@ export default {
             return
           }
           if (!isValidPhone(inputInfo.phone)) {
-            Toast({
+            showToast({
               message: '请输入正确的手机号码',
               position: 'top',
             })
@@ -180,7 +180,7 @@ export default {
             return
           }
           if (!inputInfo.sex) {
-            Toast({
+            showToast({
               message: '请选择性别',
               position: 'top',
             })
@@ -188,7 +188,7 @@ export default {
             return
           }
           if (!inputInfo.province || !inputInfo.city) {
-            Toast({
+            showToast({
               message: '请选择住址地区',
               position: 'top',
             })
@@ -196,7 +196,7 @@ export default {
             return
           }
           if (!inputInfo.street) {
-            Toast({
+            showToast({
               message: '请输入街道、小区',
               position: 'top',
             })
@@ -204,7 +204,7 @@ export default {
             return
           }
           if (inputInfo.guardName && !inputInfo.birthday) {
-            Toast({
+            showToast({
               message: '请输入儿童出生日期',
               position: 'top',
             })
@@ -214,7 +214,7 @@ export default {
           setTimeout(() => {
             readInput(inputInfo)
               .then((res) => {
-                Toast.success('绑卡成功!')
+                showToast.success('绑卡成功!')
                 store.commit('SET_PATIENTCARDS', res.cards)
                 resolve(true)
                 router.go(-1)

+ 24 - 17
src/views/mine/patient-id-cards/PatientCardInfo.vue

@@ -32,7 +32,7 @@
 import store from '../../../store'
 import {computed, onMounted, ref} from 'vue'
 import {useRouter} from 'vue-router'
-import {Dialog, Toast} from 'vant'
+import {showConfirmDialog, showToast} from 'vant'
 import {
   relieveBindCard,
   relieveBindCardButCanceled,
@@ -66,7 +66,10 @@ export default {
     const setThisDefaultCard = () => {
       const openId = getLocalOpenId()
       setDefaultCard(card.value.patientId, openId).then(() => {
-        Toast.success('设置成功')
+        showToast({
+          message: '设置成功',
+          position: 'top'
+        })
         checkPatientId()
       })
     }
@@ -79,7 +82,7 @@ export default {
           resolve(false)
         } else {
           if (!card.value.name) {
-            Toast({
+            showToast({
               message: '请输入姓名',
               position: 'top',
             })
@@ -87,7 +90,7 @@ export default {
             return
           }
           if (!isValidIdcard(card.value.socialNo)) {
-            Toast({
+            showToast({
               message: '请输入正确的身份证号码',
               position: 'top',
             })
@@ -95,7 +98,7 @@ export default {
             return
           }
           if (!isValidPhone(card.value.phone)) {
-            Toast({
+            showToast({
               message: '请输入正确的手机号码',
               position: 'top',
             })
@@ -105,7 +108,10 @@ export default {
           setTimeout(() => {
             updateBindInfo(card.value)
               .then(() => {
-                Toast.success('修改个人信息成功!')
+                showToast({
+                  message: '修改个人信息成功!',
+                  position: 'top'
+                })
                 resolve(true)
               })
               .catch(() => {
@@ -115,21 +121,22 @@ export default {
         }
       })
     const unbindCard = () => {
-      Dialog.confirm({
+      showConfirmDialog({
         title: '提示',
         message: '是否确定解除绑定?',
-      })
-        .then(() => {
-          card.value.openId = getLocalOpenId()
-          relieveBindCard(card.value).then((res) => {
-            Toast.success('解除绑定成功!')
-            store.commit('SET_PATIENTCARDS', res)
-            router.go(-1)
+      }).then(() => {
+        card.value.openId = getLocalOpenId()
+        relieveBindCard(card.value).then((res) => {
+          showToast({
+            message: '解除绑定成功!',
+            position: 'top'
           })
+          store.commit('SET_PATIENTCARDS', res)
+          router.go(-1)
         })
-        .catch(() => {
-          relieveBindCardButCanceled(card.value)
-        })
+      }).catch(() => {
+        relieveBindCardButCanceled(card.value)
+      })
     }
 
     const drawQrcode = (patNo) => {