riku
2024-10-24 3d3e7f45086799fdd7a412e2079710a6cdf8dc2b
Merge branch 'lsf-dataproduct-1018'
已修改18个文件
已添加5个文件
2802 ■■■■■ 文件已修改
package-lock.json 1600 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/fysp/dataproductApi.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/fysp/subtaskApi.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components.d.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/core/SiderMenu.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/form/FYForm.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/list-item/ItemSubTask.vue 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/ProdProAnalysis.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/ProdProFollow.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/ProdSceneReport.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/ProdStandardJudge.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/components/BaseDataProduct.vue 353 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/components/CompReportDownloadDialog.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/task/TaskManage.vue 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/task/TaskProxy.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/task/components/CompDayTask.vue 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/task/components/CompMonitorPlan.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/task/components/CompSubTaskEdit.vue 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/task/components/CompSubTaskList.vue 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/task/components/CompSubTaskSelect.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/task/components/CompTaskEdit.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json
@@ -11,16 +11,20 @@
        "@amap/amap-jsapi-loader": "^1.0.1",
        "@ctrl/tinycolor": "^4.0.2",
        "@element-plus/icons-vue": "^2.0.10",
        "@vue-office/excel": "^1.7.11",
        "@vueuse/core": "^9.7.0",
        "axios": "^1.2.1",
        "dayjs": "^1.11.13",
        "element-plus": "^2.8.3",
        "exceljs": "^4.4.0",
        "js-base64": "^3.7.5",
        "md5": "^2.3.0",
        "pinia": "^2.0.26",
        "vue": "^3.2.45",
        "vue-demi": "^0.14.6",
        "vue-i18n": "^9.8.0",
        "vue-router": "^4.1.6"
        "vue-router": "^4.1.6",
        "xlsx": "^0.18.5"
      },
      "devDependencies": {
        "@babel/cli": "^7.19.3",
@@ -1899,6 +1903,33 @@
        "url": "https://opencollective.com/eslint"
      }
    },
    "node_modules/@fast-csv/format": {
      "version": "4.3.5",
      "resolved": "https://registry.npmmirror.com/@fast-csv/format/-/format-4.3.5.tgz",
      "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==",
      "dependencies": {
        "@types/node": "^14.0.1",
        "lodash.escaperegexp": "^4.1.2",
        "lodash.isboolean": "^3.0.3",
        "lodash.isequal": "^4.5.0",
        "lodash.isfunction": "^3.0.9",
        "lodash.isnil": "^4.0.0"
      }
    },
    "node_modules/@fast-csv/parse": {
      "version": "4.3.6",
      "resolved": "https://registry.npmmirror.com/@fast-csv/parse/-/parse-4.3.6.tgz",
      "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==",
      "dependencies": {
        "@types/node": "^14.0.1",
        "lodash.escaperegexp": "^4.1.2",
        "lodash.groupby": "^4.6.0",
        "lodash.isfunction": "^3.0.9",
        "lodash.isnil": "^4.0.0",
        "lodash.isundefined": "^3.0.1",
        "lodash.uniq": "^4.5.0"
      }
    },
    "node_modules/@floating-ui/core": {
      "version": "1.0.4",
      "license": "MIT"
@@ -2208,7 +2239,6 @@
    },
    "node_modules/@types/node": {
      "version": "14.18.34",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@types/semver": {
@@ -2409,6 +2439,22 @@
        "vue": "^3.2.25"
      }
    },
    "node_modules/@vue-office/excel": {
      "version": "1.7.11",
      "resolved": "https://registry.npmmirror.com/@vue-office/excel/-/excel-1.7.11.tgz",
      "integrity": "sha512-LF3R9IV573Sf4qTu6Ik5Ee8UMfkrsZQ6HEQE25/2m1c0CMcHX6KanIy6Cz0b0Q+FrLH3TjIsLTm6oPcqAbDGSA==",
      "hasInstallScript": true,
      "peerDependencies": {
        "@vue/composition-api": "^1.7.1",
        "vue": "^2.0.0 || >=3.0.0",
        "vue-demi": "^0.14.6"
      },
      "peerDependenciesMeta": {
        "@vue/composition-api": {
          "optional": true
        }
      }
    },
    "node_modules/@vue/compiler-core": {
      "version": "3.2.45",
      "license": "MIT",
@@ -2527,30 +2573,6 @@
        "url": "https://github.com/sponsors/antfu"
      }
    },
    "node_modules/@vueuse/core/node_modules/vue-demi": {
      "version": "0.13.11",
      "hasInstallScript": true,
      "license": "MIT",
      "bin": {
        "vue-demi-fix": "bin/vue-demi-fix.js",
        "vue-demi-switch": "bin/vue-demi-switch.js"
      },
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      },
      "peerDependencies": {
        "@vue/composition-api": "^1.0.0-rc.1",
        "vue": "^3.0.0-0 || ^2.6.0"
      },
      "peerDependenciesMeta": {
        "@vue/composition-api": {
          "optional": true
        }
      }
    },
    "node_modules/@vueuse/metadata": {
      "version": "9.7.0",
      "license": "MIT",
@@ -2566,30 +2588,6 @@
      },
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      }
    },
    "node_modules/@vueuse/shared/node_modules/vue-demi": {
      "version": "0.13.11",
      "hasInstallScript": true,
      "license": "MIT",
      "bin": {
        "vue-demi-fix": "bin/vue-demi-fix.js",
        "vue-demi-switch": "bin/vue-demi-switch.js"
      },
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      },
      "peerDependencies": {
        "@vue/composition-api": "^1.0.0-rc.1",
        "vue": "^3.0.0-0 || ^2.6.0"
      },
      "peerDependenciesMeta": {
        "@vue/composition-api": {
          "optional": true
        }
      }
    },
    "node_modules/@webassemblyjs/ast": {
@@ -2800,6 +2798,14 @@
        "node": ">=0.4.0"
      }
    },
    "node_modules/adler-32": {
      "version": "1.3.1",
      "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
      "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
      "engines": {
        "node": ">=0.8"
      }
    },
    "node_modules/agent-base": {
      "version": "6.0.2",
      "dev": true,
@@ -2933,6 +2939,70 @@
      ],
      "license": "MIT"
    },
    "node_modules/archiver": {
      "version": "5.3.2",
      "resolved": "https://registry.npmmirror.com/archiver/-/archiver-5.3.2.tgz",
      "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==",
      "dependencies": {
        "archiver-utils": "^2.1.0",
        "async": "^3.2.4",
        "buffer-crc32": "^0.2.1",
        "readable-stream": "^3.6.0",
        "readdir-glob": "^1.1.2",
        "tar-stream": "^2.2.0",
        "zip-stream": "^4.1.0"
      },
      "engines": {
        "node": ">= 10"
      }
    },
    "node_modules/archiver-utils": {
      "version": "2.1.0",
      "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-2.1.0.tgz",
      "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
      "dependencies": {
        "glob": "^7.1.4",
        "graceful-fs": "^4.2.0",
        "lazystream": "^1.0.0",
        "lodash.defaults": "^4.2.0",
        "lodash.difference": "^4.5.0",
        "lodash.flatten": "^4.4.0",
        "lodash.isplainobject": "^4.0.6",
        "lodash.union": "^4.6.0",
        "normalize-path": "^3.0.0",
        "readable-stream": "^2.0.0"
      },
      "engines": {
        "node": ">= 6"
      }
    },
    "node_modules/archiver-utils/node_modules/readable-stream": {
      "version": "2.3.8",
      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
      "dependencies": {
        "core-util-is": "~1.0.0",
        "inherits": "~2.0.3",
        "isarray": "~1.0.0",
        "process-nextick-args": "~2.0.0",
        "safe-buffer": "~5.1.1",
        "string_decoder": "~1.1.1",
        "util-deprecate": "~1.0.1"
      }
    },
    "node_modules/archiver-utils/node_modules/safe-buffer": {
      "version": "5.1.2",
      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
    },
    "node_modules/archiver-utils/node_modules/string_decoder": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/arg": {
      "version": "5.0.2",
      "dev": true,
@@ -2986,7 +3056,6 @@
    },
    "node_modules/async": {
      "version": "3.2.4",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/async-validator": {
@@ -3121,12 +3190,10 @@
    },
    "node_modules/balanced-match": {
      "version": "1.0.2",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/base64-js": {
      "version": "1.5.1",
      "dev": true,
      "funding": [
        {
          "type": "github",
@@ -3151,12 +3218,42 @@
        "tweetnacl": "^0.14.3"
      }
    },
    "node_modules/big-integer": {
      "version": "1.6.52",
      "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz",
      "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
      "engines": {
        "node": ">=0.6"
      }
    },
    "node_modules/binary": {
      "version": "0.3.0",
      "resolved": "https://registry.npmmirror.com/binary/-/binary-0.3.0.tgz",
      "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==",
      "dependencies": {
        "buffers": "~0.1.1",
        "chainsaw": "~0.1.0"
      },
      "engines": {
        "node": "*"
      }
    },
    "node_modules/binary-extensions": {
      "version": "2.2.0",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/bl": {
      "version": "4.1.0",
      "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
      "dependencies": {
        "buffer": "^5.5.0",
        "inherits": "^2.0.4",
        "readable-stream": "^3.4.0"
      }
    },
    "node_modules/blob-util": {
@@ -3176,7 +3273,6 @@
    },
    "node_modules/brace-expansion": {
      "version": "1.1.11",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "balanced-match": "^1.0.0",
@@ -3223,7 +3319,6 @@
    },
    "node_modules/buffer": {
      "version": "5.7.1",
      "dev": true,
      "funding": [
        {
          "type": "github",
@@ -3246,7 +3341,6 @@
    },
    "node_modules/buffer-crc32": {
      "version": "0.2.13",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": "*"
@@ -3257,6 +3351,22 @@
      "dev": true,
      "license": "MIT",
      "peer": true
    },
    "node_modules/buffer-indexof-polyfill": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
      "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==",
      "engines": {
        "node": ">=0.10"
      }
    },
    "node_modules/buffers": {
      "version": "0.1.1",
      "resolved": "https://registry.npmmirror.com/buffers/-/buffers-0.1.1.tgz",
      "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==",
      "engines": {
        "node": ">=0.2.0"
      }
    },
    "node_modules/cachedir": {
      "version": "2.3.0",
@@ -3294,6 +3404,18 @@
      "dev": true,
      "license": "Apache-2.0"
    },
    "node_modules/cfb": {
      "version": "1.2.2",
      "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
      "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
      "dependencies": {
        "adler-32": "~1.3.0",
        "crc-32": "~1.2.0"
      },
      "engines": {
        "node": ">=0.8"
      }
    },
    "node_modules/chai": {
      "version": "4.3.7",
      "dev": true,
@@ -3309,6 +3431,17 @@
      },
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/chainsaw": {
      "version": "0.1.0",
      "resolved": "https://registry.npmmirror.com/chainsaw/-/chainsaw-0.1.0.tgz",
      "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==",
      "dependencies": {
        "traverse": ">=0.3.0 <0.4"
      },
      "engines": {
        "node": "*"
      }
    },
    "node_modules/chalk": {
@@ -3463,6 +3596,14 @@
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/codepage": {
      "version": "1.15.0",
      "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
      "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
      "engines": {
        "node": ">=0.8"
      }
    },
    "node_modules/color-convert": {
      "version": "2.0.1",
      "dev": true,
@@ -3510,9 +3651,22 @@
        "node": ">=4.0.0"
      }
    },
    "node_modules/compress-commons": {
      "version": "4.1.2",
      "resolved": "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.2.tgz",
      "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==",
      "dependencies": {
        "buffer-crc32": "^0.2.13",
        "crc32-stream": "^4.0.2",
        "normalize-path": "^3.0.0",
        "readable-stream": "^3.6.0"
      },
      "engines": {
        "node": ">= 10"
      }
    },
    "node_modules/concat-map": {
      "version": "0.0.1",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/convert-source-map": {
@@ -3545,8 +3699,30 @@
    },
    "node_modules/core-util-is": {
      "version": "1.0.2",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/crc-32": {
      "version": "1.2.2",
      "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
      "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
      "bin": {
        "crc32": "bin/crc32.njs"
      },
      "engines": {
        "node": ">=0.8"
      }
    },
    "node_modules/crc32-stream": {
      "version": "4.0.3",
      "resolved": "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-4.0.3.tgz",
      "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==",
      "dependencies": {
        "crc-32": "^1.2.0",
        "readable-stream": "^3.4.0"
      },
      "engines": {
        "node": ">= 10"
      }
    },
    "node_modules/cross-spawn": {
      "version": "7.0.3",
@@ -3773,6 +3949,41 @@
      "dev": true,
      "license": "MIT"
    },
    "node_modules/duplexer2": {
      "version": "0.1.4",
      "resolved": "https://registry.npmmirror.com/duplexer2/-/duplexer2-0.1.4.tgz",
      "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
      "dependencies": {
        "readable-stream": "^2.0.2"
      }
    },
    "node_modules/duplexer2/node_modules/readable-stream": {
      "version": "2.3.8",
      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
      "dependencies": {
        "core-util-is": "~1.0.0",
        "inherits": "~2.0.3",
        "isarray": "~1.0.0",
        "process-nextick-args": "~2.0.0",
        "safe-buffer": "~5.1.1",
        "string_decoder": "~1.1.1",
        "util-deprecate": "~1.0.1"
      }
    },
    "node_modules/duplexer2/node_modules/safe-buffer": {
      "version": "5.1.2",
      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
    },
    "node_modules/duplexer2/node_modules/string_decoder": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/ecc-jsbn": {
      "version": "0.1.2",
      "dev": true,
