Selaa lähdekoodia

清表模板修改

duy 2 viikkoa sitten
vanhempi
commit
6fc351bef9

+ 333 - 30
package-lock.json

@@ -16,10 +16,13 @@
         "classlist-polyfill": "^1.2.0",
         "crypto-js": "^4.0.0",
         "element-ui": "^2.15.14",
+        "exceljs": "^4.4.0",
+        "file-saver": "^2.0.5",
         "js-base64": "^2.5.1",
         "js-cookie": "^2.2.0",
         "js-fast-way": "^0.5.6",
         "js-md5": "^0.7.3",
+        "luckyexcel": "^1.0.1",
         "mockjs": "^1.0.1-beta3",
         "node-gyp": "^5.0.6",
         "nprogress": "^0.2.0",
@@ -1650,6 +1653,47 @@
         "node": ">=10.0.0"
       }
     },
+    "node_modules/@fast-csv/format": {
+      "version": "4.3.5",
+      "resolved": "http://219.151.181.73:9000/@fast-csv/format/-/format-4.3.5.tgz",
+      "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==",
+      "license": "MIT",
+      "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/format/node_modules/@types/node": {
+      "version": "14.18.63",
+      "resolved": "http://219.151.181.73:9000/@types/node/-/node-14.18.63.tgz",
+      "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==",
+      "license": "MIT"
+    },
+    "node_modules/@fast-csv/parse": {
+      "version": "4.3.6",
+      "resolved": "http://219.151.181.73:9000/@fast-csv/parse/-/parse-4.3.6.tgz",
+      "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==",
+      "license": "MIT",
+      "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/@fast-csv/parse/node_modules/@types/node": {
+      "version": "14.18.63",
+      "resolved": "http://219.151.181.73:9000/@types/node/-/node-14.18.63.tgz",
+      "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==",
+      "license": "MIT"
+    },
     "node_modules/@hapi/address": {
       "version": "2.1.4",
       "resolved": "http://219.151.181.73:9000/@hapi/address/-/address-2.1.4.tgz",
@@ -2859,7 +2903,6 @@
       "version": "5.3.2",
       "resolved": "http://219.151.181.73:9000/archiver/-/archiver-5.3.2.tgz",
       "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "archiver-utils": "^2.1.0",
@@ -2878,7 +2921,6 @@
       "version": "2.1.0",
       "resolved": "http://219.151.181.73:9000/archiver-utils/-/archiver-utils-2.1.0.tgz",
       "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "glob": "^7.1.4",
@@ -2900,14 +2942,12 @@
       "version": "3.2.6",
       "resolved": "http://219.151.181.73:9000/async/-/async-3.2.6.tgz",
       "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
-      "dev": true,
       "license": "MIT"
     },
     "node_modules/archiver/node_modules/readable-stream": {
       "version": "3.6.2",
       "resolved": "http://219.151.181.73:9000/readable-stream/-/readable-stream-3.6.2.tgz",
       "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "inherits": "^2.0.3",
@@ -3768,6 +3808,15 @@
         "node": ">= 6.0.0"
       }
     },
+    "node_modules/big-integer": {
+      "version": "1.6.52",
+      "resolved": "http://219.151.181.73:9000/big-integer/-/big-integer-1.6.52.tgz",
+      "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
+      "license": "Unlicense",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
     "node_modules/big.js": {
       "version": "5.2.2",
       "resolved": "http://219.151.181.73:9000/big.js/-/big.js-5.2.2.tgz",
@@ -3777,6 +3826,19 @@
         "node": "*"
       }
     },
+    "node_modules/binary": {
+      "version": "0.3.0",
+      "resolved": "http://219.151.181.73:9000/binary/-/binary-0.3.0.tgz",
+      "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==",
+      "license": "MIT",
+      "dependencies": {
+        "buffers": "~0.1.1",
+        "chainsaw": "~0.1.0"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/binary-extensions": {
       "version": "1.13.1",
       "resolved": "http://219.151.181.73:9000/binary-extensions/-/binary-extensions-1.13.1.tgz",
@@ -3791,7 +3853,6 @@
       "version": "4.1.0",
       "resolved": "http://219.151.181.73:9000/bl/-/bl-4.1.0.tgz",
       "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "buffer": "^5.5.0",
@@ -3803,7 +3864,6 @@
       "version": "5.7.1",
       "resolved": "http://219.151.181.73:9000/buffer/-/buffer-5.7.1.tgz",
       "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -3828,7 +3888,6 @@
       "version": "3.6.2",
       "resolved": "http://219.151.181.73:9000/readable-stream/-/readable-stream-3.6.2.tgz",
       "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "inherits": "^2.0.3",
@@ -4090,7 +4149,6 @@
       "version": "0.2.13",
       "resolved": "http://219.151.181.73:9000/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
       "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": "*"
@@ -4109,12 +4167,29 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/buffer-indexof-polyfill": {
+      "version": "1.0.2",
+      "resolved": "http://219.151.181.73:9000/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
+      "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
     "node_modules/buffer-xor": {
       "version": "1.0.3",
       "resolved": "http://219.151.181.73:9000/buffer-xor/-/buffer-xor-1.0.3.tgz",
       "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
       "license": "MIT"
     },
+    "node_modules/buffers": {
+      "version": "0.1.1",
+      "resolved": "http://219.151.181.73:9000/buffers/-/buffers-0.1.1.tgz",
+      "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==",
+      "engines": {
+        "node": ">=0.2.0"
+      }
+    },
     "node_modules/builtin-status-codes": {
       "version": "3.0.0",
       "resolved": "http://219.151.181.73:9000/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
@@ -4386,6 +4461,18 @@
         "node": ">=4"
       }
     },
+    "node_modules/chainsaw": {
+      "version": "0.1.0",
+      "resolved": "http://219.151.181.73:9000/chainsaw/-/chainsaw-0.1.0.tgz",
+      "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==",
+      "license": "MIT/X11",
+      "dependencies": {
+        "traverse": ">=0.3.0 <0.4"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/chalk": {
       "version": "2.4.2",
       "resolved": "http://219.151.181.73:9000/chalk/-/chalk-2.4.2.tgz",
@@ -4921,7 +5008,6 @@
       "version": "4.1.2",
       "resolved": "http://219.151.181.73:9000/compress-commons/-/compress-commons-4.1.2.tgz",
       "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "buffer-crc32": "^0.2.13",
@@ -4937,7 +5023,6 @@
       "version": "3.6.2",
       "resolved": "http://219.151.181.73:9000/readable-stream/-/readable-stream-3.6.2.tgz",
       "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "inherits": "^2.0.3",
@@ -5270,7 +5355,6 @@
       "version": "1.2.2",
       "resolved": "http://219.151.181.73:9000/crc-32/-/crc-32-1.2.2.tgz",
       "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
-      "dev": true,
       "license": "Apache-2.0",
       "bin": {
         "crc32": "bin/crc32.njs"
@@ -5283,7 +5367,6 @@
       "version": "4.0.3",
       "resolved": "http://219.151.181.73:9000/crc32-stream/-/crc32-stream-4.0.3.tgz",
       "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "crc-32": "^1.2.0",
@@ -5297,7 +5380,6 @@
       "version": "3.6.2",
       "resolved": "http://219.151.181.73:9000/readable-stream/-/readable-stream-3.6.2.tgz",
       "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "inherits": "^2.0.3",
@@ -5803,6 +5885,12 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/dayjs": {
+      "version": "1.11.18",
+      "resolved": "http://219.151.181.73:9000/dayjs/-/dayjs-1.11.18.tgz",
+      "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==",
+      "license": "MIT"
+    },
     "node_modules/de-indent": {
       "version": "1.0.2",
       "resolved": "http://219.151.181.73:9000/de-indent/-/de-indent-1.0.2.tgz",
@@ -6409,6 +6497,15 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/duplexer2": {
+      "version": "0.1.4",
+      "resolved": "http://219.151.181.73:9000/duplexer2/-/duplexer2-0.1.4.tgz",
+      "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "readable-stream": "^2.0.2"
+      }
+    },
     "node_modules/duplexify": {
       "version": "3.7.1",
       "resolved": "http://219.151.181.73:9000/duplexify/-/duplexify-3.7.1.tgz",
@@ -6889,6 +6986,49 @@
         "safe-buffer": "^5.1.1"
       }
     },
+    "node_modules/exceljs": {
+      "version": "4.4.0",
+      "resolved": "http://219.151.181.73:9000/exceljs/-/exceljs-4.4.0.tgz",
+      "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==",
+      "license": "MIT",
+      "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/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "http://219.151.181.73:9000/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/exceljs/node_modules/uuid": {
+      "version": "8.3.2",
+      "resolved": "http://219.151.181.73:9000/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+      "license": "MIT",
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
     "node_modules/execa": {
       "version": "1.0.0",
       "resolved": "http://219.151.181.73:9000/execa/-/execa-1.0.0.tgz",
@@ -7027,6 +7167,19 @@
       ],
       "license": "MIT"
     },
+    "node_modules/fast-csv": {
+      "version": "4.3.6",
+      "resolved": "http://219.151.181.73:9000/fast-csv/-/fast-csv-4.3.6.tgz",
+      "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==",
+      "license": "MIT",
+      "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",
       "resolved": "http://219.151.181.73:9000/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -7106,6 +7259,12 @@
         "webpack": "^4.0.0"
       }
     },
+    "node_modules/file-saver": {
+      "version": "2.0.5",
+      "resolved": "http://219.151.181.73:9000/file-saver/-/file-saver-2.0.5.tgz",
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==",
+      "license": "MIT"
+    },
     "node_modules/filesize": {
       "version": "3.6.1",
       "resolved": "http://219.151.181.73:9000/filesize/-/filesize-3.6.1.tgz",
@@ -7358,7 +7517,6 @@
       "version": "1.0.0",
       "resolved": "http://219.151.181.73:9000/fs-constants/-/fs-constants-1.0.0.tgz",
       "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
-      "dev": true,
       "license": "MIT"
     },
     "node_modules/fs-extra": {
@@ -7403,6 +7561,22 @@
       "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
       "license": "ISC"
     },
+    "node_modules/fstream": {
+      "version": "1.0.12",
+      "resolved": "http://219.151.181.73:9000/fstream/-/fstream-1.0.12.tgz",
+      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+      "deprecated": "This package is no longer supported.",
+      "license": "ISC",
+      "dependencies": {
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
+      },
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
     "node_modules/function-bind": {
       "version": "1.1.2",
       "resolved": "http://219.151.181.73:9000/function-bind/-/function-bind-1.1.2.tgz",
@@ -8340,6 +8514,12 @@
         "node": ">= 4"
       }
     },
+    "node_modules/immediate": {
+      "version": "3.0.6",
+      "resolved": "http://219.151.181.73:9000/immediate/-/immediate-3.0.6.tgz",
+      "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+      "license": "MIT"
+    },
     "node_modules/immutable": {
       "version": "4.3.7",
       "resolved": "http://219.151.181.73:9000/immutable/-/immutable-4.3.7.tgz",
@@ -9240,6 +9420,18 @@
         "node": ">=0.6.0"
       }
     },
