2 Revize bbee31b39a ... a2054c6d0e

Autor SHA1 Zpráva Datum
  xiongxing a2054c6d0e Merge branch 'master' of http://47.107.245.0:3000/xiongxing/kyj-yanglao-web-new před 1 týdnem
  xiongxing a7d317c0ca 外出登记弹窗更改为审批流格式 před 1 týdnem

+ 69 - 50
package-lock.json

@@ -416,6 +416,7 @@
       "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz",
       "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
         "@babel/code-frame": "^7.24.7",
@@ -2228,7 +2229,6 @@
       "resolved": "https://registry.npmmirror.com/@bpmn-io/cm-theme/-/cm-theme-0.1.0-alpha.2.tgz",
       "integrity": "sha512-ZILgiYzxk3KMvxplUXmdRFQo45/JehDPg5k9tWfehmzUOSE13ssyLPil8uCloMQnb3yyzyOWTjb/wzKXTHlFQw==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@codemirror/language": "^6.3.1",
         "@codemirror/view": "^6.5.1",
@@ -2263,7 +2263,6 @@
       "resolved": "https://registry.npmmirror.com/@bpmn-io/feel-editor/-/feel-editor-1.10.0.tgz",
       "integrity": "sha512-Unc4CSyMgDg5c2C3E3ehEbJZfyo5W9Zrq74C8cp7mjFbb3if6rTBaw3ZCZeiC06zsm881sI5P8zWHFdIhKo/vA==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@bpmn-io/feel-lint": "^1.4.0",
         "@codemirror/autocomplete": "^6.16.2",
@@ -2285,7 +2284,6 @@
       "resolved": "https://registry.npmmirror.com/@bpmn-io/feel-lint/-/feel-lint-1.4.0.tgz",
       "integrity": "sha512-1bsdR/9vPD7RQVqWWPk0X0tpjLsYTDrCxIzOVtN/h32o4nPGl0dZBU5m07qaFUGD4wG3eOH4Qim1wexHG8YkBw==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@codemirror/language": "^6.10.8",
         "lezer-feel": "^1.7.0"
@@ -2318,7 +2316,6 @@
       "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz",
       "integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@codemirror/language": "^6.0.0",
         "@codemirror/state": "^6.0.0",
@@ -2331,7 +2328,6 @@
       "resolved": "https://registry.npmmirror.com/@codemirror/commands/-/commands-6.8.0.tgz",
       "integrity": "sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@codemirror/language": "^6.0.0",
         "@codemirror/state": "^6.4.0",
@@ -2344,7 +2340,6 @@
       "resolved": "https://registry.npmmirror.com/@codemirror/language/-/language-6.10.8.tgz",
       "integrity": "sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@codemirror/state": "^6.0.0",
         "@codemirror/view": "^6.23.0",
@@ -2359,7 +2354,6 @@
       "resolved": "https://registry.npmmirror.com/@codemirror/lint/-/lint-6.8.4.tgz",
       "integrity": "sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@codemirror/state": "^6.0.0",
         "@codemirror/view": "^6.35.0",
@@ -2371,7 +2365,6 @@
       "resolved": "https://registry.npmmirror.com/@codemirror/state/-/state-6.5.2.tgz",
       "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@marijn/find-cluster-break": "^1.0.0"
       }
@@ -2381,7 +2374,6 @@
       "resolved": "https://registry.npmmirror.com/@codemirror/view/-/view-6.36.2.tgz",
       "integrity": "sha512-DZ6ONbs8qdJK0fdN7AB82CgI6tYXf4HWk1wSVa0+9bhVznCuuvhQtX8bFBoy3dv8rZSQqUd8GvhVAcielcidrA==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@codemirror/state": "^6.5.0",
         "style-mod": "^4.1.0",
@@ -2782,6 +2774,7 @@
           "url": "https://opencollective.com/csstools"
         }
       ],
+      "peer": true,
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
@@ -2804,6 +2797,7 @@
           "url": "https://opencollective.com/csstools"
         }
       ],
+      "peer": true,
       "engines": {
         "node": "^14 || ^16 || >=18"
       }
@@ -3925,15 +3919,13 @@
       "version": "1.2.3",
       "resolved": "https://registry.npmmirror.com/@lezer/common/-/common-1.2.3.tgz",
       "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==",
-      "dev": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/@lezer/highlight": {
       "version": "1.2.1",
       "resolved": "https://registry.npmmirror.com/@lezer/highlight/-/highlight-1.2.1.tgz",
       "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@lezer/common": "^1.0.0"
       }
@@ -3943,7 +3935,6 @@
       "resolved": "https://registry.npmmirror.com/@lezer/lr/-/lr-1.4.2.tgz",
       "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@lezer/common": "^1.0.0"
       }
@@ -3953,7 +3944,6 @@
       "resolved": "https://registry.npmmirror.com/@lezer/markdown/-/markdown-1.4.1.tgz",
       "integrity": "sha512-Za5okfyWoNaX6sSZ2dm94XegaFXbkQ9UjKJ8hAoZX88XDpbu6DoR63IuSl+dqj1VkVQBQGsdr0JnTcMsogQDdw==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@lezer/common": "^1.0.0",
         "@lezer/highlight": "^1.0.0",