@@ -3827,7 +4038,6 @@
    },
    "node_modules/end-of-stream": {
      "version": "1.4.4",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "once": "^1.4.0"
@@ -4285,6 +4495,36 @@
        "node": ">=0.8.x"
      }
    },
    "node_modules/exceljs": {
      "version": "4.4.0",
      "resolved": "https://registry.npmmirror.com/exceljs/-/exceljs-4.4.0.tgz",
      "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==",
      "dependencies": {
        "archiver": "^5.0.0",
        "dayjs": "^1.8.34",
        "fast-csv": "^4.3.1",
        "jszip": "^3.10.1",
        "readable-stream": "^3.6.0",
        "saxes": "^5.0.1",
        "tmp": "^0.2.0",
        "unzipper": "^0.10.11",
        "uuid": "^8.3.0"
      },
      "engines": {
        "node": ">=8.3.0"
      }
    },
    "node_modules/exceljs/node_modules/saxes": {
      "version": "5.0.1",
      "resolved": "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz",
      "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
      "dependencies": {
        "xmlchars": "^2.2.0"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/execa": {
      "version": "4.1.0",
      "dev": true,
@@ -4349,6 +4589,18 @@
        "node >=0.6.0"
      ],
      "license": "MIT"
    },
    "node_modules/fast-csv": {
      "version": "4.3.6",
      "resolved": "https://registry.npmmirror.com/fast-csv/-/fast-csv-4.3.6.tgz",
      "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==",
      "dependencies": {
        "@fast-csv/format": "4.3.5",
        "@fast-csv/parse": "4.3.6"
      },
      "engines": {
        "node": ">=10.0.0"
      }
    },
    "node_modules/fast-deep-equal": {
      "version": "3.1.3",
@@ -4522,6 +4774,14 @@
        "node": ">= 0.12"
      }
    },
    "node_modules/frac": {
      "version": "1.1.2",
      "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
      "engines": {
        "node": ">=0.8"
      }
    },
    "node_modules/fraction.js": {
      "version": "4.2.0",
      "dev": true,
@@ -4538,6 +4798,11 @@
      "version": "0.1.7",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/fs-constants": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz",
      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
    },
    "node_modules/fs-extra": {
      "version": "9.1.0",
@@ -4560,8 +4825,34 @@
    },
    "node_modules/fs.realpath": {
      "version": "1.0.0",
      "dev": true,
      "license": "ISC"
    },
    "node_modules/fstream": {
      "version": "1.0.12",
      "resolved": "https://registry.npmmirror.com/fstream/-/fstream-1.0.12.tgz",
      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
      "deprecated": "This package is no longer supported.",
      "dependencies": {
        "graceful-fs": "^4.1.2",
        "inherits": "~2.0.0",
        "mkdirp": ">=0.5 0",
        "rimraf": "2"
      },
      "engines": {
        "node": ">=0.6"
      }
    },
    "node_modules/fstream/node_modules/rimraf": {
      "version": "2.7.1",
      "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz",
      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
      "deprecated": "Rimraf versions prior to v4 are no longer supported",
      "dependencies": {
        "glob": "^7.1.3"
      },
      "bin": {
        "rimraf": "bin.js"
      }
    },
    "node_modules/function-bind": {
      "version": "1.1.1",
@@ -4616,7 +4907,6 @@
    },
    "node_modules/glob": {
      "version": "7.2.3",
      "dev": true,
      "license": "ISC",
      "dependencies": {
        "fs.realpath": "^1.0.0",
@@ -4706,7 +4996,6 @@
    },
    "node_modules/graceful-fs": {
      "version": "4.2.10",
      "dev": true,
      "license": "ISC"
    },
    "node_modules/grapheme-splitter": {
@@ -4809,7 +5098,6 @@
    },
    "node_modules/ieee754": {
      "version": "1.2.1",
      "dev": true,
      "funding": [
        {
          "type": "github",
@@ -4845,6 +5133,11 @@
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/immediate": {
      "version": "3.0.6",
      "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz",
      "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
    },
    "node_modules/immutable": {
      "version": "4.1.0",
@@ -4884,7 +5177,6 @@
    },
    "node_modules/inflight": {
      "version": "1.0.6",
      "dev": true,
      "license": "ISC",
      "dependencies": {
        "once": "^1.3.0",
@@ -4893,7 +5185,6 @@
    },
    "node_modules/inherits": {
      "version": "2.0.4",
      "dev": true,
      "license": "ISC"
    },
    "node_modules/ini": {
@@ -5036,6 +5327,11 @@
      "version": "3.14.1",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/isarray": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
    },
    "node_modules/isexe": {
      "version": "2.0.0",
@@ -5260,6 +5556,44 @@
        "verror": "1.10.0"
      }
    },
    "node_modules/jszip": {
      "version": "3.10.1",
      "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz",
      "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
      "dependencies": {
        "lie": "~3.3.0",
        "pako": "~1.0.2",
        "readable-stream": "~2.3.6",
        "setimmediate": "^1.0.5"
      }
    },
    "node_modules/jszip/node_modules/readable-stream": {
      "version": "2.3.8",
      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
      "dependencies": {
        "core-util-is": "~1.0.0",
        "inherits": "~2.0.3",
        "isarray": "~1.0.0",
        "process-nextick-args": "~2.0.0",
        "safe-buffer": "~5.1.1",
        "string_decoder": "~1.1.1",
        "util-deprecate": "~1.0.1"
      }
    },
    "node_modules/jszip/node_modules/safe-buffer": {
      "version": "5.1.2",
      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
    },
    "node_modules/jszip/node_modules/string_decoder": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/klona": {
      "version": "2.0.5",
      "dev": true,
@@ -5274,6 +5608,44 @@
      "license": "MIT",
      "engines": {
        "node": "> 0.8"
      }
    },
    "node_modules/lazystream": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz",
      "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
      "dependencies": {
        "readable-stream": "^2.0.5"
      },
      "engines": {
        "node": ">= 0.6.3"
      }
    },
    "node_modules/lazystream/node_modules/readable-stream": {
      "version": "2.3.8",
      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
      "dependencies": {
        "core-util-is": "~1.0.0",
        "inherits": "~2.0.3",
        "isarray": "~1.0.0",
        "process-nextick-args": "~2.0.0",
        "safe-buffer": "~5.1.1",
        "string_decoder": "~1.1.1",
        "util-deprecate": "~1.0.1"
      }
    },
    "node_modules/lazystream/node_modules/safe-buffer": {
      "version": "5.1.2",
      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
    },
    "node_modules/lazystream/node_modules/string_decoder": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/less": {
@@ -5331,6 +5703,19 @@
      "engines": {
        "node": ">= 0.8.0"
      }
    },
    "node_modules/lie": {
      "version": "3.3.0",
      "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz",
      "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
      "dependencies": {
        "immediate": "~3.0.5"
      }
    },
    "node_modules/listenercount": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/listenercount/-/listenercount-1.0.1.tgz",
      "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ=="
    },
    "node_modules/listr2": {
      "version": "3.14.0",
@@ -5414,6 +5799,61 @@
      "dev": true,
      "license": "MIT"
    },
    "node_modules/lodash.defaults": {
      "version": "4.2.0",
      "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
      "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
    },
    "node_modules/lodash.difference": {
      "version": "4.5.0",
      "resolved": "https://registry.npmmirror.com/lodash.difference/-/lodash.difference-4.5.0.tgz",
      "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA=="
    },
    "node_modules/lodash.escaperegexp": {
      "version": "4.1.2",
      "resolved": "https://registry.npmmirror.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
      "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="
    },
    "node_modules/lodash.flatten": {
      "version": "4.4.0",
      "resolved": "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
      "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="
    },
    "node_modules/lodash.groupby": {
      "version": "4.6.0",
      "resolved": "https://registry.npmmirror.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
      "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw=="
    },
    "node_modules/lodash.isboolean": {
      "version": "3.0.3",
      "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
      "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
    },
    "node_modules/lodash.isequal": {
      "version": "4.5.0",
      "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
      "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
    },
    "node_modules/lodash.isfunction": {
      "version": "3.0.9",
      "resolved": "https://registry.npmmirror.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
      "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw=="
    },
    "node_modules/lodash.isnil": {
      "version": "4.0.0",
      "resolved": "https://registry.npmmirror.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz",
      "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng=="
    },
    "node_modules/lodash.isplainobject": {
      "version": "4.0.6",
      "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
      "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
    },
    "node_modules/lodash.isundefined": {
      "version": "3.0.1",
      "resolved": "https://registry.npmmirror.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz",
      "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA=="
    },
    "node_modules/lodash.merge": {
      "version": "4.6.2",
      "dev": true,
@@ -5423,6 +5863,16 @@
      "version": "4.1.1",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/lodash.union": {
      "version": "4.6.0",
      "resolved": "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz",
      "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw=="
    },
    "node_modules/lodash.uniq": {
      "version": "4.5.0",
      "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
      "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
    },
    "node_modules/log-symbols": {
      "version": "4.1.0",
@@ -5621,7 +6071,6 @@
    },
    "node_modules/minimatch": {
      "version": "3.1.2",
      "dev": true,
      "license": "ISC",
      "dependencies": {
        "brace-expansion": "^1.1.7"
@@ -5632,10 +6081,20 @@
    },
    "node_modules/minimist": {
      "version": "1.2.7",
      "dev": true,
      "license": "MIT",
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/mkdirp": {
      "version": "0.5.6",
      "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
      "dependencies": {
        "minimist": "^1.2.6"
      },
      "bin": {
        "mkdirp": "bin/cmd.js"
      }
    },
    "node_modules/ms": {
@@ -5697,7 +6156,6 @@
    },
    "node_modules/normalize-path": {
      "version": "3.0.0",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=0.10.0"
@@ -5744,7 +6202,6 @@
    },
    "node_modules/once": {
      "version": "1.4.0",
      "dev": true,
      "license": "ISC",
      "dependencies": {
        "wrappy": "1"
@@ -5827,6 +6284,11 @@
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/pako": {
      "version": "1.0.11",
      "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
    },
    "node_modules/parent-module": {
      "version": "1.0.1",
      "dev": true,
@@ -5867,7 +6329,6 @@
    },
    "node_modules/path-is-absolute": {
      "version": "1.0.1",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=0.10.0"
@@ -5971,30 +6432,6 @@
        }
      }
    },
    "node_modules/pinia/node_modules/vue-demi": {
      "version": "0.13.11",
      "hasInstallScript": true,
      "license": "MIT",
      "bin": {
        "vue-demi-fix": "bin/vue-demi-fix.js",
        "vue-demi-switch": "bin/vue-demi-switch.js"
      },
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      },
      "peerDependencies": {
        "@vue/composition-api": "^1.0.0-rc.1",
        "vue": "^3.0.0-0 || ^2.6.0"
      },
      "peerDependenciesMeta": {
        "@vue/composition-api": {
          "optional": true
        }
      }
    },
    "node_modules/postcss": {
      "version": "8.4.20",
      "funding": [
@@ -6064,6 +6501,11 @@
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/process-nextick-args": {
      "version": "2.0.1",
      "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
    },
    "node_modules/proxy-from-env": {
      "version": "1.0.0",
@@ -6151,6 +6593,46 @@
      "peer": true,
      "dependencies": {
        "safe-buffer": "^5.1.0"
      }
    },
    "node_modules/readable-stream": {
      "version": "3.6.2",
      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
      "dependencies": {
        "inherits": "^2.0.3",
        "string_decoder": "^1.1.1",
        "util-deprecate": "^1.0.1"
      },
      "engines": {
        "node": ">= 6"
      }
    },
    "node_modules/readdir-glob": {
      "version": "1.1.3",
      "resolved": "https://registry.npmmirror.com/readdir-glob/-/readdir-glob-1.1.3.tgz",
      "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
      "dependencies": {
        "minimatch": "^5.1.0"
      }
    },
    "node_modules/readdir-glob/node_modules/brace-expansion": {
      "version": "2.0.1",
      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
      "dependencies": {
        "balanced-match": "^1.0.0"
      }
    },
    "node_modules/readdir-glob/node_modules/minimatch": {
      "version": "5.1.6",
      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz",
      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
      "dependencies": {
        "brace-expansion": "^2.0.1"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/readdirp": {
@@ -6308,7 +6790,6 @@
    },
    "node_modules/rimraf": {
      "version": "3.0.2",
      "dev": true,
      "license": "ISC",
      "dependencies": {
        "glob": "^7.1.3"
@@ -6366,7 +6847,6 @@
    },
    "node_modules/safe-buffer": {
      "version": "5.2.1",
      "dev": true,
      "funding": [
        {
          "type": "github",
@@ -6462,6 +6942,11 @@
        "randombytes": "^2.1.0"
      }
    },
    "node_modules/setimmediate": {
      "version": "1.0.5",
      "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz",
      "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
    },
    "node_modules/shebang-command": {
      "version": "2.0.0",
      "dev": true,
@@ -6544,6 +7029,17 @@
      },
      "engines": {
        "node": "*"
      }
    },
    "node_modules/ssf": {
      "version": "0.11.2",
      "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz",
      "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
      "dependencies": {
        "frac": "~1.1.2"
      },
      "engines": {
        "node": ">=0.8"
      }
    },
    "node_modules/sshpk": {
@@ -6640,6 +7136,14 @@
      "license": "MIT",
      "dependencies": {
        "duplexer": "~0.1.1"
      }
    },
    "node_modules/string_decoder": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
      "dependencies": {
        "safe-buffer": "~5.2.0"
      }
    },
    "node_modules/string-natural-compare": {
@@ -6740,6 +7244,21 @@
        "node": ">=6"
      }
    },
    "node_modules/tar-stream": {
      "version": "2.2.0",
      "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz",
      "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
      "dependencies": {
        "bl": "^4.0.3",
        "end-of-stream": "^1.4.1",
        "fs-constants": "^1.0.0",
        "inherits": "^2.0.3",
        "readable-stream": "^3.1.1"
      },
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/terser": {
      "version": "5.16.1",
      "dev": true,
@@ -6836,7 +7355,6 @@
    },
    "node_modules/tmp": {
      "version": "0.2.1",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "rimraf": "^3.0.0"
@@ -6885,6 +7403,14 @@
      },
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/traverse": {
      "version": "0.3.9",
      "resolved": "https://registry.npmmirror.com/traverse/-/traverse-0.3.9.tgz",
      "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==",
      "engines": {
        "node": "*"
      }
    },
    "node_modules/ts-api-utils": {
@@ -7178,6 +7704,55 @@
        "node": ">=8"
      }
    },
    "node_modules/unzipper": {
      "version": "0.10.14",
      "resolved": "https://registry.npmmirror.com/unzipper/-/unzipper-0.10.14.tgz",
      "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==",
      "dependencies": {
        "big-integer": "^1.6.17",
        "binary": "~0.3.0",
        "bluebird": "~3.4.1",
        "buffer-indexof-polyfill": "~1.0.0",
        "duplexer2": "~0.1.4",
        "fstream": "^1.0.12",
        "graceful-fs": "^4.2.2",
        "listenercount": "~1.0.1",
        "readable-stream": "~2.3.6",
        "setimmediate": "~1.0.4"
      }
    },
    "node_modules/unzipper/node_modules/bluebird": {
      "version": "3.4.7",
      "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.4.7.tgz",
      "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="
    },
    "node_modules/unzipper/node_modules/readable-stream": {
      "version": "2.3.8",
      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
      "dependencies": {
        "core-util-is": "~1.0.0",
        "inherits": "~2.0.3",
        "isarray": "~1.0.0",
        "process-nextick-args": "~2.0.0",
        "safe-buffer": "~5.1.1",
        "string_decoder": "~1.1.1",
        "util-deprecate": "~1.0.1"
      }
    },
    "node_modules/unzipper/node_modules/safe-buffer": {
      "version": "5.1.2",
      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
    },
    "node_modules/unzipper/node_modules/string_decoder": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/update-browserslist-db": {
      "version": "1.0.10",
      "dev": true,