+    "node_modules/jszip": {
+      "version": "3.10.1",
+      "resolved": "http://219.151.181.73:9000/jszip/-/jszip-3.10.1.tgz",
+      "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+      "license": "(MIT OR GPL-3.0-or-later)",
+      "dependencies": {
+        "lie": "~3.3.0",
+        "pako": "~1.0.2",
+        "readable-stream": "~2.3.6",
+        "setimmediate": "^1.0.5"
+      }
+    },
     "node_modules/killable": {
       "version": "1.0.1",
       "resolved": "http://219.151.181.73:9000/killable/-/killable-1.0.1.tgz",
@@ -9303,7 +9495,6 @@
       "version": "1.0.1",
       "resolved": "http://219.151.181.73:9000/lazystream/-/lazystream-1.0.1.tgz",
       "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "readable-stream": "^2.0.5"
@@ -9312,6 +9503,15 @@
         "node": ">= 0.6.3"
       }
     },
+    "node_modules/lie": {
+      "version": "3.3.0",
+      "resolved": "http://219.151.181.73:9000/lie/-/lie-3.3.0.tgz",
+      "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+      "license": "MIT",
+      "dependencies": {
+        "immediate": "~3.0.5"
+      }
+    },
     "node_modules/lines-and-columns": {
       "version": "1.2.4",
       "resolved": "http://219.151.181.73:9000/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@@ -9319,6 +9519,12 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/listenercount": {
+      "version": "1.0.1",
+      "resolved": "http://219.151.181.73:9000/listenercount/-/listenercount-1.0.1.tgz",
+      "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==",
+      "license": "ISC"
+    },
     "node_modules/loader-runner": {
       "version": "2.4.0",
       "resolved": "http://219.151.181.73:9000/loader-runner/-/loader-runner-2.4.0.tgz",
@@ -9379,7 +9585,6 @@
       "version": "4.2.0",
       "resolved": "http://219.151.181.73:9000/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
       "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==",
-      "dev": true,
       "license": "MIT"
     },
     "node_modules/lodash.defaultsdeep": {
@@ -9393,21 +9598,61 @@
       "version": "4.5.0",
       "resolved": "http://219.151.181.73:9000/lodash.difference/-/lodash.difference-4.5.0.tgz",
       "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==",
-      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.escaperegexp": {
+      "version": "4.1.2",
+      "resolved": "http://219.151.181.73:9000/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
+      "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==",
       "license": "MIT"
     },
     "node_modules/lodash.flatten": {
       "version": "4.4.0",
       "resolved": "http://219.151.181.73:9000/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
       "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
-      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.groupby": {
+      "version": "4.6.0",
+      "resolved": "http://219.151.181.73:9000/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
+      "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==",
+      "license": "MIT"
+    },
+    "node_modules/lodash.isboolean": {
+      "version": "3.0.3",
+      "resolved": "http://219.151.181.73:9000/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+      "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
+      "license": "MIT"
+    },
+    "node_modules/lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": "http://219.151.181.73:9000/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+      "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+      "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
+      "license": "MIT"
+    },
+    "node_modules/lodash.isfunction": {
+      "version": "3.0.9",
+      "resolved": "http://219.151.181.73:9000/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+      "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
+      "license": "MIT"
+    },
+    "node_modules/lodash.isnil": {
+      "version": "4.0.0",
+      "resolved": "http://219.151.181.73:9000/lodash.isnil/-/lodash.isnil-4.0.0.tgz",
+      "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==",
       "license": "MIT"
     },
     "node_modules/lodash.isplainobject": {
       "version": "4.0.6",
       "resolved": "http://219.151.181.73:9000/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
       "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
-      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.isundefined": {
+      "version": "3.0.1",
+      "resolved": "http://219.151.181.73:9000/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz",
+      "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==",
       "license": "MIT"
     },
     "node_modules/lodash.kebabcase": {
@@ -9442,14 +9687,12 @@
       "version": "4.6.0",
       "resolved": "http://219.151.181.73:9000/lodash.union/-/lodash.union-4.6.0.tgz",
       "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==",
-      "dev": true,
       "license": "MIT"
     },
     "node_modules/lodash.uniq": {
       "version": "4.5.0",
       "resolved": "http://219.151.181.73:9000/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
       "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
-      "dev": true,
       "license": "MIT"
     },
     "node_modules/log-symbols": {
@@ -9527,6 +9770,15 @@
         "yallist": "^3.0.2"
       }
     },