@@ -3965,7 +3955,6 @@
       "resolved": "https://registry.npmmirror.com/@marijn/buildtool/-/buildtool-0.1.6.tgz",
       "integrity": "sha512-rcA2wljsM24MFAwx2U5vSBrt7IdIaPh4WPRfJPS8PuCUlbuQ8Pmky4c/ec00v3YFu90rZSbkVLnPuCeb/mUEng==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@types/mocha": "^9.1.1",
         "acorn": "^8.10.0",
@@ -3997,7 +3986,6 @@
       "resolved": "https://registry.npmmirror.com/rollup-plugin-dts/-/rollup-plugin-dts-5.3.1.tgz",
       "integrity": "sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "magic-string": "^0.30.2"
       },
@@ -4019,8 +4007,7 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz",
       "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==",
-      "dev": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/@microsoft/fetch-event-source": {
       "version": "2.0.1",
@@ -4902,6 +4889,7 @@
       "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
       "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "@types/estree": "*",
         "@types/json-schema": "*"
@@ -4945,6 +4933,7 @@
       "version": "4.17.12",
       "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
       "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+      "peer": true,
       "dependencies": {
         "@types/lodash": "*"
       }
@@ -4953,14 +4942,14 @@
       "version": "9.1.1",
       "resolved": "https://registry.npmmirror.com/@types/mocha/-/mocha-9.1.1.tgz",
       "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==",
-      "dev": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/@types/node": {
       "version": "20.14.6",
       "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.6.tgz",
       "integrity": "sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "undici-types": "~5.26.4"
       }
@@ -5069,6 +5058,7 @@
       "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz",
       "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "@typescript-eslint/scope-manager": "7.13.1",
         "@typescript-eslint/types": "7.13.1",
@@ -6022,6 +6012,7 @@
       "version": "2.3.4",
       "resolved": "https://registry.npmjs.org/@uppy/core/-/core-2.3.4.tgz",
       "integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==",