@@ -7222,12 +7797,10 @@
    },
    "node_modules/util-deprecate": {
      "version": "1.0.2",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/uuid": {
      "version": "8.3.2",
      "dev": true,
      "license": "MIT",
      "bin": {
        "uuid": "dist/bin/uuid"
@@ -7357,6 +7930,31 @@
        "@vue/runtime-dom": "3.2.45",
        "@vue/server-renderer": "3.2.45",
        "@vue/shared": "3.2.45"
      }
    },
    "node_modules/vue-demi": {
      "version": "0.14.6",
      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz",
      "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
      "hasInstallScript": true,
      "bin": {
        "vue-demi-fix": "bin/vue-demi-fix.js",
        "vue-demi-switch": "bin/vue-demi-switch.js"
      },
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      },
      "peerDependencies": {
        "@vue/composition-api": "^1.0.0-rc.1",
        "vue": "^3.0.0-0 || ^2.6.0"
      },
      "peerDependenciesMeta": {
        "@vue/composition-api": {
          "optional": true
        }
      }
    },
    "node_modules/vue-eslint-parser": {
@@ -7596,6 +8194,22 @@
        "node": ">= 8"
      }
    },
    "node_modules/wmf": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
      "engines": {
        "node": ">=0.8"
      }
    },
    "node_modules/word": {
      "version": "0.3.0",
      "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz",
      "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
      "engines": {
        "node": ">=0.8"
      }
    },
    "node_modules/word-wrap": {
      "version": "1.2.3",
      "dev": true,
@@ -7622,7 +8236,6 @@
    },
    "node_modules/wrappy": {
      "version": "1.0.2",
      "dev": true,
      "license": "ISC"
    },
    "node_modules/ws": {
@@ -7645,6 +8258,26 @@
        }
      }
    },
    "node_modules/xlsx": {
      "version": "0.18.5",
      "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz",
      "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
      "dependencies": {
        "adler-32": "~1.3.0",
        "cfb": "~1.2.1",
        "codepage": "~1.15.0",
        "crc-32": "~1.2.1",
        "ssf": "~0.11.2",
        "wmf": "~1.0.1",
        "word": "~0.3.0"
      },
      "bin": {
        "xlsx": "bin/xlsx.njs"
      },
      "engines": {
        "node": ">=0.8"
      }
    },
    "node_modules/xml-name-validator": {
      "version": "4.0.0",
      "dev": true,
@@ -7655,7 +8288,6 @@
    },
    "node_modules/xmlchars": {
      "version": "2.2.0",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/yallist": {
@@ -7681,6 +8313,39 @@
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/zip-stream": {
      "version": "4.1.1",
      "resolved": "https://registry.npmmirror.com/zip-stream/-/zip-stream-4.1.1.tgz",
      "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==",
      "dependencies": {
        "archiver-utils": "^3.0.4",
        "compress-commons": "^4.1.2",
        "readable-stream": "^3.6.0"
      },
      "engines": {
        "node": ">= 10"
      }
    },
    "node_modules/zip-stream/node_modules/archiver-utils": {
      "version": "3.0.4",
      "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-3.0.4.tgz",
      "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==",
      "dependencies": {
        "glob": "^7.2.3",
        "graceful-fs": "^4.2.0",
        "lazystream": "^1.0.0",
        "lodash.defaults": "^4.2.0",
        "lodash.difference": "^4.5.0",
        "lodash.flatten": "^4.4.0",
        "lodash.isplainobject": "^4.0.6",
        "lodash.union": "^4.6.0",
        "normalize-path": "^3.0.0",
        "readable-stream": "^3.6.0"
      },
      "engines": {
        "node": ">= 10"
      }
    }
  },
@@ -8827,6 +9492,33 @@
        "strip-json-comments": "^3.1.1"
      }
    },
    "@fast-csv/format": {
      "version": "4.3.5",
      "resolved": "https://registry.npmmirror.com/@fast-csv/format/-/format-4.3.5.tgz",
      "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==",
      "requires": {
        "@types/node": "^14.0.1",
        "lodash.escaperegexp": "^4.1.2",
        "lodash.isboolean": "^3.0.3",
        "lodash.isequal": "^4.5.0",
        "lodash.isfunction": "^3.0.9",
        "lodash.isnil": "^4.0.0"
      }
    },
    "@fast-csv/parse": {
      "version": "4.3.6",
      "resolved": "https://registry.npmmirror.com/@fast-csv/parse/-/parse-4.3.6.tgz",
      "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==",
      "requires": {
        "@types/node": "^14.0.1",
        "lodash.escaperegexp": "^4.1.2",
        "lodash.groupby": "^4.6.0",
        "lodash.isfunction": "^3.0.9",
        "lodash.isnil": "^4.0.0",
        "lodash.isundefined": "^3.0.1",
        "lodash.uniq": "^4.5.0"
      }
    },
    "@floating-ui/core": {
      "version": "1.0.4"
    },