+    "node_modules/luckyexcel": {
+      "version": "1.0.1",
+      "resolved": "http://219.151.181.73:9000/luckyexcel/-/luckyexcel-1.0.1.tgz",
+      "integrity": "sha512-hvbJmCXNp/vST/huA6sieDn32Ib8bd80L9aIu5ZGxniJvZle7VlpHZrl6weLGaEnX99+t7cPAoYGqrqbfZp/AQ==",
+      "license": "MIT",
+      "dependencies": {
+        "jszip": "^3.5.0"
+      }
+    },
     "node_modules/make-dir": {
       "version": "3.1.0",
       "resolved": "http://219.151.181.73:9000/make-dir/-/make-dir-3.1.0.tgz",
@@ -10312,7 +10564,6 @@
       "version": "3.0.0",
       "resolved": "http://219.151.181.73:9000/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "devOptional": true,
       "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
@@ -12143,7 +12394,6 @@
       "version": "1.1.3",
       "resolved": "http://219.151.181.73:9000/readdir-glob/-/readdir-glob-1.1.3.tgz",
       "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
-      "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
         "minimatch": "^5.1.0"
@@ -12153,7 +12403,6 @@
       "version": "2.0.1",
       "resolved": "http://219.151.181.73:9000/brace-expansion/-/brace-expansion-2.0.1.tgz",
       "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0"
@@ -12163,7 +12412,6 @@
       "version": "5.1.6",
       "resolved": "http://219.151.181.73:9000/minimatch/-/minimatch-5.1.6.tgz",
       "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
-      "dev": true,
       "license": "ISC",
       "dependencies": {
         "brace-expansion": "^2.0.1"
@@ -12962,6 +13210,18 @@
       "dev": true,
       "license": "ISC"
     },
+    "node_modules/saxes": {
+      "version": "5.0.1",
+      "resolved": "http://219.151.181.73:9000/saxes/-/saxes-5.0.1.tgz",
+      "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+      "license": "ISC",
+      "dependencies": {
+        "xmlchars": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/schema-utils": {
       "version": "1.0.0",
       "resolved": "http://219.151.181.73:9000/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -14247,7 +14507,6 @@
       "version": "2.2.0",
       "resolved": "http://219.151.181.73:9000/tar-stream/-/tar-stream-2.2.0.tgz",
       "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "bl": "^4.0.3",
@@ -14264,7 +14523,6 @@
       "version": "3.6.2",
       "resolved": "http://219.151.181.73:9000/readable-stream/-/readable-stream-3.6.2.tgz",
       "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "inherits": "^2.0.3",
@@ -14500,6 +14758,15 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/tmp": {
+      "version": "0.2.5",
+      "resolved": "http://219.151.181.73:9000/tmp/-/tmp-0.2.5.tgz",
+      "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=14.14"
+      }
+    },
     "node_modules/to-arraybuffer": {
       "version": "1.0.1",
       "resolved": "http://219.151.181.73:9000/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
@@ -14642,6 +14909,15 @@
         "node": ">=6"
       }
     },
+    "node_modules/traverse": {
+      "version": "0.3.9",
+      "resolved": "http://219.151.181.73:9000/traverse/-/traverse-0.3.9.tgz",
+      "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==",
+      "license": "MIT/X11",
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/tryer": {
       "version": "1.0.1",
       "resolved": "http://219.151.181.73:9000/tryer/-/tryer-1.0.1.tgz",
@@ -15047,6 +15323,30 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/unzipper": {
+      "version": "0.10.14",
+      "resolved": "http://219.151.181.73:9000/unzipper/-/unzipper-0.10.14.tgz",
+      "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==",
+      "license": "MIT",
+      "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": "http://219.151.181.73:9000/bluebird/-/bluebird-3.4.7.tgz",
+      "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==",
+      "license": "MIT"
+    },
     "node_modules/upath": {
       "version": "1.2.0",
       "resolved": "http://219.151.181.73:9000/upath/-/upath-1.2.0.tgz",
@@ -16190,6 +16490,12 @@
         "async-limiter": "~1.0.0"
       }
     },
+    "node_modules/xmlchars": {
+      "version": "2.2.0",
+      "resolved": "http://219.151.181.73:9000/xmlchars/-/xmlchars-2.2.0.tgz",
+      "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+      "license": "MIT"
+    },
     "node_modules/xtend": {
       "version": "4.0.2",
       "resolved": "http://219.151.181.73:9000/xtend/-/xtend-4.0.2.tgz",
@@ -16366,7 +16672,6 @@
       "version": "4.1.1",
       "resolved": "http://219.151.181.73:9000/zip-stream/-/zip-stream-4.1.1.tgz",
       "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "archiver-utils": "^3.0.4",
@@ -16381,7 +16686,6 @@
       "version": "3.0.4",
       "resolved": "http://219.151.181.73:9000/archiver-utils/-/archiver-utils-3.0.4.tgz",
       "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "glob": "^7.2.3",
@@ -16403,7 +16707,6 @@
       "version": "3.6.2",
       "resolved": "http://219.151.181.73:9000/readable-stream/-/readable-stream-3.6.2.tgz",
       "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "inherits": "^2.0.3",

+ 3 - 0
package.json

@@ -20,10 +20,13 @@
     "classlist-polyfill": "^1.2.0",
     "crypto-js": "^4.0.0",
     "element-ui": "^2.15.14",
+    "exceljs": "^4.4.0",
+    "file-saver": "^2.0.5",
     "js-base64": "^2.5.1",
     "js-cookie": "^2.2.0",
     "js-fast-way": "^0.5.6",
     "js-md5": "^0.7.3",
+    "luckyexcel": "^1.0.1",
     "mockjs": "^1.0.1-beta3",
     "node-gyp": "^5.0.6",
     "nprogress": "^0.2.0",

+ 10 - 0
public/index.html

@@ -23,6 +23,16 @@
   <link rel="icon" href="<%= BASE_URL %>favicon.png">
   <!-- 在 public/index.html 中添加 -->
 <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.10.377/pdf.min.js"></script>
+
+   <!-- Luckysheet 样式 -->
+    <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/css/pluginsCss.css' />
+    <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/plugins.css' />
+    <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/css/luckysheet.css' />
+    <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/assets/iconfont/iconfont.css' />
+    
+    <!-- Luckysheet JS -->
+    <script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/js/plugin.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/luckysheet.umd.js"></script>
   <title>工程数字档案管理后台</title>
   <style>
     html,

+ 16 - 0
src/api/exctab/exceltab.js

@@ -64,4 +64,20 @@ export const getExcelInfo = (params) => {
     method: 'get',
     params:params
   })