+      "peer": true,
       "dependencies": {
         "@transloadit/prettier-bytes": "0.0.7",
         "@uppy/store-default": "^2.1.1",
@@ -6050,6 +6041,7 @@
       "version": "2.1.3",
       "resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz",
       "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==",
+      "peer": true,
       "dependencies": {
         "@uppy/companion-client": "^2.2.2",
         "@uppy/utils": "^4.1.2",
@@ -6541,6 +6533,7 @@
       "version": "1.1.7",
       "resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz",
       "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==",
+      "peer": true,
       "dependencies": {
         "is-url": "^1.2.4"
       },
@@ -6571,6 +6564,7 @@
       "version": "1.1.19",
       "resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-1.1.19.tgz",
       "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==",
+      "peer": true,
       "dependencies": {
         "@types/event-emitter": "^0.3.3",
         "event-emitter": "^0.3.5",
@@ -6600,6 +6594,7 @@
       "version": "5.1.23",
       "resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-5.1.23.tgz",
       "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==",
+      "peer": true,
       "dependencies": {
         "@uppy/core": "^2.1.1",
         "@uppy/xhr-upload": "^2.0.3",
@@ -6715,6 +6710,7 @@
       "version": "8.12.0",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
       "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
+      "peer": true,
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -6735,7 +6731,6 @@
       "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz",
       "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "acorn": "^8.11.0"
       },
@@ -7560,6 +7555,7 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "peer": true,
       "dependencies": {
         "caniuse-lite": "^1.0.30001629",
         "electron-to-chromium": "^1.4.796",
@@ -7740,7 +7736,8 @@
     "node_modules/camunda-bpmn-moddle": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/camunda-bpmn-moddle/-/camunda-bpmn-moddle-7.0.1.tgz",
-      "integrity": "sha512-Br8Diu6roMpziHdpl66Dhnm0DTnCFMrSD9zwLV08LpD52QA0UsXxU87XfHf08HjuB7ly0Hd1bvajZRpf9hbmYQ=="
+      "integrity": "sha512-Br8Diu6roMpziHdpl66Dhnm0DTnCFMrSD9zwLV08LpD52QA0UsXxU87XfHf08HjuB7ly0Hd1bvajZRpf9hbmYQ==",
+      "peer": true
     },
     "node_modules/caniuse-lite": {
       "version": "1.0.30001636",
@@ -7961,8 +7958,7 @@
       "version": "2.5.1",
       "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz",
       "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
-      "dev": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/cli-cursor": {
       "version": "4.0.0",
@@ -8354,6 +8350,7 @@
       "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
       "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "env-paths": "^2.2.1",
         "import-fresh": "^3.3.0",
@@ -8420,8 +8417,7 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz",
       "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
-      "dev": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/cropperjs": {
       "version": "1.6.2",
@@ -8938,6 +8934,7 @@
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz",
       "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+      "peer": true,
       "engines": {
         "node": ">=12"
       }
@@ -9271,6 +9268,7 @@
       "version": "12.8.1",
       "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-12.8.1.tgz",
       "integrity": "sha512-LF9BiwjbOPpZd0ez5VSlYRbdbEA59YQX43bWvNDp1rLMv0xwZ5yIg4oaYDK82nIQ0kH1tjvoQRpNevMTCgQVyw==",
+      "peer": true,
       "dependencies": {
         "@bpmn-io/diagram-js-ui": "^0.2.2",
         "clsx": "^2.0.0",
@@ -9374,6 +9372,7 @@
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz",
       "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==",
+      "peer": true,
       "dependencies": {
         "ssr-window": "^3.0.0-alpha.1"
       }
@@ -9950,6 +9949,7 @@
       "version": "8.57.0",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
       "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+      "peer": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.6.1",
@@ -10005,6 +10005,7 @@
       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
       "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
       "dev": true,
+      "peer": true,
       "bin": {
         "eslint-config-prettier": "bin/cli.js"
       },
@@ -10675,7 +10676,6 @@
       "resolved": "https://registry.npmmirror.com/feelers/-/feelers-1.4.0.tgz",
       "integrity": "sha512-CGa/7ILuqoqTaeYeoKsg/4tzu2es9sEEJTmSjdu0lousZBw4V9gcYhHYFNmbrSrKmbAVfOzj6/DsymGJWFIOeg==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@bpmn-io/cm-theme": "^0.1.0-alpha.2",
         "@bpmn-io/feel-lint": "^1.2.0",
@@ -10707,7 +10707,6 @@
       "resolved": "https://registry.npmmirror.com/domify/-/domify-2.0.0.tgz",
       "integrity": "sha512-rmvrrmWQPD/X1A/nPBfIVg4r05792QdG9Z4Prk6oQG0F9zBMDkr0GKAdds1wjb2dq1rTz/ywc4ZxpZbgz0tttg==",
       "dev": true,
-      "peer": true,
       "engines": {
         "node": ">=18"
       },
@@ -10720,7 +10719,6 @@
       "resolved": "https://registry.npmmirror.com/min-dom/-/min-dom-5.1.1.tgz",
       "integrity": "sha512-GaKUlguMAofd3OJsB0OkP17i5kucKqErgVCJxPawO9l5NwIPnr28SAr99zzlzMCWWljISBYrnZVWdE2Q92YGFQ==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "domify": "^2.0.0",
         "min-dash": "^4.2.1"
@@ -10731,7 +10729,6 @@
       "resolved": "https://registry.npmmirror.com/feelin/-/feelin-3.2.0.tgz",
       "integrity": "sha512-GFDbHsTYk7YXO1tyw1dOjb7IODeAZvNIosdGZThUwPx5XcD/XhO0hnPZXsIbAzSsIdrgGlTEEdby9fZ2gixysA==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@lezer/lr": "^1.4.2",
         "lezer-feel": "^1.4.0",
@@ -10844,7 +10841,6 @@
       "resolved": "https://registry.npmmirror.com/focus-trap/-/focus-trap-7.6.4.tgz",
       "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "tabbable": "^6.2.0"
       }
@@ -12038,7 +12034,8 @@
     "node_modules/is-hotkey": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz",
-      "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw=="
+      "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==",
+      "peer": true
     },
     "node_modules/is-negative-zero": {
       "version": "2.0.3",
@@ -12676,7 +12673,6 @@
       "resolved": "https://registry.npmmirror.com/lang-feel/-/lang-feel-2.3.0.tgz",
       "integrity": "sha512-cotBfyBP710udy3Tm7s4NyNZPSSLXkVV/rrfmM4NVbuzB9WGL7CbMWUzfSn6GZ+qFnh8/xbkeDHfAvPM90oENA==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@codemirror/autocomplete": "^6.18.4",
         "@codemirror/language": "^6.10.8",
@@ -12746,7 +12742,6 @@
       "resolved": "https://registry.npmmirror.com/lezer-feel/-/lezer-feel-1.7.0.tgz",
       "integrity": "sha512-UC8h3Nu4llRPISEUhv+Ne7bNkdxjf4+/DcU4KfO8zKxycWxev8d2BoVnGlG17zbQDtQJBD39ZQvWtjCeTFm69g==",
       "dev": true,
-      "peer": true,
       "dependencies": {
         "@lezer/highlight": "^1.2.1",
         "@lezer/lr": "^1.4.2",
@@ -12975,13 +12970,15 @@
     "node_modules/lodash": {
       "version": "4.17.21",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "peer": true
     },
     "node_modules/lodash-es": {
       "version": "4.17.21",
       "resolved": "https://repo.huaweicloud.com/repository/npm/lodash-es/-/lodash-es-4.17.21.tgz",
       "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/lodash-unified": {
       "version": "1.0.3",
@@ -12996,17 +12993,20 @@
     "node_modules/lodash.camelcase": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
-      "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
+      "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+      "peer": true
     },
     "node_modules/lodash.clonedeep": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
-      "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
+      "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
+      "peer": true
     },
     "node_modules/lodash.debounce": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
+      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+      "peer": true
     },
     "node_modules/lodash.defaults": {
       "version": "4.2.0",
@@ -13035,7 +13035,8 @@
     "node_modules/lodash.foreach": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
-      "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="
+      "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==",
+      "peer": true
     },
     "node_modules/lodash.groupby": {
       "version": "4.6.0",
@@ -13052,7 +13053,8 @@
     "node_modules/lodash.isequal": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
-      "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
+      "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+      "peer": true
     },
     "node_modules/lodash.isfunction": {
       "version": "3.0.9",
@@ -13109,12 +13111,14 @@
     "node_modules/lodash.throttle": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
-      "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="
+      "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
+      "peer": true
     },
     "node_modules/lodash.toarray": {
       "version": "4.4.0",
       "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
-      "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw=="
+      "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==",
+      "peer": true
     },
     "node_modules/lodash.truncate": {
       "version": "4.4.2",
@@ -13376,7 +13380,6 @@
       "resolved": "https://registry.npmmirror.com/luxon/-/luxon-3.5.0.tgz",
       "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
       "dev": true,
-      "peer": true,
       "engines": {
         "node": ">=12"
       }
@@ -13440,6 +13443,7 @@
       "version": "0.16.0",
       "resolved": "https://registry.npmmirror.com/markmap-common/-/markmap-common-0.16.0.tgz",
       "integrity": "sha512-q3nlNDMKuWXTm3VwZFY9V5zteL/+iBLZanUK5vS+e26bUbzTSG5VtAzsyJbmgJm1WhwmIIAxbXEnp6JdvtTduA==",
+      "peer": true,
       "dependencies": {
         "@babel/runtime": "^7.22.6",
         "@gera2ld/jsx-dom": "^2.2.2",
@@ -13855,6 +13859,7 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "peer": true,
       "bin": {
         "nanoid": "bin/nanoid.cjs"
       },
@@ -14547,6 +14552,7 @@
       "version": "2.1.7",
       "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz",
       "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
+      "peer": true,
       "dependencies": {
         "@vue/devtools-api": "^6.5.0",
         "vue-demi": ">=0.14.5"
@@ -14683,6 +14689,7 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "peer": true,
       "dependencies": {
         "nanoid": "^3.3.8",
         "picocolors": "^1.1.1",
@@ -14775,6 +14782,7 @@
       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
       "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "cssesc": "^3.0.0",
         "util-deprecate": "^1.0.2"
@@ -15039,6 +15047,7 @@
       "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
       "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
       "dev": true,
+      "peer": true,
       "bin": {
         "prettier": "bin/prettier.cjs"
       },
@@ -15893,6 +15902,7 @@
       "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
       "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "@types/estree": "1.0.5"
       },
@@ -16193,6 +16203,7 @@
       "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz",
       "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "chokidar": ">=3.0.0 <4.0.0",
         "immutable": "^4.0.0",
@@ -16246,6 +16257,7 @@
       "version": "2.0.3",
       "resolved": "https://registry.npmmirror.com/segmentit/-/segmentit-2.0.3.tgz",
       "integrity": "sha512-7mn2XL3OdTUQ+AhHz7SbgyxLTaQRzTWQNVwiK+UlTO8aePGbSwvKUzTwE4238+OUY9MoR6ksAg35zl8sfTunQQ==",
+      "peer": true,
       "dependencies": {
         "preval.macro": "^4.0.0"
       }
@@ -16445,6 +16457,7 @@
       "version": "0.72.8",
       "resolved": "https://registry.npmjs.org/slate/-/slate-0.72.8.tgz",
       "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==",
+      "peer": true,
       "dependencies": {
         "immer": "^9.0.6",
         "is-plain-object": "^5.0.0",
@@ -16506,6 +16519,7 @@
       "version": "3.6.2",
       "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.2.tgz",
       "integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==",
+      "peer": true,
       "engines": {
         "node": ">=12.17.0"
       }
@@ -16953,8 +16967,7 @@
       "version": "4.1.2",
       "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.1.2.tgz",
       "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==",
-      "dev": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/stylelint": {
       "version": "16.6.1",
@@ -16971,6 +16984,7 @@
           "url": "https://github.com/sponsors/stylelint"
         }
       ],
+      "peer": true,
       "dependencies": {
         "@csstools/css-parser-algorithms": "^2.6.3",
         "@csstools/css-tokenizer": "^2.3.1",
@@ -17550,8 +17564,7 @@
       "version": "6.2.0",
       "resolved": "https://registry.npmmirror.com/tabbable/-/tabbable-6.2.0.tgz",
       "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
-      "dev": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/table": {
       "version": "6.8.2",
@@ -17618,6 +17631,7 @@
       "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz",
       "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "@jridgewell/source-map": "^0.3.3",
         "acorn": "^8.8.2",
@@ -17994,6 +18008,7 @@
       "version": "5.3.3",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
       "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+      "peer": true,
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
@@ -18552,6 +18567,7 @@
       "version": "7.21.6",
       "resolved": "https://registry.npmjs.org/video.js/-/video.js-7.21.6.tgz",
       "integrity": "sha512-m41TbODrUCToVfK1aljVd296CwDQnCRewpIm5tTXMuV87YYSGw1H+VDOaV45HlpcWSsTWWLF++InDgGJfthfUw==",
+      "peer": true,
       "dependencies": {
         "@babel/runtime": "^7.12.5",
         "@videojs/http-streaming": "2.16.3",
@@ -18586,6 +18602,7 @@
       "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz",
       "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==",
       "dev": true,
+      "peer": true,
       "dependencies": {
         "esbuild": "^0.19.3",
         "postcss": "^8.4.35",
@@ -18829,6 +18846,7 @@
       "version": "3.5.12",
       "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.12.tgz",
       "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==",
+      "peer": true,
       "dependencies": {
         "@vue/compiler-dom": "3.5.12",
         "@vue/compiler-sfc": "3.5.12",
@@ -18850,6 +18868,7 @@
       "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz",
       "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
       "hasInstallScript": true,
+      "peer": true,
       "bin": {
         "vue-demi-fix": "bin/vue-demi-fix.js",
         "vue-demi-switch": "bin/vue-demi-switch.js"
@@ -18959,6 +18978,7 @@
       "version": "9.10.2",
       "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.10.2.tgz",
       "integrity": "sha512-ECJ8RIFd+3c1d3m1pctQ6ywG5Yj8Efy1oYoAKQ9neRdkLbuKLVeW4gaY5HPkD/9ssf1pOnUrmIFjx2/gkGxmEw==",
+      "peer": true,
       "dependencies": {
         "@intlify/core-base": "9.10.2",
         "@intlify/shared": "9.10.2",
@@ -19086,8 +19106,7 @@
       "version": "2.2.8",
       "resolved": "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
       "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
-      "dev": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/wangeditor": {
       "version": "4.7.15",

+ 26 - 247
src/views/elderly/elder/outward-registration/Form.vue

@@ -1,242 +1,45 @@
 <template>
   <Dialog
-    @close="dialogVisible = false"
+    @close="handleClosed"
     style="max-width: 100vw; min-width: 55vw"
     v-model="dialogVisible"
     title="外出登记"
     class="OutwardRegistrationBak"
     noPaddingEL="OutwardRegistrationBak"
   >
-    <el-form ref="formRef" :model="dataForm" :rules="dataRule" :label-width="labelWidth">
-      <div class="info-wrap">
-        <el-row>
-          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-            <el-form-item size="large" label="长者姓名" prop="elderName">
-              <search-the-elderly @update_elder="elderUp" v-model="dataForm.elderName" :tId="dataForm.tenantId"/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-            <el-form-item size="large" label="性别" prop="elderSex">
-              <el-input v-model="dataForm.elderSex" disabled />
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-            <el-form-item size="large" label="床位号" prop="bedName">
-              <el-input v-model="dataForm.bedName" disabled />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-form-item size="large" label="外出类型" prop="outboundRefundConfigId">
-          <el-select
-            v-model="dataForm.outboundRefundConfigId"
-            @change="changeOutType"
-            placeholder="请选择"
-          >
-            <el-option
-              v-for="item in typeList"
-              :key="item.id"
-              :label="(item.name+((item.remarks==''||item.remarks==null)?'':'('+item.remarks+')'))"
-              :value="item.id"
-            />
-          </el-select>
-        </el-form-item>
-
-        <el-row>
-          <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-            <el-form-item size="large" prop="outDate">
-              <template #label>
-                实际离院时间
-                <!--                  <el-icon><InfoFilled /></el-icon>-->
-              </template>
-              <el-date-picker
-                v-model="dataForm.outDate"
-                type="datetime"
-                :disabled-date="disabledDate"
-                value-format="YYYY-MM-DD HH:mm:ss"
-                placeholder="请选择时间"
-                :style="{ width: '100%' }"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-            <el-form-item size="large" prop="comeDate">
-              <template #label>
-                预计返院时间
-                <!--                  <el-icon><InfoFilled /></el-icon>-->
-              </template>
-              <el-date-picker
-                v-model="dataForm.comeDate"
-                type="datetime"
-                :disabled-date="disabledDate2"
-                value-format="YYYY-MM-DD HH:mm:ss"
-                placeholder="请选择时间"
-                :style="{ width: '100%' }"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-            <el-form-item size="large" label="陪同人" prop="outPerson">
-              <el-input
-                v-model="dataForm.outPerson"
-                placeholder="请输入陪同人"
-                maxlength="50"
-                :show-word-limit="true"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-            <el-form-item size="large" label="陪同人电话" prop="outPhone">
-              <el-input
-                v-model="dataForm.outPhone"
-                placeholder="请输入陪同人电话"
-                :maxlength="11"
-                :show-word-limit="true"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item size="large" label="外出原因" prop="remarks">
-          <el-input
-            v-model="dataForm.remarks"
-            placeholder="请输入外出原因"
-            maxlength="200"
-            :show-word-limit="true"
-            type="textarea"
-            rows="3"
-          />
-        </el-form-item>
-      </div>
-    </el-form>
+    <ProcessForm ref="processFormRef" />
 
     <template #footer>
       <el-button @click="handleClosed">关闭</el-button>
-      <el-button v-loading="formLoading" type="primary" @click="submitForm">确定</el-button>
+      <el-button v-loading="formLoading" type="primary" @click="submitForm">提交审核</el-button>
     </template>
   </Dialog>
 </template>
 
 <script lang="ts" setup>
-import { computed, ref } from 'vue'
-import { elderlyBakAdd, getElderlyBakInfo } from '@/api/elderly/bak/check-out'
-import { DICT_TYPE, getDictObj, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
-import { FormRules } from 'element-plus'
-import { useMediaQuery } from '@vueuse/core'
-const { validatePhone } = useValidator()
+import { nextTick, ref } from 'vue'
 import {
   addAskLeave,
-  editAskLeave,
-  getAskLeave,
-  getOutboundRefundConfigList
+  editAskLeave
 } from '@/api/elderly/elder/outwardRegustration'
-import { useValidator } from '@/hooks/web/useValidator'
-import {formatToDateTime} from "@/utils/dateUtil";
+import ProcessForm from './ProcessForm.vue'
 
-//defineOptions({ name: 'bakCheckOutForm' })
+defineOptions({ name: 'OutwardRegistrationForm' })
 
 const message = useMessage() // 消息弹窗
 const { t } = useI18n() // 国际化
 
 const dialogVisible = ref(false) // 弹窗
-const typeList = ref([]) //
-const formRef = ref() // 表单 Ref
-const isDetail = ref(false) // 是否详情打开
+const processFormRef = ref()
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
-let dataForm = ref({
-  // 表单字段
-  id: undefined,
-  outboundRefundConfigId: undefined,
-  typeShow: undefined,
-  elderName: undefined,
-  elderId: undefined,
-  elderSex: undefined,
-  bedName: undefined,
-  outDate: undefined,
-  comeDate: undefined,
-  outPhone: undefined,
-  outPerson: '',
-  remarks: undefined,
-  tenantId: undefined
-})
-// 表单规则
-const dataRule = reactive<FormRules>({
-  outboundRefundConfigId: [{ required: true, message: '外出类型不能为空', trigger: 'blur' }],
-  elderName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
-  outDate: [{ required: true, message: '时间不能为空', trigger: 'blur' }],
-  //comeDate: [{ required: true, message: '时间不能为空', trigger: 'blur' }],
-  outPhone: [validatePhone()],
-  //outPerson: [{ required: true, message: '陪同人不能为空', trigger: 'blur' }],
-  remarks: [{ required: true, message: '外出原因不能为空', trigger: 'blur' }],
-  outboundRefundConfigId: [{ required: true, message: '外出类型不能为空', trigger: 'blur' }]
-})
-
-const elderUp = (e) => {
-  dataForm.value.elderName = e.elderName
-  dataForm.value.elderId = e.id
-  dataForm.value.elderSex = e.elderSex === 1 ? '男' : '女'
-  dataForm.value.bedName = `${e.bedName}`
-
-}
-
-const disabledDate =(date)=>{
-  return new Date(date).getTime() > new Date().getTime()
-}
-
-const disabledDate2 =(date)=>{
-  return new Date(date).getTime() < new Date(dataForm.value.outDate).getTime()
-}
-
-const changeOutType = (e) => {
-  console.log(e)
-  //dataForm.value.remarks = getDictObj(DICT_TYPE.OUTGOING_TYPE,e)?.label
-  for (const eElement of typeList.value) {
-    if (e === eElement.id) {
-      dataForm.value.remarks = eElement.name
-      break
-    }
-  }
-}
-
-// 计算窗口大小
-const currentWidth = useMediaQuery('(max-width: 800px)')
-// 计算文字大小
-const labelWidth = computed(() => {
-  return currentWidth.value ? '110px' : '120px'
-})
 
 /** 打开弹窗 */
-const open = async (tId, id?: any, detail: boolean = false) => {
-  resetForm()
+const open = async (tId: any, id?: any, detail: boolean = false, status?: any) => {
   dialogVisible.value = true
-  dataForm.value.id = id || undefined
-  dataForm.value.tenantId = tId
-  isDetail.value = detail
-  getOutboundRefundConfigListFun()
-  dataForm.value.comeDate = formatToDateTime()
-  if (id) {
-    try {
-      const res = await getAskLeave(id)
-      dataForm.value = res
-      dataForm.value.outboundRefundConfigId = parseInt(res.type) //注意要用int类型才会正常展示
-      //dataForm.value.elderSex = res.elderlyInfo.elderSex === 1 ? '男' : '女'
-      dataForm.value.bedName = res.elderlyInfo.bedName
-    } catch (err) {}
-  }
-
-
-}
-
-const getOutboundRefundConfigListFun = () => {
-  getOutboundRefundConfigList({tenantIds: [dataForm.value.tenantId]})
-    .then((res) => {
-      console.log('外出类型:', res)
-      typeList.value = res
-    })
-    .catch((_) => {})
+  await nextTick(() => {
+    processFormRef.value?.setTenantId(tId)
+    processFormRef.value?.init(id, detail, status)
+  })
 }
 
 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
@@ -244,65 +47,41 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
 /** 提交表单 */
 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
 const submitForm = async () => {
-  if(formLoading.value){
+  if (formLoading.value) {
     return
   }
   formLoading.value = true
   try {
-    // 校验表单
-    if (!formRef.value) return
-    const valid = await formRef.value.validate()
-    if (!valid) return
-
-    if (dataForm.value.id) {
-      const res = await editAskLeave(dataForm.value)
-      if (res) {
+    const res = await processFormRef.value?.submitForm()
+    if (!res?.valid) return
+    const { dataForm } = res
+    if (dataForm.id) {
+      const updateRes = await editAskLeave(dataForm)
+      if (updateRes) {
         message.success(t('common.updateSuccess'))
         dialogVisible.value = false
-        // 发送操作成功的事件
         emit('success')
       }
     } else {
-      const res = await addAskLeave(dataForm.value)
-      if (res) {
+      const createRes = await addAskLeave(dataForm)
+      if (createRes) {
         message.success(t('common.updateSuccess'))
         dialogVisible.value = false
-        // 发送操作成功的事件
         emit('success')
       }
     }
   } finally {
-    setTimeout(()=>{
+    setTimeout(() => {
       formLoading.value = false
-    },500)
-  }
-}
-
-/** 重置表单 */
-const resetForm = () => {
-  dataForm.value = {
-    typeShow: undefined,
-    id: undefined,
-    outboundRefundConfigId: undefined,
-    elderName: undefined,
-    elderId: undefined,
-    elderSex: undefined,
-    bedName: undefined,
-    outDate: undefined,
-    comeDate: undefined,
-    outPhone: undefined,
-    outPerson: '',
-    remarks: undefined,
-    tenantId: undefined
+    }, 500)
   }
-  formRef.value?.resetFields()
 }
 
-// 关闭表单
 const handleClosed = () => {
   dialogVisible.value = false
-  resetForm()
+  processFormRef.value?.resetForm()
 }
+
 </script>
 
 <style lang="scss" scoped>

+ 281 - 0
src/views/elderly/elder/outward-registration/ProcessForm.vue

@@ -0,0 +1,281 @@
+<template>
+  <el-form ref="formRef" :model="dataForm" :rules="dataRule" :label-width="labelWidth">
+    <div class="info-wrap">
+      <el-row>
+        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+          <el-form-item size="large" label="长者姓名" prop="elderName">
+            <search-the-elderly
+              v-if="!isDetail"
+              @update_elder="elderUp"
+              v-model="dataForm.elderName"
+              :tId="getTenantId()"
+            />
+            <el-input v-else v-model="dataForm.elderName" disabled />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+          <el-form-item size="large" label="性别" prop="elderSex">
+            <el-input v-model="dataForm.elderSex" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+          <el-form-item size="large" label="床位号" prop="bedName">
+            <el-input v-model="dataForm.bedName" disabled />
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <el-form-item size="large" label="外出类型" prop="outboundRefundConfigId">
+        <el-select
+          v-model="dataForm.outboundRefundConfigId"
+          @change="changeOutType"
+          placeholder="请选择"
+          :disabled="isDetail"
+        >
+          <el-option
+            v-for="item in typeList"
+            :key="item.id"
+            :label="item.name + (!item.remarks ? '' : '(' + item.remarks + ')')"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-row>
+        <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+          <el-form-item size="large" prop="outDate">
+            <template #label>实际离院时间</template>
+            <el-date-picker
+              v-model="dataForm.outDate"
+              type="datetime"
+              :disabled-date="disabledDate"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              placeholder="请选择时间"
+              :style="{ width: '100%' }"
+              :disabled="isDetail"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+          <el-form-item size="large" prop="comeDate">
+            <template #label>预计返院时间</template>
+            <el-date-picker
+              v-model="dataForm.comeDate"
+              type="datetime"
+              :disabled-date="disabledDate2"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              placeholder="请选择时间"
+              :style="{ width: '100%' }"
+              :disabled="isDetail"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+          <el-form-item size="large" label="陪同人" prop="outPerson">
+            <el-input
+              v-model="dataForm.outPerson"
+              placeholder="请输入陪同人"
+              maxlength="50"
+              :show-word-limit="true"
+              :disabled="isDetail"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+          <el-form-item size="large" label="陪同人电话" prop="outPhone">
+            <el-input
+              v-model="dataForm.outPhone"
+              placeholder="请输入陪同人电话"
+              :maxlength="11"
+              :show-word-limit="true"
+              :disabled="isDetail"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item size="large" label="外出原因" prop="remarks">
+        <el-input
+          v-model="dataForm.remarks"
+          placeholder="请输入外出原因"
+          maxlength="200"
+          :show-word-limit="true"
+          type="textarea"
+          :rows="3"
+          :disabled="isDetail"
+        />
+      </el-form-item>
+    </div>
+  </el-form>
+</template>
+
+<script setup lang="ts">
+import { computed, ref, reactive, toRef } from 'vue'
+import { FormRules } from 'element-plus'
+import { useMediaQuery } from '@vueuse/core'
+import { useValidator } from '@/hooks/web/useValidator'
+import { formatToDateTime } from '@/utils/dateUtil'
+import { getBusinessId } from '@/api/elderly/common'
+import { getAskLeave, getOutboundRefundConfigList } from '@/api/elderly/elder/outwardRegustration'
+import { getTenantId } from '@/utils/auth'
+
+defineOptions({ name: 'OutwardRegistrationProcessForm' })
+
+const { validatePhone } = useValidator()
+
+const formRef = ref()
+const isDetail = ref(false)
+const typeList = ref<any[]>([])
+
+const state = reactive({
+  dataForm: {
+    id: undefined as any,
+    outboundRefundConfigId: undefined as any,
+    elderName: undefined as any,
+    elderId: undefined as any,
+    elderSex: undefined as any,
+    bedName: undefined as any,
+    outDate: undefined as any,
+    comeDate: undefined as any,
+    outPhone: undefined as any,
+    outPerson: '',
+    remarks: undefined as any,
+    tenantId: undefined as any
+  }
+})
+const dataForm = toRef(state, 'dataForm')
+
+const dataRule = reactive<FormRules>({
+  outboundRefundConfigId: [{ required: true, message: '外出类型不能为空', trigger: 'blur' }],
+  elderName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
+  outDate: [{ required: true, message: '时间不能为空', trigger: 'blur' }],
+  outPhone: [validatePhone()],
+  remarks: [{ required: true, message: '外出原因不能为空', trigger: 'blur' }]
+})
+
+const resetFormField = reactive({ ...dataForm.value })
+
+const elderUp = (e: any) => {
+  dataForm.value.elderName = e.elderName
+  dataForm.value.elderId = e.id
+  dataForm.value.elderSex = e.elderSex === 1 ? '男' : '女'
+  dataForm.value.bedName = `${e.bedName}`
+}
+
+const disabledDate = (date: any) => {
+  return new Date(date).getTime() > new Date().getTime()
+}
+
+const disabledDate2 = (date: any) => {
+  if (!dataForm.value.outDate) return false
+  return new Date(date).getTime() < new Date(dataForm.value.outDate).getTime()
+}
+
+const changeOutType = (id: any) => {
+  const match = typeList.value.find((t) => t.id === id)
+  if (match) {
+    dataForm.value.remarks = match.name
+  }
+}
+
+const currentWidth = useMediaQuery('(max-width: 800px)')
+const labelWidth = computed(() => {
+  return currentWidth.value ? '110px' : '120px'
+})
+
+const resolveTenantId = (input: any) => {
+  const candidate = Array.isArray(input) ? input.find((v) => Number(v) !== 0) : input
+  const asNumber = Number(candidate)
+  if (!Number.isNaN(asNumber) && asNumber !== 0) {
+    return candidate
+  }
+  return getTenantId()
+}
+
+const getOutboundRefundConfigListFun = async (tenantId?: any) => {
+  if (!tenantId) return
+  try {
+    typeList.value = await getOutboundRefundConfigList({ tenantIds: [tenantId] })
+  } catch (_) {}
+}
+
+const normalizeDetail = (res: any) => {
+  dataForm.value = {
+    ...dataForm.value,
+    ...res
+  }
+  if (res?.tenantId !== undefined && res?.tenantId !== null && Number(res.tenantId) !== 0) {
+    dataForm.value.tenantId = res.tenantId
+  }
+  if (res?.elderlyInfo) {
+    dataForm.value.bedName = res.elderlyInfo.bedName
+    if (res.elderlyInfo.elderSex !== undefined && res.elderlyInfo.elderSex !== null) {
+      dataForm.value.elderSex = res.elderlyInfo.elderSex === 1 ? '男' : '女'
+    }
+  }
+
+  const outboundId =
+    res?.outboundRefundConfigId ??
+    res?.outboundRefundConfig?.id ??
+    res?.outboundTypeId ??
+    (res?.type !== undefined && res?.type !== null ? Number(res.type) : undefined)
+
+  if (outboundId !== undefined && outboundId !== null && outboundId !== '') {
+    dataForm.value.outboundRefundConfigId = Number(outboundId)
+  }
+}
+
+const init = async (id?: any, detail: boolean = false) => {
+  isDetail.value = detail
+  dataForm.value.tenantId = resolveTenantId(dataForm.value.tenantId)
+  if (!dataForm.value.comeDate) {
+    dataForm.value.comeDate = formatToDateTime()
+  }
+  await getOutboundRefundConfigListFun(dataForm.value.tenantId)
+
+  if (!id) return
+  try {
+    const res = await getAskLeave(id)
+    normalizeDetail(res)
+    await getOutboundRefundConfigListFun(dataForm.value.tenantId)
+  } catch (_) {}
+}
+
+const submitForm = async () => {
+  if (!formRef.value) return
+  const valid = await formRef.value.validate()
+  if (!valid) return
+  return {
+    valid,
+    dataForm: {
+      ...dataForm.value,
+      type: 3
+    }
+  }
+}
+
+const getProcess = async (id: any, _type: any, _status: any) => {
+  const res = await getBusinessId(id)
+  await init(res.businessId, true)
+}
+
+const resetForm = () => {
+  dataForm.value = { ...resetFormField }
+  formRef.value?.resetFields()
+}
+
+const setTenantId = (tId: any) => {
+  dataForm.value.tenantId = resolveTenantId(tId)
+}
+
+defineExpose({ init, submitForm, getProcess, resetForm, setTenantId })
+</script>
+
+<style lang="scss" scoped>
+.info-wrap {
+  margin: 15px;
+}
+</style>