@@ -9049,8 +9741,7 @@
      }
    },
    "@types/node": {
      "version": "14.18.34",
      "dev": true
      "version": "14.18.34"
    },
    "@types/semver": {
      "version": "7.5.5",
@@ -9182,6 +9873,12 @@
      "dev": true,
      "requires": {}
    },
    "@vue-office/excel": {
      "version": "1.7.11",
      "resolved": "https://registry.npmmirror.com/@vue-office/excel/-/excel-1.7.11.tgz",
      "integrity": "sha512-LF3R9IV573Sf4qTu6Ik5Ee8UMfkrsZQ6HEQE25/2m1c0CMcHX6KanIy6Cz0b0Q+FrLH3TjIsLTm6oPcqAbDGSA==",
      "requires": {}
    },
    "@vue/compiler-core": {
      "version": "3.2.45",
      "requires": {
@@ -9278,12 +9975,6 @@
        "@vueuse/metadata": "9.7.0",
        "@vueuse/shared": "9.7.0",
        "vue-demi": "*"
      },
      "dependencies": {
        "vue-demi": {
          "version": "0.13.11",
          "requires": {}
        }
      }
    },
    "@vueuse/metadata": {
@@ -9293,12 +9984,6 @@
      "version": "9.7.0",
      "requires": {
        "vue-demi": "*"
      },
      "dependencies": {
        "vue-demi": {
          "version": "0.13.11",
          "requires": {}
        }
      }
    },
    "@webassemblyjs/ast": {
@@ -9473,6 +10158,11 @@
      "version": "8.2.0",
      "dev": true
    },
    "adler-32": {
      "version": "1.3.1",
      "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
      "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A=="
    },
    "agent-base": {
      "version": "6.0.2",
      "dev": true,
@@ -9544,6 +10234,66 @@
      "version": "2.2.0",
      "dev": true
    },
    "archiver": {
      "version": "5.3.2",
      "resolved": "https://registry.npmmirror.com/archiver/-/archiver-5.3.2.tgz",
      "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==",
      "requires": {
        "archiver-utils": "^2.1.0",
        "async": "^3.2.4",
        "buffer-crc32": "^0.2.1",
        "readable-stream": "^3.6.0",
        "readdir-glob": "^1.1.2",
        "tar-stream": "^2.2.0",
        "zip-stream": "^4.1.0"
      }
    },
    "archiver-utils": {
      "version": "2.1.0",
      "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-2.1.0.tgz",
      "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
      "requires": {
        "glob": "^7.1.4",
        "graceful-fs": "^4.2.0",
        "lazystream": "^1.0.0",
        "lodash.defaults": "^4.2.0",
        "lodash.difference": "^4.5.0",
        "lodash.flatten": "^4.4.0",
        "lodash.isplainobject": "^4.0.6",
        "lodash.union": "^4.6.0",
        "normalize-path": "^3.0.0",
        "readable-stream": "^2.0.0"
      },
      "dependencies": {
        "readable-stream": {
          "version": "2.3.8",
          "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
          "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
          "requires": {
            "core-util-is": "~1.0.0",
            "inherits": "~2.0.3",
            "isarray": "~1.0.0",
            "process-nextick-args": "~2.0.0",
            "safe-buffer": "~5.1.1",
            "string_decoder": "~1.1.1",
            "util-deprecate": "~1.0.1"
          }
        },
        "safe-buffer": {
          "version": "5.1.2",
          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
        },
        "string_decoder": {
          "version": "1.1.1",
          "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
          "requires": {
            "safe-buffer": "~5.1.0"
          }
        }
      }
    },
    "arg": {
      "version": "5.0.2",
      "dev": true
@@ -9578,8 +10328,7 @@
      "dev": true
    },
    "async": {
      "version": "3.2.4",
      "dev": true
      "version": "3.2.4"
    },
    "async-validator": {
      "version": "4.2.5"
@@ -9663,12 +10412,10 @@
      }
    },
    "balanced-match": {
      "version": "1.0.2",
      "dev": true
      "version": "1.0.2"
    },
    "base64-js": {
      "version": "1.5.1",
      "dev": true
      "version": "1.5.1"
    },
    "bcrypt-pbkdf": {
      "version": "1.0.2",
@@ -9677,9 +10424,33 @@
        "tweetnacl": "^0.14.3"
      }
    },
    "big-integer": {
      "version": "1.6.52",
      "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz",
      "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg=="
    },
    "binary": {
      "version": "0.3.0",
      "resolved": "https://registry.npmmirror.com/binary/-/binary-0.3.0.tgz",
      "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==",
      "requires": {
        "buffers": "~0.1.1",
        "chainsaw": "~0.1.0"
      }
    },
    "binary-extensions": {
      "version": "2.2.0",
      "dev": true
    },
    "bl": {
      "version": "4.1.0",
      "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
      "requires": {
        "buffer": "^5.5.0",
        "inherits": "^2.0.4",
        "readable-stream": "^3.4.0"
      }
    },
    "blob-util": {
      "version": "2.0.2",
@@ -9695,7 +10466,6 @@
    },
    "brace-expansion": {
      "version": "1.1.11",
      "dev": true,
      "requires": {
        "balanced-match": "^1.0.0",
        "concat-map": "0.0.1"
@@ -9720,20 +10490,28 @@
    },
    "buffer": {
      "version": "5.7.1",
      "dev": true,
      "requires": {
        "base64-js": "^1.3.1",
        "ieee754": "^1.1.13"
      }
    },
    "buffer-crc32": {
      "version": "0.2.13",
      "dev": true
      "version": "0.2.13"
    },
    "buffer-from": {
      "version": "1.1.2",
      "dev": true,
      "peer": true
    },
    "buffer-indexof-polyfill": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
      "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A=="
    },
    "buffers": {
      "version": "0.1.1",
      "resolved": "https://registry.npmmirror.com/buffers/-/buffers-0.1.1.tgz",
      "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ=="
    },
    "cachedir": {
      "version": "2.3.0",
@@ -9751,6 +10529,15 @@
      "version": "0.12.0",
      "dev": true
    },
    "cfb": {
      "version": "1.2.2",
      "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
      "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
      "requires": {
        "adler-32": "~1.3.0",
        "crc-32": "~1.2.0"
      }
    },
    "chai": {
      "version": "4.3.7",
      "dev": true,
@@ -9762,6 +10549,14 @@
        "loupe": "^2.3.1",
        "pathval": "^1.1.1",
        "type-detect": "^4.0.5"
      }
    },
    "chainsaw": {
      "version": "0.1.0",
      "resolved": "https://registry.npmmirror.com/chainsaw/-/chainsaw-0.1.0.tgz",
      "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==",
      "requires": {
        "traverse": ">=0.3.0 <0.4"
      }
    },
    "chalk": {
@@ -9853,6 +10648,11 @@
        "string-width": "^4.2.0"
      }
    },
    "codepage": {
      "version": "1.15.0",
      "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
      "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
    },
    "color-convert": {
      "version": "2.0.1",
      "dev": true,
@@ -9882,9 +10682,19 @@
      "version": "1.8.2",
      "dev": true
    },
    "compress-commons": {
      "version": "4.1.2",
      "resolved": "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.2.tgz",
      "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==",
      "requires": {
        "buffer-crc32": "^0.2.13",
        "crc32-stream": "^4.0.2",
        "normalize-path": "^3.0.0",
        "readable-stream": "^3.6.0"
      }
    },
    "concat-map": {
      "version": "0.0.1",
      "dev": true
      "version": "0.0.1"
    },
    "convert-source-map": {
      "version": "1.9.0",
@@ -9905,8 +10715,21 @@
      }
    },
    "core-util-is": {
      "version": "1.0.2",
      "dev": true
      "version": "1.0.2"
    },
    "crc-32": {
      "version": "1.2.2",
      "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
      "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
    },
    "crc32-stream": {
      "version": "4.0.3",
      "resolved": "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-4.0.3.tgz",
      "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==",
      "requires": {
        "crc-32": "^1.2.0",
        "readable-stream": "^3.4.0"
      }
    },
    "cross-spawn": {
      "version": "7.0.3",
@@ -10067,6 +10890,43 @@
      "version": "0.1.2",
      "dev": true
    },
    "duplexer2": {
      "version": "0.1.4",
      "resolved": "https://registry.npmmirror.com/duplexer2/-/duplexer2-0.1.4.tgz",
      "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
      "requires": {
        "readable-stream": "^2.0.2"
      },
      "dependencies": {
        "readable-stream": {
          "version": "2.3.8",
          "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
          "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
          "requires": {
            "core-util-is": "~1.0.0",
            "inherits": "~2.0.3",
            "isarray": "~1.0.0",
            "process-nextick-args": "~2.0.0",
            "safe-buffer": "~5.1.1",
            "string_decoder": "~1.1.1",
            "util-deprecate": "~1.0.1"
          }
        },
        "safe-buffer": {
          "version": "5.1.2",
          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
        },
        "string_decoder": {
          "version": "1.1.1",
          "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
          "requires": {
            "safe-buffer": "~5.1.0"
          }
        }
      }
    },
    "ecc-jsbn": {
      "version": "0.1.2",
      "dev": true,
@@ -10114,7 +10974,6 @@
    },
    "end-of-stream": {
      "version": "1.4.4",
      "dev": true,
      "requires": {
        "once": "^1.4.0"
      }
@@ -10406,6 +11265,32 @@
      "dev": true,
      "peer": true
    },
    "exceljs": {
      "version": "4.4.0",
      "resolved": "https://registry.npmmirror.com/exceljs/-/exceljs-4.4.0.tgz",
      "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==",
      "requires": {
        "archiver": "^5.0.0",
        "dayjs": "^1.8.34",
        "fast-csv": "^4.3.1",
        "jszip": "^3.10.1",
        "readable-stream": "^3.6.0",
        "saxes": "^5.0.1",
        "tmp": "^0.2.0",
        "unzipper": "^0.10.11",
        "uuid": "^8.3.0"
      },
      "dependencies": {
        "saxes": {
          "version": "5.0.1",
          "resolved": "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz",
          "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
          "requires": {
            "xmlchars": "^2.2.0"
          }
        }
      }
    },
    "execa": {
      "version": "4.1.0",
      "dev": true,
@@ -10445,6 +11330,15 @@
    "extsprintf": {
      "version": "1.3.0",
      "dev": true
    },
    "fast-csv": {
      "version": "4.3.6",
      "resolved": "https://registry.npmmirror.com/fast-csv/-/fast-csv-4.3.6.tgz",
      "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==",
      "requires": {
        "@fast-csv/format": "4.3.5",
        "@fast-csv/parse": "4.3.6"
      }
    },
    "fast-deep-equal": {
      "version": "3.1.3",
@@ -10555,6 +11449,11 @@
        "mime-types": "^2.1.12"
      }
    },
    "frac": {
      "version": "1.1.2",
      "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
    },
    "fraction.js": {
      "version": "4.2.0",
      "dev": true
@@ -10562,6 +11461,11 @@
    "from": {
      "version": "0.1.7",
      "dev": true
    },
    "fs-constants": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz",
      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
    },
    "fs-extra": {
      "version": "9.1.0",
@@ -10578,8 +11482,28 @@
      "dev": true
    },
    "fs.realpath": {
      "version": "1.0.0",
      "dev": true
      "version": "1.0.0"
    },
    "fstream": {
      "version": "1.0.12",
      "resolved": "https://registry.npmmirror.com/fstream/-/fstream-1.0.12.tgz",
      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
      "requires": {
        "graceful-fs": "^4.1.2",
        "inherits": "~2.0.0",
        "mkdirp": ">=0.5 0",
        "rimraf": "2"
      },
      "dependencies": {
        "rimraf": {
          "version": "2.7.1",
          "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz",
          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
          "requires": {
            "glob": "^7.1.3"
          }
        }
      }
    },
    "function-bind": {
      "version": "1.1.1",
@@ -10616,7 +11540,6 @@
    },
    "glob": {
      "version": "7.2.3",
      "dev": true,
      "requires": {
        "fs.realpath": "^1.0.0",
        "inflight": "^1.0.4",
@@ -10675,8 +11598,7 @@
      }
    },
    "graceful-fs": {
      "version": "4.2.10",
      "dev": true
      "version": "4.2.10"
    },
    "grapheme-splitter": {
      "version": "1.0.4",
@@ -10744,8 +11666,7 @@
      }
    },
    "ieee754": {
      "version": "1.2.1",
      "dev": true
      "version": "1.2.1"
    },
    "ignore": {
      "version": "5.2.4",
@@ -10755,6 +11676,11 @@
      "version": "0.5.5",
      "dev": true,
      "optional": true
    },
    "immediate": {
      "version": "3.0.6",
      "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz",
      "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
    },
    "immutable": {
      "version": "4.1.0",
@@ -10778,15 +11704,13 @@
    },
    "inflight": {
      "version": "1.0.6",
      "dev": true,
      "requires": {
        "once": "^1.3.0",
        "wrappy": "1"
      }
    },
    "inherits": {
      "version": "2.0.4",
      "dev": true
      "version": "2.0.4"
    },
    "ini": {
      "version": "2.0.0",
@@ -10868,6 +11792,11 @@
    "is-what": {
      "version": "3.14.1",
      "dev": true
    },
    "isarray": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
    },
    "isexe": {
      "version": "2.0.0",
@@ -11026,6 +11955,46 @@
        "verror": "1.10.0"
      }
    },
    "jszip": {
      "version": "3.10.1",
      "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz",
      "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
      "requires": {
        "lie": "~3.3.0",
        "pako": "~1.0.2",
        "readable-stream": "~2.3.6",
        "setimmediate": "^1.0.5"
      },
      "dependencies": {
        "readable-stream": {
          "version": "2.3.8",
          "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
          "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
          "requires": {
            "core-util-is": "~1.0.0",
            "inherits": "~2.0.3",
            "isarray": "~1.0.0",
            "process-nextick-args": "~2.0.0",
            "safe-buffer": "~5.1.1",
            "string_decoder": "~1.1.1",
            "util-deprecate": "~1.0.1"
          }
        },
        "safe-buffer": {
          "version": "5.1.2",
          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
        },
        "string_decoder": {
          "version": "1.1.1",
          "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
          "requires": {
            "safe-buffer": "~5.1.0"
          }
        }
      }
    },
    "klona": {
      "version": "2.0.5",
      "dev": true
@@ -11033,6 +12002,43 @@
    "lazy-ass": {
      "version": "1.6.0",
      "dev": true
    },
    "lazystream": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz",
      "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
      "requires": {
        "readable-stream": "^2.0.5"
      },
      "dependencies": {
        "readable-stream": {
          "version": "2.3.8",
          "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
          "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
          "requires": {
            "core-util-is": "~1.0.0",
            "inherits": "~2.0.3",
            "isarray": "~1.0.0",
            "process-nextick-args": "~2.0.0",
            "safe-buffer": "~5.1.1",
            "string_decoder": "~1.1.1",
            "util-deprecate": "~1.0.1"
          }
        },
        "safe-buffer": {
          "version": "5.1.2",
          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
        },
        "string_decoder": {
          "version": "1.1.1",
          "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
          "requires": {
            "safe-buffer": "~5.1.0"
          }
        }
      }
    },
    "less": {
      "version": "4.1.3",
@@ -11064,6 +12070,19 @@
        "prelude-ls": "^1.2.1",
        "type-check": "~0.4.0"
      }
    },
    "lie": {
      "version": "3.3.0",
      "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz",
      "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
      "requires": {
        "immediate": "~3.0.5"
      }
    },
    "listenercount": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/listenercount/-/listenercount-1.0.1.tgz",
      "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ=="
    },
    "listr2": {
      "version": "3.14.0",
@@ -11109,6 +12128,61 @@
      "version": "4.0.8",
      "dev": true
    },
    "lodash.defaults": {
      "version": "4.2.0",
      "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
      "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
    },
    "lodash.difference": {
      "version": "4.5.0",
      "resolved": "https://registry.npmmirror.com/lodash.difference/-/lodash.difference-4.5.0.tgz",
      "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA=="
    },
    "lodash.escaperegexp": {
      "version": "4.1.2",
      "resolved": "https://registry.npmmirror.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
      "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="
    },
    "lodash.flatten": {
      "version": "4.4.0",
      "resolved": "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
      "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="
    },
    "lodash.groupby": {
      "version": "4.6.0",
      "resolved": "https://registry.npmmirror.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
      "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw=="
    },
    "lodash.isboolean": {
      "version": "3.0.3",
      "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
      "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
    },
    "lodash.isequal": {
      "version": "4.5.0",
      "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
      "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
    },
    "lodash.isfunction": {
      "version": "3.0.9",
      "resolved": "https://registry.npmmirror.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
      "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw=="
    },
    "lodash.isnil": {
      "version": "4.0.0",
      "resolved": "https://registry.npmmirror.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz",
      "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng=="
    },
    "lodash.isplainobject": {
      "version": "4.0.6",
      "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
      "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
    },
    "lodash.isundefined": {
      "version": "3.0.1",
      "resolved": "https://registry.npmmirror.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz",
      "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA=="
    },
    "lodash.merge": {
      "version": "4.6.2",
      "dev": true
@@ -11116,6 +12190,16 @@
    "lodash.once": {
      "version": "4.1.1",
      "dev": true
    },
    "lodash.union": {
      "version": "4.6.0",
      "resolved": "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz",
      "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw=="
    },
    "lodash.uniq": {
      "version": "4.5.0",
      "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
      "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
    },
    "log-symbols": {
      "version": "4.1.0",
@@ -11246,14 +12330,20 @@
    },
    "minimatch": {
      "version": "3.1.2",
      "dev": true,
      "requires": {
        "brace-expansion": "^1.1.7"
      }
    },
    "minimist": {
      "version": "1.2.7",
      "dev": true
      "version": "1.2.7"
    },
    "mkdirp": {
      "version": "0.5.6",
      "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
      "requires": {
        "minimist": "^1.2.6"
      }
    },
    "ms": {
      "version": "2.1.2",
@@ -11296,8 +12386,7 @@
      "dev": true
    },
    "normalize-path": {
      "version": "3.0.0",
      "dev": true
      "version": "3.0.0"
    },
    "normalize-range": {
      "version": "0.1.2",
@@ -11326,7 +12415,6 @@
    },
    "once": {
      "version": "1.4.0",
      "dev": true,
      "requires": {
        "wrappy": "1"
      }
@@ -11375,6 +12463,11 @@
        "aggregate-error": "^3.0.0"
      }
    },
    "pako": {
      "version": "1.0.11",
      "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
    },
    "parent-module": {
      "version": "1.0.1",
      "dev": true,
@@ -11398,8 +12491,7 @@
      "dev": true
    },
    "path-is-absolute": {
      "version": "1.0.1",
      "dev": true
      "version": "1.0.1"
    },
    "path-key": {
      "version": "3.1.1",
@@ -11450,12 +12542,6 @@
      "requires": {
        "@vue/devtools-api": "^6.4.5",
        "vue-demi": "*"
      },
      "dependencies": {
        "vue-demi": {
          "version": "0.13.11",
          "requires": {}
        }
      }
    },
    "postcss": {
@@ -11491,6 +12577,11 @@
    "pretty-bytes": {
      "version": "5.6.0",
      "dev": true
    },
    "process-nextick-args": {
      "version": "2.0.1",
      "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
    },
    "proxy-from-env": {
      "version": "1.0.0",
@@ -11542,6 +12633,42 @@
      "peer": true,
      "requires": {
        "safe-buffer": "^5.1.0"
      }
    },
    "readable-stream": {
      "version": "3.6.2",
      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
      "requires": {
        "inherits": "^2.0.3",
        "string_decoder": "^1.1.1",
        "util-deprecate": "^1.0.1"
      }
    },
    "readdir-glob": {
      "version": "1.1.3",
      "resolved": "https://registry.npmmirror.com/readdir-glob/-/readdir-glob-1.1.3.tgz",
      "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
      "requires": {
        "minimatch": "^5.1.0"
      },
      "dependencies": {
        "brace-expansion": {
          "version": "2.0.1",
          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
          "requires": {
            "balanced-match": "^1.0.0"
          }
        },
        "minimatch": {
          "version": "5.1.6",
          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz",
          "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
          "requires": {
            "brace-expansion": "^2.0.1"
          }
        }
      }
    },
    "readdirp": {
@@ -11648,7 +12775,6 @@
    },
    "rimraf": {
      "version": "3.0.2",
      "dev": true,
      "requires": {
        "glob": "^7.1.3"
      }
@@ -11675,8 +12801,7 @@
      }
    },
    "safe-buffer": {
      "version": "5.2.1",
      "dev": true
      "version": "5.2.1"
    },
    "safer-buffer": {
      "version": "2.1.2",
@@ -11727,6 +12852,11 @@
      "requires": {
        "randombytes": "^2.1.0"
      }
    },
    "setimmediate": {
      "version": "1.0.5",
      "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz",
      "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
    },
    "shebang-command": {
      "version": "2.0.0",
@@ -11779,6 +12909,14 @@
      "dev": true,
      "requires": {
        "through": "2"
      }
    },
    "ssf": {
      "version": "0.11.2",
      "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz",
      "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
      "requires": {
        "frac": "~1.1.2"
      }
    },
    "sshpk": {
@@ -11842,6 +12980,14 @@
        "duplexer": "~0.1.1"
      }
    },
    "string_decoder": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
      "requires": {
        "safe-buffer": "~5.2.0"
      }
    },
    "string-natural-compare": {
      "version": "3.0.1",
      "dev": true
@@ -11896,6 +13042,18 @@
      "version": "2.2.1",
      "dev": true,
      "peer": true
    },
    "tar-stream": {
      "version": "2.2.0",
      "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz",
      "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
      "requires": {
        "bl": "^4.0.3",
        "end-of-stream": "^1.4.1",
        "fs-constants": "^1.0.0",
        "inherits": "^2.0.3",
        "readable-stream": "^3.1.1"
      }
    },
    "terser": {
      "version": "5.16.1",
@@ -11953,7 +13111,6 @@
    },
    "tmp": {
      "version": "0.2.1",
      "dev": true,
      "requires": {
        "rimraf": "^3.0.0"
      }
@@ -11983,6 +13140,11 @@
      "requires": {
        "punycode": "^2.1.1"
      }
    },
    "traverse": {
      "version": "0.3.9",
      "resolved": "https://registry.npmmirror.com/traverse/-/traverse-0.3.9.tgz",
      "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ=="
    },
    "ts-api-utils": {
      "version": "1.0.3",
@@ -12154,6 +13316,57 @@
      "version": "4.0.0",
      "dev": true
    },
    "unzipper": {
      "version": "0.10.14",
      "resolved": "https://registry.npmmirror.com/unzipper/-/unzipper-0.10.14.tgz",
      "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==",
      "requires": {
        "big-integer": "^1.6.17",
        "binary": "~0.3.0",
        "bluebird": "~3.4.1",
        "buffer-indexof-polyfill": "~1.0.0",
        "duplexer2": "~0.1.4",
        "fstream": "^1.0.12",
        "graceful-fs": "^4.2.2",
        "listenercount": "~1.0.1",
        "readable-stream": "~2.3.6",
        "setimmediate": "~1.0.4"
      },
      "dependencies": {
        "bluebird": {
          "version": "3.4.7",
          "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.4.7.tgz",
          "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="
        },
        "readable-stream": {
          "version": "2.3.8",
          "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
          "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
          "requires": {
            "core-util-is": "~1.0.0",
            "inherits": "~2.0.3",
            "isarray": "~1.0.0",
            "process-nextick-args": "~2.0.0",
            "safe-buffer": "~5.1.1",
            "string_decoder": "~1.1.1",
            "util-deprecate": "~1.0.1"
          }
        },
        "safe-buffer": {
          "version": "5.1.2",
          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
        },
        "string_decoder": {
          "version": "1.1.1",
          "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
          "requires": {
            "safe-buffer": "~5.1.0"
          }
        }
      }
    },
    "update-browserslist-db": {
      "version": "1.0.10",
      "dev": true,
@@ -12178,12 +13391,10 @@
      }
    },
    "util-deprecate": {
      "version": "1.0.2",
      "dev": true
      "version": "1.0.2"
    },
    "uuid": {
      "version": "8.3.2",
      "dev": true
      "version": "8.3.2"
    },
    "verror": {
      "version": "1.10.0",
@@ -12234,6 +13445,12 @@
        "@vue/server-renderer": "3.2.45",
        "@vue/shared": "3.2.45"
      }
    },
    "vue-demi": {
      "version": "0.14.6",
      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz",
      "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
      "requires": {}
    },
    "vue-eslint-parser": {
      "version": "9.3.2",
@@ -12385,6 +13602,16 @@
        "isexe": "^2.0.0"
      }
    },
    "wmf": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
    },
    "word": {
      "version": "0.3.0",
      "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz",
      "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
    },
    "word-wrap": {
      "version": "1.2.3",
      "dev": true
@@ -12399,21 +13626,33 @@
      }
    },
    "wrappy": {
      "version": "1.0.2",
      "dev": true
      "version": "1.0.2"
    },
    "ws": {
      "version": "8.11.0",
      "dev": true,
      "requires": {}
    },
    "xlsx": {
      "version": "0.18.5",
      "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz",
      "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
      "requires": {
        "adler-32": "~1.3.0",
        "cfb": "~1.2.1",
        "codepage": "~1.15.0",
        "crc-32": "~1.2.1",
        "ssf": "~0.11.2",
        "wmf": "~1.0.1",
        "word": "~0.3.0"
      }
    },
    "xml-name-validator": {
      "version": "4.0.0",
      "dev": true
    },
    "xmlchars": {
      "version": "2.2.0",
      "dev": true
      "version": "2.2.0"
    },
    "yallist": {
      "version": "4.0.0",
@@ -12430,6 +13669,35 @@
    "yocto-queue": {
      "version": "0.1.0",
      "dev": true
    },
    "zip-stream": {
      "version": "4.1.1",
      "resolved": "https://registry.npmmirror.com/zip-stream/-/zip-stream-4.1.1.tgz",
      "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==",
      "requires": {
        "archiver-utils": "^3.0.4",
        "compress-commons": "^4.1.2",
        "readable-stream": "^3.6.0"
      },
      "dependencies": {
        "archiver-utils": {
          "version": "3.0.4",
          "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-3.0.4.tgz",
          "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==",
          "requires": {
            "glob": "^7.2.3",
            "graceful-fs": "^4.2.0",
            "lazystream": "^1.0.0",
            "lodash.defaults": "^4.2.0",
            "lodash.difference": "^4.5.0",
            "lodash.flatten": "^4.4.0",
            "lodash.isplainobject": "^4.0.6",
            "lodash.union": "^4.6.0",
            "normalize-path": "^3.0.0",
            "readable-stream": "^3.6.0"
          }
        }
      }
    }
  }
}
package.json
@@ -16,16 +16,20 @@
    "@amap/amap-jsapi-loader": "^1.0.1",
    "@ctrl/tinycolor": "^4.0.2",
    "@element-plus/icons-vue": "^2.0.10",
    "@vue-office/excel": "^1.7.11",
    "@vueuse/core": "^9.7.0",
    "axios": "^1.2.1",
    "dayjs": "^1.11.13",
    "element-plus": "^2.8.3",
    "exceljs": "^4.4.0",
    "js-base64": "^3.7.5",
    "md5": "^2.3.0",
    "pinia": "^2.0.26",
    "vue": "^3.2.45",
    "vue-demi": "^0.14.6",
    "vue-i18n": "^9.8.0",
    "vue-router": "^4.1.6"
    "vue-router": "^4.1.6",
    "xlsx": "^0.18.5"
  },
  "devDependencies": {
    "@babel/cli": "^7.19.3",
src/api/fysp/dataproductApi.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
import { Base64 } from 'js-base64';
import { $fysp } from '../index';
export default {
  /**
   * ä¸‹è½½æ•°æ®äº§å“
   */
  downloadProduct(area, type, forceUpdate) {
    return $fysp
      .post(`dataProduct/download?`, area, {
        responseType: 'blob',
        params: { type, forceUpdate }
      })
      .then((res) => {
        // æ–‡æ¡£æœªç”Ÿæˆï¼Œå·²å¯åŠ¨æ–‡æ¡£ç”ŸæˆåŽå°ä»»åŠ¡
        if (res.data.type == 'application/json') {
          return false;
        }
        // æ–‡æ¡£å·²å­˜åœ¨ï¼Œè¿”回文件数据流
        else {
          return res.data
          // const name = Base64.decode(res.headers.get('filename'));
          // const url = window.URL.createObjectURL(res.data);
          // const link = document.createElement('a');
          // link.href = url;
          // link.setAttribute('download', name);
          // document.body.appendChild(link);
          // link.click();
          // document.body.removeChild(link);
          // window.URL.revokeObjectURL(url);
        }
      });
  }
};
src/api/fysp/subtaskApi.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
import { $fysp } from '../index';
export default {
  /**
   * è°ƒæ•´å­ä»»åŠ¡ä¿¡æ¯
   * @param {Object} subtask
   * @returns
   */
  adjustSubtask(subtask) {
    return $fysp.post(`subtask/adjust`, subtask).then((res) => res.data);
  },
  putSubtasks(subtaskList) {
    return $fysp.put(`subtask/addlist`, subtaskList).then((res) => res.data);
  },
  deleteSubtask(stGuid) {
    return $fysp.delete(`subtask/${stGuid}`).then((res) => res.data);
  }
};
src/api/index.js
@@ -11,7 +11,7 @@
let ip2_file = 'https://fyami.com.cn/';
if (debug) {
  ip1 = 'http://192.168.0.138:8080/';
  ip1 = 'http://192.168.0.138:9001/';
  // ip1_file = 'http://192.168.0.138:8080/';
  // ip2 = 'http://192.168.0.138:8080/';
  // ip2_file = 'https://fyami.com.cn/';
src/components.d.ts
@@ -12,18 +12,23 @@
    BasePanelLayout: typeof import('./components/core/BasePanelLayout.vue')['default']
    CompQuickSet: typeof import('./components/search-option/CompQuickSet.vue')['default']
    Content: typeof import('./components/core/Content.vue')['default']
    ElAffix: typeof import('element-plus/es')['ElAffix']
    ElAside: typeof import('element-plus/es')['ElAside']
    ElAvatar: typeof import('element-plus/es')['ElAvatar']
    ElBadge: typeof import('element-plus/es')['ElBadge']
    ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
    ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
    ElButton: typeof import('element-plus/es')['ElButton']
    ElCalendar: typeof import('element-plus/es')['ElCalendar']
    ElCard: typeof import('element-plus/es')['ElCard']
    ElCascader: typeof import('element-plus/es')['ElCascader']
    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
    ElCol: typeof import('element-plus/es')['ElCol']
    ElCollapse: typeof import('element-plus/es')['ElCollapse']
    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
    ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
    ElContainer: typeof import('element-plus/es')['ElContainer']
    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
    ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
    ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
    ElDialog: typeof import('element-plus/es')['ElDialog']
@@ -36,6 +41,7 @@
    ElIcon: typeof import('element-plus/es')['ElIcon']
    ElImage: typeof import('element-plus/es')['ElImage']
    ElInput: typeof import('element-plus/es')['ElInput']
    ElLink: typeof import('element-plus/es')['ElLink']
    ElMain: typeof import('element-plus/es')['ElMain']
    ElMenu: typeof import('element-plus/es')['ElMenu']
    ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
@@ -44,6 +50,7 @@
    ElPopover: typeof import('element-plus/es')['ElPopover']
    ElRow: typeof import('element-plus/es')['ElRow']
    ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
    ElSegmented: typeof import('element-plus/es')['ElSegmented']
    ElSelect: typeof import('element-plus/es')['ElSelect']
    ElSpace: typeof import('element-plus/es')['ElSpace']
    ElStep: typeof import('element-plus/es')['ElStep']
@@ -55,6 +62,7 @@
    ElTabs: typeof import('element-plus/es')['ElTabs']
    ElTag: typeof import('element-plus/es')['ElTag']
    ElText: typeof import('element-plus/es')['ElText']
    ElTooltip: typeof import('element-plus/es')['ElTooltip']
    ElTree: typeof import('element-plus/es')['ElTree']
    ElUpload: typeof import('element-plus/es')['ElUpload']
    Footer: typeof import('./components/core/Footer.vue')['default']
src/components/core/SiderMenu.vue
@@ -77,7 +77,7 @@
  data() {
    return {
      popVisible: false,
      menuHeight: '800px',
      menuHeight: '600px',
      title: '生态环境线上监管',
      subTitle: '©上海飞羽环保科技有限公司',
      sysIndex: 0,
@@ -139,7 +139,7 @@
    this.navPage(...this.menuPath(this.menus[0]));
  },
  mounted() {
    // this.menuHeight = this.calMenuHeight();
    this.menuHeight = this.calMenuHeight();
  }
};
</script>
@@ -179,7 +179,7 @@
.el-menu-vertical-demo:not(.el-menu--collapse) {
  /* width: 200px; */
  min-height: 100vh;
  /* max-height: 100vh; */
  max-height: 100vh;
}
.el-menu--collapse {
src/components/form/FYForm.vue
@@ -120,15 +120,13 @@
      'submit',
      formObj,
      () => {
        loading.value = false;
        resolve();
      },
      (err) => {
        loading.value = false;
        reject(err ? err : '');
      }
    );
  });
  }).finally(() => (loading.value = false));
}
//取消按钮触发
src/components/list-item/ItemSubTask.vue
@@ -1,27 +1,68 @@
<template>
  <div class="wrapper">
    <div>
      <el-text truncated class="w-250px" size="large">{{ item.name }}</el-text>
    <el-row justify="space-between" class="m-t-4">
      <el-col :span="20">
        <div class="text-title">
          <el-tag
            size="small"
            :type="statusType.type"
            effect="plain"
            class="m-r-4 m-b-4"
          >
            <el-space :size="4">
              <el-icon size="16">
                <component :is="statusType.icon"></component>
              </el-icon>
              {{ item.status }}
            </el-space>
          </el-tag>
          {{ item.name }}
    </div>
    <div>
      <el-text truncated class="w-250px" size="small">{{ item.scenseaddress }}</el-text>
        <div class="text-info">
          <div class="text-label">
            <el-icon class="m-r-4" size="16"><LocationInformation /></el-icon>
            <span>任务地址:</span>
    </div>
    <div>
      <el-text truncated size="small">{{
        $fm.formatYMDH(item.planstarttime)
      }}</el-text>
          {{ item.scenseaddress }}
    </div>
    <div>
      <el-text truncated class="w-250px" size="small">{{
        item.executorrealtimes
      }}</el-text>
        <div class="text-info">
          <div class="text-label">
            <!-- <el-icon><Clock /></el-icon> -->
            <el-icon class="m-r-4" size="16"><AlarmClock /></el-icon>
            <span>任务时间:</span>
    </div>
    <el-row justify="end" style="margin-top: 4px">
          {{ $fm.formatYMD(item.planstarttime) }}
        </div>
        <div class="text-info">
          <div class="text-label">
            <el-icon class="m-r-4" size="16"><User /></el-icon>
            ä»»åŠ¡äººå‘˜ï¼š
          </div>
          {{ item.executorrealtimes }}
        </div>
        <el-space class="m-t-4">
          <el-tag size="small" type="info" effect=""
            >问题:{{ status.proNum }}</el-tag
          >
          <el-tag size="small" type="info" effect=""
            >整改:{{ status.changeNum }}</el-tag
          >
          <el-tag size="small" :type="changePerType" effect=""
            >整改率:{{ status.changePer }}</el-tag
          >
        </el-space>
      </el-col>
      <el-col :span="4">
      <slot :item="item"></slot>
      </el-col>
    </el-row>
  </div>