+}
+//获取在线表格json
+export const getExcelJson = (form) => {
+  return request({
+    url: '/api/blade-manager/exceltab/getExcelUrl',
+    method: 'post',
+    data:form
+  })
+}
+//保存在线表格json
+export const saveExcelJson = (form) => {
+  return request({
+    url: '/api/blade-manager/exceltab/saveExcel',
+    method: 'post',
+    data:form
+  })
 }

+ 313 - 0
src/components/lucky-sheet-editor/LuckySheet.vue

@@ -0,0 +1,313 @@
+<template>
+  <div class="lucky-sheet-container">
+    <!-- 操作按钮栏 -->
+    <!-- <el-card class="operate-bar" shadow="never">
+      <el-button type="primary" icon="el-icon-download" @click="exportExcel">导出Excel</el-button>
+      <el-button icon="el-icon-upload2" @click="importExcel">导入Excel</el-button>
+      <el-button icon="el-icon-document" @click="getData">获取数据</el-button>
+      <el-input
+        v-model="sheetName"
+        placeholder="请输入表格名称"
+        style="width: 200px; margin-left: 10px;"
+        @change="updateSheetName"
+      ></el-input>
+      <input
+        type="file"
+        ref="fileInput"
+        accept=".xlsx"
+        style="display: none"
+        @change="handleFileImport"
+      >
+    </el-card> -->
+    
+    <!-- Luckysheet 容器 -->
+    <div id="luckysheet" style="width: 99%; height: 100%; margin: 0px;"></div>
+  </div>
+</template>
+
+<script>
+import FileSaver from 'file-saver'
+import LuckyExcel from 'luckyexcel'
+
+const ExcelJS = require('exceljs')
+
+export default {
+  name: 'LuckySheet',
+  props: {
+    initialData: {
+      type: Array,
+      default: () => []
+    },
+    options: {
+      type: Object,
+      default: () => ({})
+    },
+    url: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      sheetName: '新建表格',
+      luckyOptions: {
+        container: 'luckysheet',
+        title: '新建表格',
+        lang: 'zh',
+        showinfobar: false,
+        showtoolbar: true,
+        showstatisticBar: true,
+        showconfigbar: true,
+        showsheetbar: true,
+        showsheetbarConfig: {
+          add: true,
+          menu: true,
+        },
+        allowEdit: true,
+        enableAddRow: true,
+        enableAddCol: true,
+        sheetFormulaBar: true,
+        pointEdit: true,
+        pointEditUpdate: true,
+        data: [],
+        // loadUrl:"http://"+ location.host +"/blade-manager/exceltab/getExcelUrl",
+      }
+    }
+  },
+  watch: {
+  initialData(newVal, oldVal) {
+    // 避免初始值为空时的无效触发
+    if (!newVal || newVal.length === 0) return;
+    
+    // 简单判断数据是否真的变化(根据实际数据结构调整)
+    if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
+
+      this.initLuckysheet();
+    }
+  }
+},
+  
+  mounted() {
+    this.$nextTick(() => {
+      this.initLuckysheet()
+    })
+  },
+  beforeDestroy() {
+    // 销毁Luckysheet实例
+    if (window.luckysheet) {
+      window.luckysheet.destroy()
+    }
+  },
+  methods: {
+    // 初始化Luckysheet
+    initLuckysheet() {
+       // 先销毁已有实例
+      if (window.luckysheet) {
+        window.luckysheet.destroy();
+      }
+      const options = { ...this.luckyOptions, ...this.options }
+      options.title = this.sheetName
+      
+      // 如果有初始数据,使用初始数据
+      if (this.initialData && this.initialData.length > 0) {
+        options.data = this.initialData
+      }
+      
+      // 创建Luckysheet实例
+      window.luckysheet.create(options)
+    },
+
+    
+    // 导出Excel
+    async exportExcel() {
+      try {
+        // 获取所有工作表数据
+        const luckysheet = window.luckysheet.getAllSheets()
+        
+        // 创建工作簿
+        const workbook = new ExcelJS.Workbook()
+        
+        // 遍历所有工作表
+        luckysheet.forEach((table) => {
+          if (table.data.length === 0) return
+          
+          // 添加工作表
+          const worksheet = workbook.addWorksheet(table.name)
+          
+          // 设置单元格样式和值
+          this.setStyleAndValue(table.data, worksheet)
+          
+          // 设置合并单元格
+          if (table.config && table.config.merge) {
+            this.setMerge(table.config.merge, worksheet)
+          }
+          
+          // 设置边框
+          if (table.config && table.config.borderInfo) {
+            this.setBorder(table.config.borderInfo, worksheet)
+          }
+        })
+        
+        // 写入buffer
+        const buffer = await workbook.xlsx.writeBuffer()
+        
+        // 保存文件
+        FileSaver.saveAs(
+          new Blob([buffer], { type: 'application/octet-stream' }),
+          `${this.sheetName}.xlsx`
+        )
+        
+        this.$message.success('导出成功')
+      } catch (error) {
+        console.error('导出失败:', error)
+        this.$message.error('导出失败')
+      }
+    },
+    
+    // 导入Excel
+    importExcel() {
+      this.$refs.fileInput.click()
+    },
+    
+    // 处理文件导入
+    handleFileImport(e) {
+      const file = e.target.files[0]
+      if (!file) return
+      
+      const that = this
+      LuckyExcel.transformExcelToLucky(file, function(exportJson, luckysheetfile) {
+        if (exportJson.sheets === null || exportJson.sheets.length === 0) {
+          that.$message.error('无法读取excel文件的内容')
+          return
+        }
+        
+        // 销毁现有实例
+        window.luckysheet.destroy()
+        
+        // 更新表格名称
+        that.sheetName = exportJson.info.name || '导入的表格'
+        
+        // 创建新实例
+        window.luckysheet.create({
+          container: 'luckysheet',
+          title: that.sheetName,
+          lang: 'zh',
+          data: exportJson.sheets,
+          showinfobar: false
+        })
+        
+        that.$message.success('导入成功')
+      }, function(error) {
+        console.error('导入错误:', error)
+        that.$message.error('导入失败,请检查文件格式')
+      })
+      
+      // 清空文件输入,允许再次选择相同文件
+      e.target.value = ''
+    },
+    
+    // 获取表格数据
+    getData() {
+      const data = window.luckysheet.getAllSheets()
+      console.log(data,'data');
+      
+      this.$emit('data-change', data)
+      // this.$message.success('已获取最新数据')
+      return data
+    },
+    
+    // 更新表格名称
+    updateSheetName() {
+      if (window.luckysheet) {
+        window.luckysheet.setWorkbookName(this.sheetName)
+      }
+    },
+    
+    // 设置单元格样式和值
+    setStyleAndValue(data, worksheet) {
+      // 简化实现,实际应用可能需要更复杂的逻辑
+      data.forEach((row, rowIndex) => {
+        row.forEach((cell, colIndex) => {
+          if (cell !== null) {
+            const worksheetCell = worksheet.getCell(rowIndex + 1, colIndex + 1)
+            worksheetCell.value = cell.v !== undefined ? cell.v : cell
+            
+            // 设置样式
+            if (cell.ct) {
+              if (cell.ct.fa) {
+                worksheetCell.numFmt = cell.ct.fa
+              }
+              
+              if (cell.ct.s) {
+                const style = cell.ct.s
+                if (style.fc) {
+                  worksheetCell.font = { color: { argb: style.fc.replace('#', '') } }
+                }
+                if (style.bg) {
+                  worksheetCell.fill = {
+                    type: 'pattern',
+                    pattern: 'solid',
+                    fgColor: { argb: style.bg.replace('#', '') }
+                  }
+                }
+              }
+            }
+          }
+        })
+      })
+    },
+    
+    // 设置合并单元格
+    setMerge(mergeData, worksheet) {
+      Object.values(mergeData).forEach((item) => {
+        worksheet.mergeCells(
+          item.r + 1,
+          item.c + 1,
+          item.r + item.rs,
+          item.c + item.cs
+        )
+      })
+    },
+    
+    // 设置边框
+    setBorder(borderInfo, worksheet) {
+      // 简化实现,实际应用可能需要更复杂的逻辑
+      if (!Array.isArray(borderInfo)) return
+      
+      borderInfo.forEach((elem) => {
+        if (elem.rangeType === 'range') {
+          const range = elem.range[0]
+          const row = range.row
+          const col = range.column
+          
+          for (let i = row[0] + 1; i < row[1] + 2; i++) {
+            for (let j = col[0] + 1; j < col[1] + 2; j++) {
+              const cell = worksheet.getCell(i, j)
+              cell.border = {
+                top: { style: 'thin' },
+                left: { style: 'thin' },
+                bottom: { style: 'thin' },
+                right: { style: 'thin' }
+              }
+            }
+          }
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+.lucky-sheet-container {
+  width: 100%;
+  height: 100%;
+  padding: 10px;
+  box-sizing: border-box;
+  /* border: 1px solid yellow; */
+}
+
+.operate-bar {
+  margin-bottom: 10px;
+}
+</style>

+ 81 - 49
src/views/exctab/excelmodel/excelmodel.vue

@@ -60,13 +60,6 @@
                   <!-- 编辑 -->
                   <i class="el-icon-edit marleft10" @click.stop="editExcel(data)" v-if="data.fileType != 1"></i>
 
-                  <!-- 调整排序 -->
-                  <!-- <i
-                  class="el-icon-sort"
-                  @click.stop="sortpai(data, node)"
-                  v-if="node.level == 3"
-                  title="调整排序"
-                ></i> -->
                   <el-link :underline="false">
                     <i class="el-icon-sort" @click.stop="sortpai(data, node)" v-if="node.level == 3" title="调整排序"></i>
                   </el-link>
@@ -110,7 +103,7 @@
               </el-upload>
             </template>
 
-            <div style="margin-left:50px;" class="flex">
+            <div style="margin-left:50px;position: relative;" class="flex">
               <div class="excelname mg-r-10" v-if="from.templateExtension">
                 <div>{{ from.templateExtension }}</div>
                 <i class="el-icon-success marleft10" style="color: rgb(0, 168, 112);"></i>
@@ -119,11 +112,18 @@
                 :on-change="uploadcoverfileExcel" ref="file3">
                 <el-button type="primary" size="mini">{{ from.templateExtension ? '重新上传导入模板' : '上传导入模板' }}</el-button>
               </el-upload> -->
-              <el-link v-if="from.templateExtension" class="marleft10 colorblue" @click="delectExcelMSModel">删除</el-link>
+             <div>
+               <el-link v-if="from.templateExtension" class="marleft10 colorblue" @click="delectExcelMSModel">删除</el-link>
               <el-link v-if="from.templateExtension" underline class="marleft10 colorblue"
                 style="text-decoration:underline;" @click="downloadExcelModel()">下载模板</el-link>
-            </div>
-            <el-button type="primary" size="mini" class="marleft10" @click="fullPage">全屏显示</el-button>
+               <el-button type="success" size="mini" @click="saveExcelInfo" :loading="saveExcelJsonLoad">保存数据</el-button>
+             </div>
+              </div>
+           
+            
+             <div style="position: absolute;right:30px;top:65px;">
+               <el-button type="primary" size="mini"  @click="fullPage">全屏显示</el-button>
+             </div>
           </div>
 
           <el-empty style="height:80%;" v-show="!from.checkd" description="该目录为根目录没有EXCEL文件"></el-empty>
@@ -132,8 +132,14 @@
               :src="excelSrc"
               style="width:100%;height:100%;"
             ></iframe> -->
-            <div v-if='excelshow' class='qualityManual-container-office' style="width:100%;height:100%;" id="fullscreen_content">
-              <vab-only-office :option='exceloption' />
+            <div v-if='excelshow' style="width:100%;height:100%;" id="fullscreen_content">
+              <!-- <vab-only-office :option='exceloption' /> -->
+               <lucky-sheet
+                ref="luckySheet"
+                @data-change="handleDataChange"
+                :initialData="initialData"
+                :url="from.fileUrl"
+              ></lucky-sheet>
             </div>
           </div>
         </div>
@@ -254,23 +260,16 @@ import ManualSorting from '@/components/WbsTree/ManualSorting'
 import VabOnlyOffice from '@/components/online-office/index'
 import { log } from '@antv/g2plot/lib/utils';
 import screenfull from "screenfull";
-
+import LuckySheet from '@/components/lucky-sheet-editor/LuckySheet.vue'
+import {getExcelJson,saveExcelJson} from '@/api/exctab/exceltab';
 export default {
   components: {
-    ManualSorting, VabOnlyOffice
+    ManualSorting, VabOnlyOffice,LuckySheet
   },
   data() {
     return {
       //参考vabOnlyOffice组件参数配置
-      exceloption: {
-        url: '',
-        isEdit: '',
-        fileType: '',
-        title: '',
-        lang: '',
-        isPrint: '',
-        user: { id: null, name: '' }
-      },
+
       excelshow: false,
 
       expandedKeys: [],//默认展开的节点
@@ -371,7 +370,9 @@ export default {
       uploadId:'',
       excelfileList: [],
       dataList: [],
-      fileobj: []
+      fileobj: [],
+      initialData: [],
+      saveExcelJsonLoad: false,
     }
   },
   computed: {
@@ -394,33 +395,13 @@ export default {
 
 s
     },
-    getBaseUrl () {
-      const host = window.location.hostname;
-      if (host === '192.168.0.109') {
-        return 'http://192.168.0.109:8090';
-      } else if (host === 'testmanger.hcxxy.com') {
-        return 'http://219.151.181.73:8090';
-      }else if(host === '183.247.216.148'){
-         return 'http://183.247.216.148:8090';
-      }
-      return 'http://192.168.0.109:8090'; // 默认值
-    },
+
     getFile() {
       this.excelshow = true
-      this.exceloption.isEdit = true
-      this.exceloption.lang = 'zh-CN'
-      this.exceloption.url = this.from.fileUrl
-      this.exceloption.title = this.from.extension
-      this.exceloption.fileType = 'xlsx'
-      this.exceloption.isPrint = false
-      this.exceloption.user = { id: this.userInfo.id, name: this.userInfo.user_name }
-      // this.exceloption.editUrl = "http://172.31.222.127:8090/blade-manager/exceltab/callbackSave";
-      // this.exceloption.editUrl = "http://47.110.251.215:8090/blade-manager/exceltab/callbackSave";
-     // this.exceloption.editUrl = "http://219.151.181.73:8090/blade-manager/exceltab/callbackSave";
-          // this.exceloption.editUrl =  "http://192.168.0.109:8090/blade-manager/exceltab/callbackSave";
-          this.exceloption.editUrl = `${this.getBaseUrl()}/blade-manager/exceltab/callbackSave`;
-      this.exceloption.key = this.from.id + "_" + Math.random() + "";
+
+      this.getInitialData()
     },
+
     //刷新左边树形数据
     refreshTree() {
       console.log(this.curTreeData, 'this.curTreeData111111111');
@@ -1123,6 +1104,57 @@ s
       this.exceldialogVisible=false
       this.dataList=[]
       this.excelfileList=[]
+    },
+      handleDataChange(data) {
+      // 处理数据变化
+      console.log('表格数据已更新:', data)
+      // 可以在这里将数据发送到后端保存
+    },
+    async getInitialData(){
+        const { data: res } = await getExcelJson(
+        {
+          url: this.from.fileUrl,
+         
+        })
+      if (res.code == 200) {
+    
+        this.initialData = JSON.parse(res.data)
+      
+        
+        
+      }else{
+        this.$message.error(res.msg)
+        this.initialData=[]
+      }
+    },
+    //保存表格数据
+  async  saveExcelInfo(){
+    this.saveExcelJsonLoad = true;
+    const saveData= await  this.$refs.luckySheet.getData()
+
+       const { data: res } = await saveExcelJson(
+        {
+          key: this.from.id,
+          jsonExcel: JSON.stringify(saveData)
+         
+        })
+            this.saveExcelJsonLoad = false;
+      if (res.code == 200) {
+     this.saveExcelJsonLoad = false;
+        this.$message({
+          message: '保存成功',
+          type: 'success'
+        })
+      
+        
+        
+      }else{
+         this.saveExcelJsonLoad = false;
+        this.$message.error(res.msg)
+        this.getInitialData()
+       
+      }
+
     }
   },
   created() {

+ 233 - 6
yarn.lock

@@ -890,6 +890,31 @@
   resolved "http://219.151.181.73:9000/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz"
   integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
 
+"@fast-csv/format@4.3.5":
+  version "4.3.5"
+  resolved "http://219.151.181.73:9000/@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"
+
+"@fast-csv/parse@4.3.6":
+  version "4.3.6"
+  resolved "http://219.151.181.73:9000/@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"
+
 "@hapi/address@2.x.x":
   version "2.1.4"
   resolved "http://219.151.181.73:9000/@hapi/address/-/address-2.1.4.tgz"
@@ -1042,6 +1067,11 @@
   dependencies:
     undici-types "~6.19.2"
 
+"@types/node@^14.0.1":
+  version "14.18.63"
+  resolved "http://219.151.181.73:9000/@types/node/-/node-14.18.63.tgz"
+  integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==
+
 "@types/normalize-package-data@^2.4.0":
   version "2.4.4"
   resolved "http://219.151.181.73:9000/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz"
@@ -1642,7 +1672,7 @@ archiver-utils@^3.0.4:
     normalize-path "^3.0.0"
     readable-stream "^3.6.0"
 
-archiver@^5.3.1:
+archiver@^5.0.0, archiver@^5.3.1:
   version "5.3.2"
   resolved "http://219.151.181.73:9000/archiver/-/archiver-5.3.2.tgz"
   integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==
@@ -2011,6 +2041,11 @@ bfj@^6.1.1:
     hoopy "^0.1.4"
     tryer "^1.0.1"
 
+big-integer@^1.6.17:
+  version "1.6.52"
+  resolved "http://219.151.181.73:9000/big-integer/-/big-integer-1.6.52.tgz"
+  integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
+
 big.js@^3.1.3:
   version "3.2.0"
   resolved "http://219.151.181.73:9000/big.js/-/big.js-3.2.0.tgz"
@@ -2031,6 +2066,14 @@ binary-extensions@^2.0.0:
   resolved "http://219.151.181.73:9000/binary-extensions/-/binary-extensions-2.3.0.tgz"
   integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
 
+binary@~0.3.0:
+  version "0.3.0"
+  resolved "http://219.151.181.73:9000/binary/-/binary-0.3.0.tgz"
+  integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==
+  dependencies:
+    buffers "~0.1.1"
+    chainsaw "~0.1.0"
+
 bl@^4.0.3:
   version "4.1.0"
   resolved "http://219.151.181.73:9000/bl/-/bl-4.1.0.tgz"
@@ -2045,6 +2088,11 @@ bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.5:
   resolved "http://219.151.181.73:9000/bluebird/-/bluebird-3.7.2.tgz"
   integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
 
+bluebird@~3.4.1:
+  version "3.4.7"
+  resolved "http://219.151.181.73:9000/bluebird/-/bluebird-3.4.7.tgz"
+  integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==
+
 bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
   version "4.12.0"
   resolved "http://219.151.181.73:9000/bn.js/-/bn.js-4.12.0.tgz"
@@ -2221,6 +2269,11 @@ buffer-from@^1.0.0:
   resolved "http://219.151.181.73:9000/buffer-from/-/buffer-from-1.1.2.tgz"
   integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
 
+buffer-indexof-polyfill@~1.0.0:
+  version "1.0.2"
+  resolved "http://219.151.181.73:9000/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz"
+  integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==
+
 buffer-indexof@^1.0.0:
   version "1.1.1"
   resolved "http://219.151.181.73:9000/buffer-indexof/-/buffer-indexof-1.1.1.tgz"
@@ -2248,6 +2301,11 @@ buffer@^5.5.0:
     base64-js "^1.3.1"
     ieee754 "^1.1.13"
 
+buffers@~0.1.1:
+  version "0.1.1"
+  resolved "http://219.151.181.73:9000/buffers/-/buffers-0.1.1.tgz"
+  integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==
+
 builtin-status-codes@^3.0.0:
   version "3.0.0"
   resolved "http://219.151.181.73:9000/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"
@@ -2428,6 +2486,13 @@ chai@^4.1.2:
     pathval "^1.1.1"
     type-detect "^4.1.0"
 
+chainsaw@~0.1.0:
+  version "0.1.0"
+  resolved "http://219.151.181.73:9000/chainsaw/-/chainsaw-0.1.0.tgz"
+  integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==
+  dependencies:
+    traverse ">=0.3.0 <0.4"
+
 chalk@^1.1.1:
   version "1.1.3"
   resolved "http://219.151.181.73:9000/chalk/-/chalk-1.1.3.tgz"
@@ -3242,6 +3307,11 @@ data-view-byte-offset@^1.0.0:
     es-errors "^1.3.0"
     is-data-view "^1.0.1"
 
+dayjs@^1.8.34:
+  version "1.11.18"
+  resolved "http://219.151.181.73:9000/dayjs/-/dayjs-1.11.18.tgz"
+  integrity sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==
+
 de-indent@^1.0.2:
   version "1.0.2"
   resolved "http://219.151.181.73:9000/de-indent/-/de-indent-1.0.2.tgz"
@@ -3579,6 +3649,13 @@ duplexer@^0.1.1, duplexer@^0.1.2:
   resolved "http://219.151.181.73:9000/duplexer/-/duplexer-0.1.2.tgz"
   integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
 
+duplexer2@~0.1.4:
+  version "0.1.4"
+  resolved "http://219.151.181.73:9000/duplexer2/-/duplexer2-0.1.4.tgz"
+  integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==
+  dependencies:
+    readable-stream "^2.0.2"
+
 duplexify@^3.4.2, duplexify@^3.6.0:
   version "3.7.1"
   resolved "http://219.151.181.73:9000/duplexify/-/duplexify-3.7.1.tgz"
@@ -3901,6 +3978,21 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
     md5.js "^1.3.4"
     safe-buffer "^5.1.1"
 
+exceljs@^4.4.0:
+  version "4.4.0"
+  resolved "http://219.151.181.73:9000/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"
+
 execa@^1.0.0:
   version "1.0.0"
   resolved "http://219.151.181.73:9000/execa/-/execa-1.0.0.tgz"
@@ -4032,6 +4124,14 @@ extsprintf@1.3.0:
   resolved "http://219.151.181.73:9000/extsprintf/-/extsprintf-1.3.0.tgz"
   integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
 
+fast-csv@^4.3.1:
+  version "4.3.6"
+  resolved "http://219.151.181.73:9000/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"
+
 fast-deep-equal@^3.1.1:
   version "3.1.3"
   resolved "http://219.151.181.73:9000/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
@@ -4084,6 +4184,11 @@ file-loader@^3.0.1:
     loader-utils "^1.0.2"
     schema-utils "^1.0.0"
 
+file-saver@^2.0.5:
+  version "2.0.5"
+  resolved "http://219.151.181.73:9000/file-saver/-/file-saver-2.0.5.tgz"
+  integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==
+
 filesize@^3.6.1:
   version "3.6.1"
   resolved "http://219.151.181.73:9000/filesize/-/filesize-3.6.1.tgz"
@@ -4303,6 +4408,16 @@ fs.realpath@^1.0.0:
   resolved "http://219.151.181.73:9000/fs.realpath/-/fs.realpath-1.0.0.tgz"
   integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
 
+fstream@^1.0.12:
+  version "1.0.12"
+  resolved "http://219.151.181.73:9000/fstream/-/fstream-1.0.12.tgz"
+  integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
+  dependencies:
+    graceful-fs "^4.1.2"
+    inherits "~2.0.0"
+    mkdirp ">=0.5 0"
+    rimraf "2"
+
 function-bind@^1.1.2:
   version "1.1.2"
   resolved "http://219.151.181.73:9000/function-bind/-/function-bind-1.1.2.tgz"
@@ -4867,6 +4982,11 @@ ignore@^4.0.3:
   resolved "http://219.151.181.73:9000/ignore/-/ignore-4.0.6.tgz"
   integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
 
+immediate@~3.0.5:
+  version "3.0.6"
+  resolved "http://219.151.181.73:9000/immediate/-/immediate-3.0.6.tgz"
+  integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
+
 immutable@^4.0.0:
   version "4.3.7"
   resolved "http://219.151.181.73:9000/immutable/-/immutable-4.3.7.tgz"
@@ -4925,7 +5045,7 @@ inflight@^1.0.4:
     once "^1.3.0"
     wrappy "1"
 
-inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4, inherits@2, inherits@2.0.4:
+inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4, inherits@2, inherits@2.0.4:
   version "2.0.4"
   resolved "http://219.151.181.73:9000/inherits/-/inherits-2.0.4.tgz"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -5488,6 +5608,16 @@ jsprim@^1.2.2:
     json-schema "0.4.0"
     verror "1.10.0"
 
+jszip@^3.10.1, jszip@^3.5.0:
+  version "3.10.1"
+  resolved "http://219.151.181.73:9000/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"
+
 killable@^1.0.1:
   version "1.0.1"
   resolved "http://219.151.181.73:9000/killable/-/killable-1.0.1.tgz"
@@ -5544,11 +5674,23 @@ lazystream@^1.0.0:
   dependencies:
     readable-stream "^2.0.5"
 
+lie@~3.3.0:
+  version "3.3.0"
+  resolved "http://219.151.181.73:9000/lie/-/lie-3.3.0.tgz"
+  integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
+  dependencies:
+    immediate "~3.0.5"
+
 lines-and-columns@^1.1.6:
   version "1.2.4"
   resolved "http://219.151.181.73:9000/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
   integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
 
+listenercount@~1.0.1:
+  version "1.0.1"
+  resolved "http://219.151.181.73:9000/listenercount/-/listenercount-1.0.1.tgz"
+  integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==
+
 loader-runner@^2.3.1, loader-runner@^2.4.0:
   version "2.4.0"
   resolved "http://219.151.181.73:9000/loader-runner/-/loader-runner-2.4.0.tgz"
@@ -5639,16 +5781,51 @@ lodash.difference@^4.5.0:
   resolved "http://219.151.181.73:9000/lodash.difference/-/lodash.difference-4.5.0.tgz"
   integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==
 
+lodash.escaperegexp@^4.1.2:
+  version "4.1.2"
+  resolved "http://219.151.181.73:9000/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz"
+  integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==
+
 lodash.flatten@^4.4.0:
   version "4.4.0"
   resolved "http://219.151.181.73:9000/lodash.flatten/-/lodash.flatten-4.4.0.tgz"
   integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==
 
+lodash.groupby@^4.6.0:
+  version "4.6.0"
+  resolved "http://219.151.181.73:9000/lodash.groupby/-/lodash.groupby-4.6.0.tgz"
+  integrity sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==
+
+lodash.isboolean@^3.0.3:
+  version "3.0.3"
+  resolved "http://219.151.181.73:9000/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz"
+  integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==
+
+lodash.isequal@^4.5.0:
+  version "4.5.0"
+  resolved "http://219.151.181.73:9000/lodash.isequal/-/lodash.isequal-4.5.0.tgz"
+  integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
+
+lodash.isfunction@^3.0.9:
+  version "3.0.9"
+  resolved "http://219.151.181.73:9000/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz"
+  integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==
+
+lodash.isnil@^4.0.0:
+  version "4.0.0"
+  resolved "http://219.151.181.73:9000/lodash.isnil/-/lodash.isnil-4.0.0.tgz"
+  integrity sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==
+
 lodash.isplainobject@^4.0.6:
   version "4.0.6"
   resolved "http://219.151.181.73:9000/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz"
   integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
 
+lodash.isundefined@^3.0.1:
+  version "3.0.1"
+  resolved "http://219.151.181.73:9000/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz"
+  integrity sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==
+
 lodash.kebabcase@^4.1.1:
   version "4.1.1"
   resolved "http://219.151.181.73:9000/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz"
@@ -5743,6 +5920,13 @@ lru-cache@^5.1.1:
   dependencies:
     yallist "^3.0.2"
 
+luckyexcel@^1.0.1:
+  version "1.0.1"
+  resolved "http://219.151.181.73:9000/luckyexcel/-/luckyexcel-1.0.1.tgz"
+  integrity sha512-hvbJmCXNp/vST/huA6sieDn32Ib8bd80L9aIu5ZGxniJvZle7VlpHZrl6weLGaEnX99+t7cPAoYGqrqbfZp/AQ==
+  dependencies:
+    jszip "^3.5.0"
+
 make-dir@^1.0.0:
   version "1.3.0"
   resolved "http://219.151.181.73:9000/make-dir/-/make-dir-1.3.0.tgz"
@@ -6002,7 +6186,7 @@ mixin-deep@^1.2.0:
     for-in "^1.0.2"
     is-extendable "^1.0.1"
 
-mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@^0.5.6, mkdirp@~0.5.1:
+mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@^0.5.6, "mkdirp@>=0.5 0", mkdirp@~0.5.1:
   version "0.5.6"
   resolved "http://219.151.181.73:9000/mkdirp/-/mkdirp-0.5.6.tgz"
   integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
@@ -6548,7 +6732,7 @@ p-try@^2.0.0:
   resolved "http://219.151.181.73:9000/p-try/-/p-try-2.2.0.tgz"
   integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
 
-pako@~1.0.5:
+pako@~1.0.2, pako@~1.0.5:
   version "1.0.11"
   resolved "http://219.151.181.73:9000/pako/-/pako-1.0.11.tgz"
   integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
@@ -7678,7 +7862,7 @@ right-align@^0.1.1:
   dependencies:
     align-text "^0.1.1"
 
-rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3:
+rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@2:
   version "2.7.1"
   resolved "http://219.151.181.73:9000/rimraf/-/rimraf-2.7.1.tgz"
   integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@@ -7785,6 +7969,13 @@ sax@~1.2.4:
   resolved "http://219.151.181.73:9000/sax/-/sax-1.2.4.tgz"
   integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
 
+saxes@^5.0.1:
+  version "5.0.1"
+  resolved "http://219.151.181.73:9000/saxes/-/saxes-5.0.1.tgz"
+  integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+  dependencies:
+    xmlchars "^2.2.0"
+
 schema-utils@^1.0.0:
   version "1.0.0"
   resolved "http://219.151.181.73:9000/schema-utils/-/schema-utils-1.0.0.tgz"
@@ -7962,7 +8153,7 @@ set-value@^2.0.0, set-value@^2.0.1:
     is-plain-object "^2.0.3"
     split-string "^3.0.1"
 
-setimmediate@^1.0.4:
+setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4:
   version "1.0.5"
   resolved "http://219.151.181.73:9000/setimmediate/-/setimmediate-1.0.5.tgz"
   integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
@@ -8683,6 +8874,11 @@ timsort@^0.3.0:
   resolved "http://219.151.181.73:9000/timsort/-/timsort-0.3.0.tgz"
   integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==
 
+tmp@^0.2.0:
+  version "0.2.5"
+  resolved "http://219.151.181.73:9000/tmp/-/tmp-0.2.5.tgz"
+  integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==
+
 to-arraybuffer@^1.0.0:
   version "1.0.1"
   resolved "http://219.151.181.73:9000/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"
@@ -8748,6 +8944,11 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0:
     psl "^1.1.28"
     punycode "^2.1.1"
 
+"traverse@>=0.3.0 <0.4":
+  version "0.3.9"
+  resolved "http://219.151.181.73:9000/traverse/-/traverse-0.3.9.tgz"
+  integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==
+
 tryer@^1.0.1:
   version "1.0.1"
   resolved "http://219.151.181.73:9000/tryer/-/tryer-1.0.1.tgz"
@@ -8965,6 +9166,22 @@ unset-value@^1.0.0:
     has-value "^0.3.1"
     isobject "^3.0.0"
 
+unzipper@^0.10.11:
+  version "0.10.14"
+  resolved "http://219.151.181.73:9000/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"
+
 upath@^1.1.1:
   version "1.2.0"
   resolved "http://219.151.181.73:9000/upath/-/upath-1.2.0.tgz"
@@ -9077,6 +9294,11 @@ uuid@^3.3.2:
   resolved "http://219.151.181.73:9000/uuid/-/uuid-3.4.0.tgz"
   integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
 
+uuid@^8.3.0:
+  version "8.3.2"
+  resolved "http://219.151.181.73:9000/uuid/-/uuid-8.3.2.tgz"
+  integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
 uuid@^8.3.2:
   version "8.3.2"
   resolved "http://219.151.181.73:9000/uuid/-/uuid-8.3.2.tgz"
@@ -9499,6 +9721,11 @@ ws@^7.3.1:
   resolved "http://219.151.181.73:9000/ws/-/ws-7.5.10.tgz"
   integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
 
+xmlchars@^2.2.0:
+  version "2.2.0"
+  resolved "http://219.151.181.73:9000/xmlchars/-/xmlchars-2.2.0.tgz"
+  integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
 xtend@^4.0.0, xtend@~4.0.1:
   version "4.0.2"
   resolved "http://219.151.181.73:9000/xtend/-/xtend-4.0.2.tgz"