diff --git a/package-lock.json b/package-lock.json
index b4a13533..39fcd597 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,6 +7,7 @@
"": {
"name": "EICS",
"version": "1.3.2",
+ "hasInstallScript": true,
"dependencies": {
"@aws-sdk/client-s3": "3.726.1",
"@cornerstonejs/adapters": "^4.19.2",
@@ -33,6 +34,7 @@
"dicom-parser": "^1.8.9",
"dicomedit": "^0.1.0",
"echarts": "^6.0.0",
+ "echarts-map": "^3.0.1",
"element-ui": "^2.15.14",
"exceljs": "^4.4.0",
"file-saver": "^2.0.5",
@@ -88,6 +90,7 @@
"html-webpack-plugin": "^5.6.3",
"mini-css-extract-plugin": "^2.9.2",
"node-polyfill-webpack-plugin": "^4.0.0",
+ "patch-package": "^8.0.0",
"path-browserify": "^1.0.1",
"process": "^0.11.10",
"sass": "^1.63.2",
@@ -2747,9 +2750,9 @@
"license": "MIT"
},
"node_modules/@cornerstonejs/adapters": {
- "version": "4.21.7",
- "resolved": "https://registry.npmmirror.com/@cornerstonejs/adapters/-/adapters-4.21.7.tgz",
- "integrity": "sha512-a9lGNlcLuuk81c8H2F4rotrMxTf9EGursSVIdz7n0cQ8nJmebSZTmp5FWGLDadRxh9pIxMeC52JTcDVd3JR9MQ==",
+ "version": "4.19.2",
+ "resolved": "https://registry.npmmirror.com/@cornerstonejs/adapters/-/adapters-4.19.2.tgz",
+ "integrity": "sha512-alzqHxQvz+nxTV4FPuyvcI/+IvZ0P/PFkMTJ2N9Jc/toJ+xPfuRL2daT9ddgMp9sR5qlMh/wD3A+xw+OyN7HPw==",
"license": "MIT",
"dependencies": {
"@babel/runtime-corejs2": "7.26.10",
@@ -2759,8 +2762,8 @@
"ndarray": "1.0.19"
},
"peerDependencies": {
- "@cornerstonejs/core": "4.21.7",
- "@cornerstonejs/tools": "4.21.7"
+ "@cornerstonejs/core": "4.19.2",
+ "@cornerstonejs/tools": "4.19.2"
}
},
"node_modules/@cornerstonejs/adapters/node_modules/dcmjs": {
@@ -2824,9 +2827,9 @@
}
},
"node_modules/@cornerstonejs/core": {
- "version": "4.21.7",
- "resolved": "https://registry.npmmirror.com/@cornerstonejs/core/-/core-4.21.7.tgz",
- "integrity": "sha512-wZkALM/P6TTODtbSeOOZvzWKXjyMRKtsyWJ6NL61BveIlNxATpBbrAIj0dqLVasdF45XcJO5Qn4TiSO/kgKRGA==",
+ "version": "4.19.2",
+ "resolved": "https://registry.npmmirror.com/@cornerstonejs/core/-/core-4.19.2.tgz",
+ "integrity": "sha512-T/nezzLhlQyS82FHsd129n7nKml2uCQjqOIls8P+S1bd/IUQSTnOZ9rnLFkfSVAvnuVyPiCz2f5t5wp/UZuZMQ==",
"license": "MIT",
"dependencies": {
"@kitware/vtk.js": "34.15.1",
@@ -2840,9 +2843,9 @@
}
},
"node_modules/@cornerstonejs/dicom-image-loader": {
- "version": "4.21.7",
- "resolved": "https://registry.npmmirror.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-4.21.7.tgz",
- "integrity": "sha512-wtfKs/U+FM2M7HHiNTFJwujs8TEU2rBz03Fx4Bc//vpktasUN9bqLl/eQ/9zfmz8Cdi12BewVpORd7l4nUmhtQ==",
+ "version": "4.19.2",
+ "resolved": "https://registry.npmmirror.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-4.19.2.tgz",
+ "integrity": "sha512-zHUQtw77saGanh2QpiJID9hY4ueO/kjNHXNTFl6P2DA00V9bWCK8nS6giDTkLEpWz7WrhHQsxTGNnQUqU+wUYQ==",
"license": "MIT",
"dependencies": {
"@cornerstonejs/codec-charls": "1.2.3",
@@ -2856,28 +2859,28 @@
"uuid": "9.0.1"
},
"peerDependencies": {
- "@cornerstonejs/core": "4.21.7",
+ "@cornerstonejs/core": "4.19.2",
"dicom-parser": "1.8.21"
}
},
"node_modules/@cornerstonejs/polymorphic-segmentation": {
- "version": "4.21.7",
- "resolved": "https://registry.npmmirror.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-4.21.7.tgz",
- "integrity": "sha512-4qxVMY0LJ+ffJfbzvzFOwe6j1p93pawwMEVcWRZkipE0pgtlW1SWlBvePCNb25yps6GUxNFPEmdUn5x/Lw77VQ==",
+ "version": "4.19.2",
+ "resolved": "https://registry.npmmirror.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-4.19.2.tgz",
+ "integrity": "sha512-A3V6ZOJbrwmoPr/DlMTOpQhSqAlWgng/LyIHYt0FXFuGCvW8NI2bhNqQ4t4vq8UoEoE7qgdCZUCC8KYkODUilQ==",
"license": "MIT",
"dependencies": {
"@icr/polyseg-wasm": "0.4.0"
},
"peerDependencies": {
- "@cornerstonejs/core": "4.21.7",
- "@cornerstonejs/tools": "4.21.7",
+ "@cornerstonejs/core": "4.19.2",
+ "@cornerstonejs/tools": "4.19.2",
"@kitware/vtk.js": "34.15.1"
}
},
"node_modules/@cornerstonejs/tools": {
- "version": "4.21.7",
- "resolved": "https://registry.npmmirror.com/@cornerstonejs/tools/-/tools-4.21.7.tgz",
- "integrity": "sha512-p8bWrEKdjeNzzZfN5NI6Wh7tiZyI3/lXqrdLlY+BCD1YRUdv+rybhyrg0JhpodJYEGrS4/wrkhCApOp9j9Evdg==",
+ "version": "4.19.2",
+ "resolved": "https://registry.npmmirror.com/@cornerstonejs/tools/-/tools-4.19.2.tgz",
+ "integrity": "sha512-8eas92LIhc4Pa0t5RK72JLNZPgePGj+k2Vk3803D97jUrid/pob8q3E7ILBivqLUqPWbVj5fErR/jsZJ08eYtg==",
"license": "MIT",
"dependencies": {
"@types/offscreencanvas": "2019.7.3",
@@ -2889,7 +2892,7 @@
"url": "https://ohif.org/donate"
},
"peerDependencies": {
- "@cornerstonejs/core": "4.21.7",
+ "@cornerstonejs/core": "4.19.2",
"@kitware/vtk.js": "34.15.1",
"@types/d3-array": "3.2.1",
"@types/d3-interpolate": "3.0.4",
@@ -5919,6 +5922,13 @@
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"license": "Apache-2.0"
},
+ "node_modules/@yarnpkg/lockfile": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
+ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
"node_modules/@zxing/text-encoding": {
"version": "0.9.0",
"resolved": "https://registry.npmmirror.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz",
@@ -10503,6 +10513,23 @@
"zrender": "6.0.0"
}
},
+ "node_modules/echarts-map": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/echarts-map/-/echarts-map-3.0.1.tgz",
+ "integrity": "sha512-ZsfP4U75v9p2sdSCP4Fqhh8O43EglFwjeV/FbaIfeDn6G1MEvbp3CF0XRNAVhwoTfBK0zILuGcpcwcWq6z8CYw==",
+ "dependencies": {
+ "echarts": "~3.0.1"
+ }
+ },
+ "node_modules/echarts-map/node_modules/echarts": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/echarts/-/echarts-3.0.1.tgz",
+ "integrity": "sha512-8Hvaa+hOUAYaFAgQjRISWN/2LKZ4g66nE33dHNjG8wT3S/SU7m2ENJ2+96mEkLQN5m9VvQKhmjCMqiky3J/png==",
+ "deprecated": "deprecated",
+ "dependencies": {
+ "zrenderjs": "~3.0.2"
+ }
+ },
"node_modules/echarts/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
@@ -11942,6 +11969,16 @@
"node": ">=8"
}
},
+ "node_modules/find-yarn-workspace-root": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
+ "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "micromatch": "^4.0.2"
+ }
+ },
"node_modules/flat": {
"version": "5.0.2",
"resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz",
@@ -14214,12 +14251,39 @@
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"license": "MIT"
},
+ "node_modules/json-stable-stringify": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz",
+ "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "isarray": "^2.0.5",
+ "jsonify": "^0.0.1",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"license": "MIT"
},
+ "node_modules/json-stable-stringify/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/json-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/json-stream/-/json-stream-1.0.0.tgz",
@@ -14251,6 +14315,16 @@
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/jsonify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmmirror.com/jsonify/-/jsonify-0.0.1.tgz",
+ "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
+ "dev": true,
+ "license": "Public Domain",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/jstoxml": {
"version": "2.2.9",
"resolved": "https://registry.npmmirror.com/jstoxml/-/jstoxml-2.2.9.tgz",
@@ -14323,6 +14397,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/klaw-sync": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/klaw-sync/-/klaw-sync-6.0.0.tgz",
+ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.11"
+ }
+ },
"node_modules/klona": {
"version": "2.0.6",
"resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
@@ -16733,6 +16817,140 @@
"node": ">=0.10.0"
}
},
+ "node_modules/patch-package": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmmirror.com/patch-package/-/patch-package-8.0.1.tgz",
+ "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@yarnpkg/lockfile": "^1.1.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^3.7.0",
+ "cross-spawn": "^7.0.3",
+ "find-yarn-workspace-root": "^2.0.0",
+ "fs-extra": "^10.0.0",
+ "json-stable-stringify": "^1.0.2",
+ "klaw-sync": "^6.0.0",
+ "minimist": "^1.2.6",
+ "open": "^7.4.2",
+ "semver": "^7.5.3",
+ "slash": "^2.0.0",
+ "tmp": "^0.2.4",
+ "yaml": "^2.2.2"
+ },
+ "bin": {
+ "patch-package": "index.js"
+ },
+ "engines": {
+ "node": ">=14",
+ "npm": ">5"
+ }
+ },
+ "node_modules/patch-package/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/patch-package/node_modules/ci-info": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/patch-package/node_modules/fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/patch-package/node_modules/open": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmmirror.com/open/-/open-7.4.2.tgz",
+ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-docker": "^2.0.0",
+ "is-wsl": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/patch-package/node_modules/semver": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmmirror.com/semver/-/semver-7.8.0.tgz",
+ "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/patch-package/node_modules/slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/patch-package/node_modules/yaml": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.9.0.tgz",
+ "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
+ }
+ },
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz",
@@ -23587,6 +23805,12 @@
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
"license": "0BSD"
+ },
+ "node_modules/zrenderjs": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/zrenderjs/-/zrenderjs-3.0.3.tgz",
+ "integrity": "sha512-+WsvUsqButmQXmdFENN4AJFbiNMf+9j0xKupRQoAxuxiFHU4y142X/i3O/Q6GGJ4YwXh8YbBNsWxkbCAxB3C/A==",
+ "license": "BSD"
}
}
}
diff --git a/package.json b/package.json
index d81a9625..a7979f93 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
"build:usa": "vue-cli-service build --mode usa",
"build:usa_prod": "vue-cli-service build --mode usa_prod",
"pre": "vue-cli-service build --mode pre",
+ "postinstall": "patch-package",
"i18n": "npm run i18n:zh && npm run i18n:en",
"i18n:zh": "node i18nGenerate.js lang=zh keyCol=5 valCol=6",
"i18n:en": "node i18nGenerate.js lang=en keyCol=5 valCol=7"
@@ -40,6 +41,7 @@
"dicom-parser": "^1.8.9",
"dicomedit": "^0.1.0",
"echarts": "^6.0.0",
+ "echarts-map": "^3.0.1",
"element-ui": "^2.15.14",
"exceljs": "^4.4.0",
"file-saver": "^2.0.5",
@@ -95,6 +97,7 @@
"html-webpack-plugin": "^5.6.3",
"mini-css-extract-plugin": "^2.9.2",
"node-polyfill-webpack-plugin": "^4.0.0",
+ "patch-package": "^8.0.0",
"path-browserify": "^1.0.1",
"process": "^0.11.10",
"sass": "^1.63.2",
diff --git a/patches/@cornerstonejs+dicom-image-loader+4.19.2.patch b/patches/@cornerstonejs+dicom-image-loader+4.19.2.patch
new file mode 100644
index 00000000..378a6941
--- /dev/null
+++ b/patches/@cornerstonejs+dicom-image-loader+4.19.2.patch
@@ -0,0 +1,16 @@
+diff --git a/node_modules/@cornerstonejs/dicom-image-loader/dist/esm/imageLoader/isColorConversionRequired.js b/node_modules/@cornerstonejs/dicom-image-loader/dist/esm/imageLoader/isColorConversionRequired.js
+index 33469a3..f39736f 100644
+--- a/node_modules/@cornerstonejs/dicom-image-loader/dist/esm/imageLoader/isColorConversionRequired.js
++++ b/node_modules/@cornerstonejs/dicom-image-loader/dist/esm/imageLoader/isColorConversionRequired.js
+@@ -14,10 +14,7 @@ export default function isColorConversionRequired(imageFrame) {
+ (3 * Math.ceil(columns / 2) + Math.floor(columns / 2)) * rows);
+ }
+ else if (photometricInterpretation.endsWith('422')) {
+- return (pixelDataLength ===
+- (3 * Math.ceil(columns / 2) + Math.floor(columns / 2)) *
+- Math.ceil(rows / 2) +
+- Math.floor(rows / 2) * columns);
++ return pixelDataLength === rows * columns * 2;
+ }
+ else {
+ return photometricInterpretation !== 'RGB' || planarConfiguration === 1;
diff --git a/public/config.js b/public/config.js
new file mode 100644
index 00000000..9d53b675
--- /dev/null
+++ b/public/config.js
@@ -0,0 +1,3 @@
+window.config = {
+ timeZone: false
+}
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
index d57e9f57..a5bfaade 100644
--- a/public/index.html
+++ b/public/index.html
@@ -67,6 +67,7 @@
num = e.data
}
+