</template>
<script setup>
import { ref, watch, computed } from 'vue';
import taskApi from '@/api/fysp/taskApi';
import ProCheckProxy from '@/views/fysp/check/ProCheckProxy';
/**
 * ç›‘管对象
 */
@@ -31,12 +72,98 @@
    default: () => {}
  }
});
const loading = ref(false);
const proList = ref([]);
const status = ref({});
const statusType = computed(() => {
  switch (props.item.status) {
    case '未执行':
      return {
        type: 'danger',
        icon: 'WarningFilled'
      };
    case '正在执行':
      return {
        type: 'success',
        icon: 'Timer'
      };
    case '已结束':
      return {
        type: 'info',
        icon: 'SuccessFilled'
      };
    default:
      return {
        type: 'danger',
        icon: 'Warning'
      };
  }
});
const changePerType = computed(() => {
  if (status.value.changeNum == 0) {
    if (status.value.proNum == 0) {
      return 'success';
    } else {
      return 'danger';
    }
  } else if (status.value.proNum == status.value.changeNum) {
    return 'success';
  } else {
    return 'warning';
  }
});
watch(
  () => props.item,
  (nV, oV) => {
    if (nV != oV) {
      fetchProblems(nV);
    }
  },
  { immediate: true }
);
function fetchProblems(subtask) {
  loading.value = true;
  taskApi
    .getProBySubtask(subtask.stguid)
    .then((res) => {
      proList.value = res;
      status.value = ProCheckProxy.calProStatus(res);
    })
    .finally(() => {
      loading.value = false;
    });
}
</script>
<style scoped>
.wrapper {
  /* width: 300px; */
  width: 100%;
  border: 1px solid var(--el-border-color);
  border-radius: var(--el-border-radius-base);
  padding: 4px 8px;
}
.text-title {
  font-weight: var(--el-font-weight-primary);
  color: var(--el-text-color-primary);
  font-size: var(--el-font-size-medium);
}
.text-info {
  display: flex;
  align-items: flex-start;
  color: var(--el-text-color-secondary);
  font-size: var(--el-font-size-small);
}
.text-label {
  display: flex;
  align-items: center;
  white-space: nowrap;
}
</style>
src/views/fysp/data-product/ProdProAnalysis.vue
@@ -1,9 +1,11 @@
<template>
  <div>DailyReport</div>
  <BaseDataProduct product-type="3"></BaseDataProduct>
</template>
<script setup>
/**
 * é—®é¢˜æ•´æ”¹åˆ†æž
 */
import BaseDataProduct from './components/BaseDataProduct.vue';
<script>
export default {
  name: 'DailyReport',
};
</script>
src/views/fysp/data-product/ProdProFollow.vue
@@ -1,9 +1,11 @@
<template>
  <div>DailyReport</div>
  <BaseDataProduct product-type="1"></BaseDataProduct>
</template>
<script setup>
/**
 * é—®é¢˜åŠ¨æ€è·Ÿè¸ª
 */
import BaseDataProduct from './components/BaseDataProduct.vue';
<script>
export default {
  name: 'DailyReport',
};
</script>
src/views/fysp/data-product/ProdSceneReport.vue
@@ -1,9 +1,3 @@
<template>
  <div>DailyReport</div>
  åœºæ™¯æŠ¥å‘Šç®¡ç†
</template>
<script>
export default {
  name: 'DailyReport',
};
</script>
src/views/fysp/data-product/ProdStandardJudge.vue
@@ -1,9 +1,11 @@
<template>
  <div>DailyReport</div>
  <BaseDataProduct product-type="2"></BaseDataProduct>
</template>
<script setup>
/**
 * è§„范性评估
 */
import BaseDataProduct from './components/BaseDataProduct.vue';
<script>
export default {
  name: 'DailyReport',
};
</script>
src/views/fysp/data-product/components/BaseDataProduct.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,353 @@
<template>
  <FYSearchBar ref="searchRef" @search="handleSearch">
    <template #options>
      <!-- åŒºåŽ¿ -->
      <FYOptionLocation
        :allOption="false"
        :level="3"
        :checkStrictly="false"
        v-model:value="formSearch.locations"
      ></FYOptionLocation>
      <!-- åœºæ™¯ç±»åž‹ -->
      <FYOptionScene
        :allOption="false"
        :type="2"
        v-model:value="formSearch.scenetype"
      ></FYOptionScene>
      <!-- æ—¶é—´ -->
      <FYOptionTime
        :initValue="false"
        type="month"
        v-model:value="formSearch.time"
      ></FYOptionTime>
    </template>
    <template #buttons>
      <CompReportDownloadDialog
        name="问题与整改汇总分析与动态跟踪清单"
        :locations="formSearch.locations"
        :scenetype="formSearch.scenetype"
        :time="formSearch.time"
        @submit="handleSearch"
      ></CompReportDownloadDialog>
    </template>
  </FYSearchBar>
  <el-form ref="expandRef" :inline="true">
    <CompQuickSet @quick-set="setOptions"></CompQuickSet>
  </el-form>
  <el-space ref="segmentedRef">
    <el-segmented
      :model-value="activeSheet"
      :options="sheetNames"
      @change="tabChange"
    />
  </el-space>
  <el-table
    ref="tableRef"
    :data="activeExcelData.data"
    v-loading="loading"
    table-layout="auto"
    size="small"
    :height="tableHeight"
    fit
    flexible
    stripe
    border
  >
    <template v-if="activeExcelData.head">
      <el-table-column
        v-for="(item, index) in activeExcelData.head"
        :key="index"
        :prop="item.name"
        :label="item.name"
      >
        <template v-if="item.children" #default="{ row }">
          <span v-html="row[item.name]"></span>
          <el-table-column
            v-for="(item1, index1) in item.children"
            :key="index1"
            :prop="item1.name"
            :label="item1.name"
          >
            <template v-if="item1.children" #default="{ row1 }">
              <span v-html="row1[item1.name]"></span>
              <el-table-column
                v-for="(item2, index2) in item1.children"
                :key="index2"
                :prop="item2.name"
                :label="item2.name"
              >
                <template v-if="item2.children" #default="{ row2 }">
                  <span v-html="row2[item2.name]"></span>
                </template>
              </el-table-column>
            </template>
          </el-table-column>
        </template>
      </el-table-column>
    </template>
  </el-table>
  <!-- <vue-office-excel
    :src="excel"
    :style="'height: ' + tableHeight"
    @rendered="renderedHandler"
    @error="errorHandler"
  /> -->
</template>
<script setup>
/**
 * é—®é¢˜åŠ¨æ€è·Ÿè¸ª
 */
//引入VueOfficeExcel组件
import VueOfficeExcel from '@vue-office/excel';
//引入相关样式
import '@vue-office/excel/lib/index.css';
import { ref, onMounted } from 'vue';
import dayjs from 'dayjs';
import * as XLSX from 'xlsx';
import * as ExcelJS from 'exceljs';
import dataproductApi from '@/api/fysp/dataproductApi';
import CompReportDownloadDialog from './CompReportDownloadDialog.vue';
const emit = defineEmits(['search']);
const props = defineProps({
  // æ•°æ®äº§å“ç±»åž‹ï¼Œ1:问题动态跟踪;2:规范性评估;3:问题整改分析
  productType: Number,
  // åœ¨æ•°æ®å±•示之前,做预处理(主要是处理合并表头)
  beforeDataShow: {
    type: Function,
    default: (data) => {
      return data;
    }
  },
  // æ•°æ®è¡¨æ ¼çš„表头行数
  headNum: {
    type: Number,
    default: 1
  }
});
const formSearch = ref({
  locations: {},
  scenetype: {},
  time: dayjs().add(-1, 'M').date(1).toDate()
});
const loading = ref(false);
const tableHeight = ref('500');
let workbook;
const sheetNames = ref();
const excelDatas = ref(new Map());
const activeSheet = ref();
const activeExcelData = ref({});
const excel = ref('');
const searchRef = ref(null);
const expandRef = ref(null);
const segmentedRef = ref(null);
function setOptions(param) {
  formSearch.value.locations = param.locations;
  formSearch.value.scenetype = param.scenetype;
  formSearch.value.sourceType = param.sourceType;
  handleSearch(false);
}
function tabChange(tabName) {
  activeSheet.value = tabName;
  getTable(activeSheet.value);
}
function handleSearch(forceUpdate) {
  const locations = formSearch.value.locations;
  const time = formSearch.value.time;
  const scenetype = formSearch.value.scenetype;
  const area = {
    provincecode: locations.pCode,
    provincename: locations.pName,
    citycode: locations.cCode,
    cityname: locations.cName,
    districtcode: locations.dCode,
    districtname: locations.dName,
    starttime: dayjs(time).format('YYYY-MM-DD HH:mm:ss'),
    scensetypeid: scenetype.value
  };
  excelDatas.value.clear();
  loading.value = true;
  dataproductApi
    .downloadProduct(area, props.productType, forceUpdate ? forceUpdate : false)
    .then(async (res) => {
      // const data = new Uint8Array(res);
      res.arrayBuffer().then((data) => {
        workbook = XLSX.read(data, { type: 'array' });
        sheetNames.value = workbook.SheetNames;
        activeSheet.value = sheetNames.value[0];
        getTable(activeSheet.value);
      });
      // const workbook = new ExcelJS.Workbook();
      // await workbook.xlsx.load(res);
      // workbook.eachSheet(function (worksheet, sheetId) {
      //   console.log(worksheet.name);
      // });
      // const sheet1 = workbook.worksheets[0]
      // const row = sheet1.getRow(1)
      // console.log(row);
      // console.log(res);
      // console.log(new ArrayBuffer(res));
      // res.arrayBuffer().then(r=>{
      //   excel.value = r
      // })
      // excel.value = new ArrayBuffer(res)
    })
    .finally(() => (loading.value = false));
}
function getTable(sheetName) {
  if (!excelDatas.value.has(sheetName)) {
    const worksheet = workbook.Sheets[sheetName];
    // const tableData = XLSX.utils.sheet_to_json(worksheet, { header: 3 });
    let tableData = XLSX.utils.sheet_to_txt(worksheet);
    // console.log(tableData);
    const regx = new RegExp(/"([^"]|\n)+"/, 'g');
    let matchTxt = tableData.match(regx);
    if (matchTxt) {
      matchTxt.forEach((txt) => {
        let newTxt = txt.replace(new RegExp(/\n/, 'g'), '<br />');
        newTxt = newTxt.replace(new RegExp(/"/, 'g'), '');
        tableData = tableData.replace(txt, newTxt);
      });
      // console.log(tableData);
    }
    const t = strToTableObj(tableData);
    // console.log(head);
    // console.log(data);
    excelDatas.value.set(sheetName, t);
  }
  activeExcelData.value = excelDatas.value.get(sheetName);
  // activeExcelData.value = props.beforeDataShow(tableData);
}
// æ ¹æ®è¡¨å¤´çš„行数,合并表头
function combineTableHead(excelData) {
  if (excelData.length < props.headNum) return;
  // const newHead = {};
  // excelData.splice(0, props.headNum).forEach((row) => {
  //   for (const key in row) {
  //     console.log(key);
  //   }
  // });
}
function calcTableHeight() {
  const h1 = searchRef.value.$el.offsetHeight;
  const h2 = expandRef.value.$el.offsetHeight;
  const h3 = segmentedRef.value.$el.offsetHeight;
  const h = h1 + h2 + h3;
  return `calc(100vh - ${h}px - 60px - var(--el-main-padding) * 2)`;
}
function renderedHandler() {
  console.log('渲染完成');
}
function errorHandler(e) {
  console.log('渲染失败', e);
}
function strToTableObj(data, headNum) {
  const rows = data.split('\n').map((r) => r.split('\t'));
  if (rows.length == 0) return;
  let header = 1;
  for (let i = 1; i < rows.length; i++) {
    const row = rows[i];
    if (row.length == 0) {
      break;
    }
    if (row[0] == '') {
      header++;
    } else {
      break;
    }
  }
  if (rows.length < header) {
    throw new Error(`文件行数小于${header}`);
  }
  // è¡¨å¤´
  let lastHead = [];
  // å±žæ€§å
  const dataKeys = [];
  let offset = 1;
  for (let i = header - 1; i >= 0; i--) {
    const row = rows[i];
    if (lastHead.length == 0) {
      row.forEach((r, y) => {
        lastHead.push({ name: r });
        dataKeys.push(r);
      });
    } else {
      const newHead = [];
      row.forEach((r, y) => {
        if (dataKeys[y] == '') {
          dataKeys[y] = r;
        }
        const last = lastHead[y];
        if (!last) {
          console.log(last);
        }
        if (last.name == '') {
          newHead.push({ name: r });
          offset++;
        } else if (r != '') {
          newHead.push({
            name: r,
            children: [last]
          });
          offset = 1;
        } else {
          newHead.push({ name: '' });
          let _index = newHead.length - 1 - offset;
          _index = _index >= 0 ? _index : 0;
          newHead[_index].children.push(last);
          offset++;
        }
      });
      lastHead = newHead;
    }
  }
  const heads = [];
  lastHead.forEach((h) => {
    if (h && h.name != '') {
      heads.push(h);
    }
  });
  const tableData = [];
  for (let i = header; i < rows.length; i++) {
    const row = rows[i];
    const data = {};
    row.forEach((r, y) => {
      data[dataKeys[y]] = r;
    });
    tableData.push(data);
  }
  return { head: heads, data: tableData };
}
onMounted(() => {
  tableHeight.value = calcTableHeight();
  // handleSearch()
});
</script>
src/views/fysp/data-product/components/CompReportDownloadDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
<template>
  <el-button icon="Download" type="success" @click="dialogVisible = true"
    >导出报告</el-button
  >
  <el-dialog v-model="dialogVisible" :title="name" width="500">
    <el-text tag="b" size="large">数据范围确认</el-text>
    <el-text tag="div">区域:{{ locationText }}</el-text>
    <el-text tag="div">类型:{{ scenetype.label }}</el-text>
    <el-text tag="div">时间:{{ timeText }}</el-text>
    <template #footer>
      <div class="dialog-footer">
        <el-row align="middle">
          <el-checkbox v-model="forceUpdate" label="强制生成新报告" />
          <el-tooltip placement="bottom-start" effect="light">
            <template #content>
              <el-text tag="b" size="small">不勾选:</el-text><br />
              <el-text size="small"
                >不勾选时,如果已生成过相同区域的报告,则直接获取该份报告记录</el-text
              ><br />
              <el-text tag="b" size="small">勾选:</el-text><br />
              <el-text size="small"
                >勾选时,无论是否有历史记录,都会启动报告生成任务覆盖旧记录,可在后台任务界面查看任务进度</el-text
              ><br />
            </template>
            <el-icon
              class="m-l-8 cursor-p"
              :size="16"
              color="var(--el-color-warning)"
              ><QuestionFilled
            /></el-icon>
          </el-tooltip>
        </el-row>
        <div>
          <el-button @click="dialogVisible = false">取消</el-button>
          <el-button type="primary" @click="handleSubmit">确定</el-button>
        </div>
      </div>
    </template>
  </el-dialog>
</template>
<script>
import dayjs from 'dayjs';
export default {
  props: ['name', 'locations', 'time', 'scenetype'],
  emits: ['submit'],
  data() {
    return {
      dialogVisible: false,
      forceUpdate: false
    };
  },
  computed: {
    locationText() {
      const loc = this.locations;
      let text = '';
      text = loc.pName == loc.cName ? loc.pName : loc.pName + loc.cName;
      text += loc.dName;
      return text;
    },
    timeText() {
      return dayjs(this.time).format('YYYYå¹´MM月');
    }
  },
  methods: {
    handleSubmit() {
      this.$emit('submit', this.forceUpdate);
    }
  }
};
</script>
<style scoped>
.dialog-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 2px;
}
</style>
src/views/fysp/task/TaskManage.vue
@@ -39,24 +39,28 @@
          <el-tabs model-value="first">
            <el-tab-pane label="监管计划" name="first">
              <el-row>
                <el-col :span="curSubTaskList.length > 0 ? 16 : 24">
                <el-col :span="curSubTaskList ? 16 : 24">
                  <CompMonitorPlan
                    ref="planRef"
                    :task="curTask.data"
                    @date-change="onDateChange"
                  ></CompMonitorPlan>
                </el-col>
                <el-col v-if="curSubTaskList.length > 0" :span="8">
                <el-col v-if="curSubTaskList" :span="8">
                  <CompSubTaskList
                    :data="curSubTaskList"
                    create
                    v-model="curSubTaskList"
                    :loading="subTaskLoading"
                    height="56vh"
                    @add="subTaskDrawer = true"
                    @submit="handleSubtaskSubmit"
                  ></CompSubTaskList>
                </el-col>
              </el-row>
            </el-tab-pane>
            <el-tab-pane label="监管地图" name="second">
            <!-- <el-tab-pane label="监管地图" name="second">
              <CompTaskMap></CompTaskMap>
            </el-tab-pane>
            </el-tab-pane> -->
          </el-tabs>
        </el-row>
        <el-divider></el-divider>
@@ -91,6 +95,7 @@
    <CompDayTask
      :day-task="curDayTask"
      :mObjList="curMonitorObjList"
      @submit="handleSubtaskSubmit"
    ></CompDayTask>
  </el-drawer>
  <el-dialog
@@ -177,7 +182,8 @@
      // å½“前选择的日任务
      curDayTask: {},
      // å½“前选择的日任务下的子任务
      curSubTaskList: [],
      curSubTaskList: undefined,
      subTaskLoading: false,
      // æ€»ä»»åŠ¡æ–°å¢žå¼¹å‡ºæ¡†
      topTaskAddVisible: false
    };
@@ -238,12 +244,12 @@
      this.task = task;
      this.sideLoading = false;
      this.mainLoading = true;
      this.curSubTaskList = []
      this.curSubTaskList = undefined;
      this.curTask = task;
      taskApi
        .fetchMonitorObjectVersion(task.data.tguid)
        .then((res) => {
          this.curMonitorObjList = res;
          this.curTask = task;
        })
        .finally(() => {
          this.mainLoading = false;
@@ -268,11 +274,19 @@
      });
    },
    onDateChange(dayTask) {
      if (dayTask) {
        this.subTaskLoading = true;
      // this.subTaskDrawer = true;
      this.curDayTask = dayTask;
      taskApi.fetchSubtaskByDayTask(dayTask.guid).then((res) => {
        taskApi
          .fetchSubtaskByDayTask(dayTask.guid)
          .then((res) => {
        this.curSubTaskList = res;
      });
          })
          .finally(() => (this.subTaskLoading = false));
      } else {
        this.curSubTaskList = [];
      }
    },
    navToTaskCreate(value) {
      this.topTaskAddVisible = false;
@@ -282,6 +296,12 @@
          task: encodeURIComponent(JSON.stringify(value))
        }
      });
    },
    handleSubtaskSubmit() {
      this.subTaskLoading = true;
      this.$refs.planRef
        .fetchDayTasks()
        .finally(() => (this.subTaskLoading = false));
    }
  },
  mounted() {
src/views/fysp/task/TaskProxy.js
@@ -4,5 +4,28 @@
   */
  ceateSubTask(){
  },
  /**
   * æ ¹æ®å¤šé€‰ä¸‹æ‹‰æ¡†çš„选项值,返回任务执行人对象
   * @returns
   */
  getExecutors(data, executorOptions) {
    const ids = [];
    const uNames = [];
    const rNames = [];
    executorOptions.forEach((e) => {
      const index = data.indexOf(e.value);
      if (index != -1) {
        ids.push(e.data.guid);
        uNames.push(e.data.acountname);
        rNames.push(e.data.realname);
      }
    });
    return {
      id: ids.join('#'),
      uName: uNames.join('#'),
      rName: rNames.join('#')
    };
  }
}
src/views/fysp/task/components/CompDayTask.vue
@@ -9,6 +9,7 @@
        :data="seletedSceneList"
        :dayTask="dayTask"
        @delete="deleteScene"
        @submit="createSubtasks"
      ></CompSubTaskSelect>
      <div>
        <!-- <el-scrollbar height="50vh"> -->
@@ -37,28 +38,11 @@
      </div>
    </el-col>
    <el-col :span="8">
      <el-row justify="space-between">
        <el-text>单日计划</el-text>
        <el-button type="success" size="small" @click="editTask"
          >新增</el-button
        >
      </el-row>
      <el-divider />
      <div>
        <el-scrollbar :height="height">
          <ItemSubTask
            v-for="stask in curSubTaskList"
            :key="stask.guid"
            :item="stask"
          >
            <template #default="{ item }">
              <el-button type="danger" size="small" @click="editTask"
                >移除</el-button
              >
            </template>
          </ItemSubTask>
        </el-scrollbar>
      </div>
      <CompSubTaskList
        v-model="curSubTaskList"
        :height="height"
        @submit="deleteSubtasks"
      ></CompSubTaskList>
    </el-col>
  </el-row>
</template>
@@ -66,11 +50,15 @@
import { ref, watch, onMounted } from 'vue';
import { useCloned } from '@vueuse/core';
import { useRoute, useRouter } from 'vue-router';
import { ElMessage, ElNotification, ElMessageBox } from 'element-plus';
import taskApi from '@/api/fysp/taskApi';
import subtaskApi from '@/api/fysp/subtaskApi';
import TaskProxy from '../TaskProxy';
import CompMonitorObj from './CompMonitorObj.vue';
import CompSubTaskSelect from './CompSubTaskSelect.vue';
import CompSubTaskList from './CompSubTaskList.vue';
import dayjs from 'dayjs';
const route = useRoute();
@@ -79,6 +67,8 @@
  dayTask: Object,
  mObjList: Array
});
const emit = defineEmits(['submit'])
/*************************** æ•°æ®åˆå§‹åŒ– ************************************/
// å·¡æŸ¥å­ä»»åŠ¡é›†åˆ
@@ -137,5 +127,62 @@
  const index = seletedSceneList.value.indexOf(item);
  seletedSceneList.value.splice(index, 1);
}
function createSubtasks(executors) {
  const dt = props.dayTask;
  const subtasks = seletedSceneList.value.map((_) => {
    const s = _.scene;
    return {
      // ä¸»é”®ç”±æœåŠ¡ç«¯åˆ›å»º
      stguid: undefined,
      tguid: dt.tsGuid,
      tsguid: dt.guid,
      name: `${s.name}巡查`,
      typeno: 1,
      type: '巡查',
      provincecode: s.provincecode,
      provincename: s.provincename,
      citycode: s.citycode,
      cityname: s.cityname,
      districtcode: s.districtcode,
      districtname: s.districtname,
      scensename: s.name,
      scenseid: s.guid,
      scenseaddress: s.location,
      planstarttime: dt.date,
      planendtime: dayjs(dt.date).endOf('day').set('millisecond', 0).toDate(),
      deployerguid: 'rAR0A4gJdlOZEqZs',
      deployerusername: 'ccheck',
      deployerrealname: '整改审核',
      executorguids: executors.ids,
      executorusernames: executors.uName,
      executorrealtimes: executors.rName,
      status: '未执行',
      remark: undefined
    };
  });
  // æ›´æ–°åœºæ™¯ç›‘管次数
  seletedSceneList.value.forEach((s) => {
    s.extension1 = s.extension1 ? parseInt(s.extension1) + 1 + '' : '1';
  });
  taskApi.updateMonitorObject(seletedSceneList.value).then((res) => {
    if (res > 0) {
      subtaskApi.putSubtasks(subtasks).then((res) => {
        seletedSceneList.value = [];
        fetchSubTask(props.dayTask.guid);
        ElMessage({
          message: '巡查任务添加成功',
          type: 'success'
        });
        emit('submit')
      });
    }
  });
}
function deleteSubtasks() {
  emit('submit')
}
</script>
<style scoped></style>
src/views/fysp/task/components/CompMonitorPlan.vue
@@ -55,9 +55,9 @@
    default: () => {}
  }
});
const emit = defineEmits(['dateChange'])
const emit = defineEmits(['dateChange']);
// é€‰ä¸­æ—¥æœŸ
const dateValue = ref(new Date());
const dateValue = ref();
// æ—¥åŽ†æ ‡é¢˜
const title = computed(() => {
  if (props.task) {
@@ -70,18 +70,27 @@
// æ—¥åŽ†èŒƒå›´
const startDay = computed(() => dayjs(props.task.starttime));
const endDay = computed(() => dayjs(props.task.endtime));
const dateRange = computed(() => [startDay.value.toDate(), endDay.value.toDate()]);
const dateRange = computed(() => [
  startDay.value.toDate(),
  endDay.value.toDate()
]);
// const dateRange = computed(() => [new Date(2024, 4, 27), new Date(2024, 5, 30)]);
// æ—¥æœŸæ˜¯å¦åœ¨ä»»åŠ¡èŒƒå›´å†…
function isDayEnable(day) {
  const _day = dayjs(day);
  return _day.isSameOrAfter(startDay.value, 'day') && _day.isSameOrBefore(endDay.value, 'day');
  return (
    _day.isSameOrAfter(startDay.value, 'day') &&
    _day.isSameOrBefore(endDay.value, 'day')
  );
}
/********************** æ—¥æœŸæ ·å¼ *********************************/
function calendarDayClz(day) {
  return 'calendar-day ' + (isDayEnable(day) ? 'calendar-day-enable' : 'calendar-day-disable');
  return (
    'calendar-day ' +
    (isDayEnable(day) ? 'calendar-day-enable' : 'calendar-day-disable')
  );
}
function getDay(day) {
  return day.split('-').splice(1, 2).join('-');
@@ -92,12 +101,16 @@
// èŽ·å–æ—¥ä»»åŠ¡ç»Ÿè®¡ä¿¡æ¯
const dayTaskLoading = ref(false);
const dayTaskList = ref([]);
function fetchDayTasks(topTaskId) {
function fetchDayTasks() {
  dayTaskLoading.value = true;
  taskApi
    .fetchDayTasks(topTaskId)
  return taskApi
    .fetchDayTasks(props.task.tguid)
    .then((res) => {
      dayTaskList.value = res;
      // å¦‚果已选日期存在,在重新获取日任务统计信息后,再次触发点击事件
      if (dateValue.value) {
        onDateChange(dateValue.value)
      }
    })
    .finally(() => (dayTaskLoading.value = false));
}
@@ -119,11 +132,11 @@
}
function onDateChange(e) {
  const day = dayjs(e).format('YYYY-MM-DD')
  const t = computeDayTask(day)
  console.log(t);
  emit('dateChange', t)
  if (isDayEnable(e)) {
    const day = dayjs(e).format('YYYY-MM-DD');
    const t = computeDayTask(day);
    emit('dateChange', t);
  }
}
// æ€»ä»»åŠ¡ç»Ÿè®¡
@@ -141,12 +154,14 @@
watch(
  () => props.task,
  (nV) => {
    if (nV.tguid) {
      fetchDayTasks(nV.tguid);
    if (nV && nV.tguid) {
      fetchDayTasks();
    }
  },
  { immediate: true }
);
defineExpose({ fetchDayTasks });
</script>
<style scoped>
.li-01 {
@@ -185,7 +200,7 @@
  border: 1px solid rgb(172, 165, 165);
  border-radius: 50%; */
  padding: 8px;
  height: var(--el-calendar-cell-width);
  /* min-height: var(--el-calendar-cell-width); */
}
.calendar-day-enable {
src/views/fysp/task/components/CompSubTaskEdit.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,170 @@
<template>
  <FYForm
    ref="formRef"
    :form-info="formInfo"
    :rules="rules"
    :useCancel="true"
    @submit="submit"
    @cancel="cancel"
  >
    <template #form-item="{ formObj }">
      <el-form-item label="任务名称" prop="name">
        <el-input disabled v-model="formObj.name" placeholder="任务名称" />
      </el-form-item>
      <el-form-item label="场景地址" prop="name">
        <el-input
          disabled
          v-model="formObj.scenseaddress"
          placeholder="场景地址"
        />
      </el-form-item>
      <FYOptionTime
        label="计划时间"
        prop="planstarttime"
        :initValue="false"
        type="date"
        v-model:value="formObj.planstarttime"
        @change="handleTimeChange"
      ></FYOptionTime>
      <el-form-item label="执行人" prop="_executors">
        <el-select
          v-model="formObj._executors"
          multiple
          clearable
          collapse-tags
          placeholder="选择执行人"
          :max-collapse-tags="3"
          style="width: 300px"
        >
          <el-option
            v-for="s in executorOptions"
            :key="s.value"
            :label="s.label"
            :value="s.value"
          />
        </el-select>
      </el-form-item>
    </template>
  </FYForm>
</template>
<script setup>
import { ref, computed, onMounted, reactive } from 'vue';
import subtaskApi from '@/api/fysp/subtaskApi';
import userApi from '@/api/fysp/userApi';
import dayjs from 'dayjs';
const props = defineProps({
  //基本信息
  modelValue: Object,
  //是创建或者更新
  create: Boolean
});
const emit = defineEmits(['submit', 'cancel', 'update:modelValue']);
const formRef = ref(null);
// ä»»åŠ¡æ‰§è¡Œäººé€‰é¡¹
const executorOptions = ref([]);
const formInfo = computed(() => {
  return {
    ...props.modelValue,
    _executors: props.modelValue
      ? props.modelValue.executorguids.split('#')
      : []
  };
});
const rules = reactive({
  name: [
    {
      required: true,
      message: '场景名称不能为空',
      trigger: 'blur'
    }
  ],
  _scenetype: [
    {
      required: true,
      message: '场景类型不能为空',
      trigger: 'change'
    }
  ]
});
function handleTimeChange(time) {
  formRef.value.formObj.planendtime = dayjs(time).endOf('day').set('millisecond', 0)
}
function getExecutors(data) {
  const ids = [];
  const uNames = [];
  const rNames = [];
  executorOptions.value.forEach((e) => {
    const index = data._executors.indexOf(e.value);
    if (index != -1) {
      ids.push(e.data.guid);
      uNames.push(e.data.acountname);
      rNames.push(e.data.realname);
    }
  });
  return {
    id: ids.join('#'),
    uName: uNames.join('#'),
    rName: rNames.join('#')
  };
}
// åˆ›å»ºæ–°åœºæ™¯
function createScene(v, success, fail) {
  // return sceneApi
  //   .createScene(v)
  //   .then(() => {
  //     emit('onSubmit', v);
  //     success();
  //   })
  //   .catch((err) => {
  //     fail(err);
  //   });
}
// æ›´æ–°åœºæ™¯
function updateScene(v, success, fail) {
  return subtaskApi
    .adjustSubtask(v)
    .then(() => {
      emit('update:modelValue', v)
      emit('submit', v);
      success();
    })
    .catch((err) => {
      fail(err);
    });
}
function submit(v, success, fail) {
  const executors = getExecutors(v.value);
  v.value.executorguids = executors.id
  v.value.executorusernames = executors.uName
  v.value.executorrealtimes = executors.rName
  return props.create
    ? createScene(v.value, success, fail)
    : updateScene(v.value, success, fail);
}
function cancel() {
  emit('cancel');
}
function initOptions() {
  userApi.getUserByType(1).then((res) => {
    executorOptions.value = res.map((v) => {
      return {
        label: v.realname,
        value: v.guid,
        data: v
      };
    });
  });
}
onMounted(() => {
  initOptions();
});
</script>
src/views/fysp/task/components/CompSubTaskList.vue
@@ -1,42 +1,137 @@
<template>
  <el-row justify="space-between">
    <el-text>单日计划</el-text>
    <el-button type="success" size="small" @click="add">新增</el-button>
    <el-button
      v-show="create && data && data.length > 0"
      type="success"
      size="small"
      @click="add"
      >任务调整</el-button
    >
  </el-row>
  <el-divider />
  <div>
    <el-scrollbar :height="height">
      <el-space fill direction="vertical">
    <el-scrollbar v-loading="loading" :height="height">
      <el-space
        v-if="data && data.length > 0"
        fill
        :fill-ratio="100"
        direction="vertical"
        style="width: 100%"
      >
        <ItemSubTask v-for="s in data" :key="s.guid" :item="s">
          <template #default="{ item }">
            <el-button type="danger" size="small" @click="remove(item)"
            <el-space direction="vertical">
              <el-button
                :disabled="item.status != '未执行'"
                plain
                type="primary"
                size="small"
                @click="edit(item)"
                >编辑</el-button
              >
              <el-button
                :disabled="item.status != '未执行'"
                type="default"
                size="small"
                @click="remove(item)"
              >移除</el-button
            >
            </el-space>
          </template>
        </ItemSubTask>
      </el-space>
      <div v-else>
        <el-empty description="无任务记录" />
        <el-row v-if="create" justify="center">
          <el-button type="success" size="small" @click="add"
            >添加任务</el-button
          >
        </el-row>
      </div>
    </el-scrollbar>
  </div>
  <el-dialog
    v-model="dialogVisible"
    width="600"
    title="巡查任务编辑"
    destroy-on-close
    :close-on-click-modal="false"
    :close-on-press-escape="false"
    :show-close="false"
  >
    <CompSubTaskEdit
      v-model="activeItem"
      @submit="onEditSubmit"
      @cancel="dialogVisible = false"
    ></CompSubTaskEdit>
  </el-dialog>
</template>
<script setup>
import { ref, watch, onMounted } from 'vue';
import { ref, computed, watch, onMounted, onUnmounted } from 'vue';
import { ElMessageBox, ElNotification, ElMessage } from 'element-plus';
import CompSubTaskEdit from './CompSubTaskEdit.vue';
import subtaskApi from '@/api/fysp/subtaskApi';
const props = defineProps({
  data: Array,
  modelValue: Array,
  height: {
    type: String,
    default: '70vh'
  }
  },
  // æ˜¯å¦æ˜¾ç¤ºæ·»åŠ ä»»åŠ¡æŒ‰é’®
  create: Boolean,
  loading: Boolean
});
const curSubTaskList = ref([]);
const emit = defineEmits(['add', 'remove']);
const dialogVisible = ref(false);
const activeItem = ref(null);
const data = computed(() => props.modelValue);
const emit = defineEmits(['submit', 'add', 'remove', 'update:modelValue']);
function remove(item) {
  if (item.status == '未执行') {
    ElMessageBox.confirm('是否移除监管任务', `移除确认`, {
      confirmButtonText: '确认',
      cancelButtonText: '取消',
      type: 'warning'
    }).then(() => {
      return subtaskApi.deleteSubtask(item.stguid).then(res=>{
        if (res == 1) {
          const index = data.value.indexOf(item);
          data.value.splice(index, 1);
          emit('update:modelValue', data.value);
  emit('remove', item);
        } else {
          Promise.reject('删除巡查任务失败')
        }
      })
    });
  }
}
function edit(item) {
  activeItem.value = item;
  dialogVisible.value = true;
}
function onEditSubmit(item) {
  dialogVisible.value = false;
  const index = data.value.findIndex((v) => {
    return item.stguid == v.stguid;
  });
  data.value.splice(index, 1, item);
  emit('update:modelValue', data.value);
  emit('submit');
}
function add() {
  emit('add');
}
onUnmounted(() => {
  dialogVisible.value = false;
});
</script>
src/views/fysp/task/components/CompSubTaskSelect.vue
@@ -73,6 +73,7 @@
import { ref, reactive, watch, computed, onMounted } from 'vue';
import { ElMessageBox, ElNotification, ElMessage } from 'element-plus';
import taskApi from '@/api/fysp/taskApi';
import TaskProxy from '../TaskProxy';
onMounted(() => {
  // if (props.height) {
@@ -91,7 +92,7 @@
  dayTask: Object
});
const emit = defineEmits(['delete']);
const emit = defineEmits(['submit', 'delete']);
const scrollHeight = ref('14vh');
@@ -120,6 +121,9 @@
    fail('未选择监管场景');
  } else {
    success();
    // å°†ä»»åŠ¡æ‰§è¡Œäººæ ¼å¼åŒ–å¹¶ä¼ é€’
    const param = TaskProxy.getExecutors(v.value.executor, executors.value)
    emit('submit', param)
  }
}
src/views/fysp/task/components/CompTaskEdit.vue
@@ -87,7 +87,7 @@
      <el-form-item>
        <el-row justify="center">
          <el-link type="primary" @click="showMore = !showMore">
            {{ showMore ? '收起' : '查看更多选项' }}
            {{ showMore ? '收起' : '更多选项' }}
            <el-icon v-if="showMore"><ArrowUp /></el-icon>
            <el-icon v-else><ArrowDown /></el-icon>
          </el-link>