소스 검색

✨ feat(supply-chain): 添加SVG图标转换脚本和供应链仪表板图标组件

- 添加svg-to-jsx依赖包用于SVG到JSX转换
- 创建SVG转换脚本,支持批量转换SVG文件为React组件
- 新增供应链仪表板相关图标组件:BasePointIcon、Img5、SupplyChainIcons、Union
- 更新粮油仪表板组件,添加注释说明
- 自动生成PNPM锁文件更新依赖关系
yourname 2 달 전
부모
커밋
08dd19b71a

+ 1 - 0
package.json

@@ -107,6 +107,7 @@
     "reflect-metadata": "^0.2.2",
     "reflect-metadata": "^0.2.2",
     "sirv": "^3.0.1",
     "sirv": "^3.0.1",
     "sonner": "^2.0.7",
     "sonner": "^2.0.7",
+    "svg-to-jsx": "^1.0.4",
     "tailwind-merge": "^3.3.1",
     "tailwind-merge": "^3.3.1",
     "tw-animate-css": "^1.3.6",
     "tw-animate-css": "^1.3.6",
     "typeorm": "^0.3.25",
     "typeorm": "^0.3.25",

+ 161 - 0
pnpm-lock.yaml

@@ -221,6 +221,9 @@ importers:
       sonner:
       sonner:
         specifier: ^2.0.7
         specifier: ^2.0.7
         version: 2.0.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
         version: 2.0.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+      svg-to-jsx:
+        specifier: ^1.0.4
+        version: 1.0.4
       tailwind-merge:
       tailwind-merge:
         specifier: ^3.3.1
         specifier: ^3.3.1
         version: 3.3.1
         version: 3.3.1
@@ -1853,6 +1856,10 @@ packages:
   ajv@6.12.6:
   ajv@6.12.6:
     resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
     resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
 
 
+  ansi-regex@2.1.1:
+    resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
+    engines: {node: '>=0.10.0'}
+
   ansi-regex@5.0.1:
   ansi-regex@5.0.1:
     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
     engines: {node: '>=8'}
     engines: {node: '>=8'}
@@ -2011,6 +2018,10 @@ packages:
     resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
     resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
     engines: {node: '>=6'}
     engines: {node: '>=6'}
 
 
+  camelcase@2.1.1:
+    resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==}
+    engines: {node: '>=0.10.0'}
+
   chai@5.3.3:
   chai@5.3.3:
     resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
     resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
     engines: {node: '>=18'}
     engines: {node: '>=18'}
@@ -2033,6 +2044,9 @@ packages:
   classnames@2.5.1:
   classnames@2.5.1:
     resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
     resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
 
 
+  cliui@3.2.0:
+    resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
+
   cliui@8.0.1:
   cliui@8.0.1:
     resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
     resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
     engines: {node: '>=12'}
     engines: {node: '>=12'}
@@ -2051,6 +2065,10 @@ packages:
       react: ^18 || ^19 || ^19.0.0-rc
       react: ^18 || ^19 || ^19.0.0-rc
       react-dom: ^18 || ^19 || ^19.0.0-rc
       react-dom: ^18 || ^19 || ^19.0.0-rc
 
 
+  code-point-at@1.1.0:
+    resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==}
+    engines: {node: '>=0.10.0'}
+
   color-convert@2.0.1:
   color-convert@2.0.1:
     resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
     resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
     engines: {node: '>=7.0.0'}
     engines: {node: '>=7.0.0'}
@@ -2177,6 +2195,10 @@ packages:
       supports-color:
       supports-color:
         optional: true
         optional: true
 
 
+  decamelize@1.2.0:
+    resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+    engines: {node: '>=0.10.0'}
+
   decimal.js-light@2.5.1:
   decimal.js-light@2.5.1:
     resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==}
     resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==}
 
 
@@ -2663,6 +2685,10 @@ packages:
     resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
     resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
     engines: {node: '>=12'}
     engines: {node: '>=12'}
 
 
+  invert-kv@1.0.0:
+    resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==}
+    engines: {node: '>=0.10.0'}
+
   ioredis@5.6.1:
   ioredis@5.6.1:
     resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==}
     resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==}
     engines: {node: '>=12.22.0'}
     engines: {node: '>=12.22.0'}
@@ -2715,6 +2741,10 @@ packages:
     resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
     resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
     engines: {node: '>= 0.4'}
     engines: {node: '>= 0.4'}
 
 
+  is-fullwidth-code-point@1.0.0:
+    resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==}
+    engines: {node: '>=0.10.0'}
+
   is-fullwidth-code-point@3.0.0:
   is-fullwidth-code-point@3.0.0:
     resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
     resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
     engines: {node: '>=8'}
     engines: {node: '>=8'}
@@ -2858,6 +2888,10 @@ packages:
   keyv@4.5.4:
   keyv@4.5.4:
     resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
     resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
 
 
+  lcid@1.0.0:
+    resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==}
+    engines: {node: '>=0.10.0'}
+
   levn@0.4.1:
   levn@0.4.1:
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
     engines: {node: '>= 0.8.0'}
     engines: {node: '>= 0.8.0'}
@@ -3124,6 +3158,10 @@ packages:
     resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
     resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
     engines: {node: '>=8'}
     engines: {node: '>=8'}
 
 
+  number-is-nan@1.0.1:
+    resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==}
+    engines: {node: '>=0.10.0'}
+
   object-assign@4.1.1:
   object-assign@4.1.1:
     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
     engines: {node: '>=0.10.0'}
     engines: {node: '>=0.10.0'}
@@ -3167,6 +3205,10 @@ packages:
     resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
     resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
     engines: {node: '>= 0.8.0'}
     engines: {node: '>= 0.8.0'}
 
 
+  os-locale@1.4.0:
+    resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==}
+    engines: {node: '>=0.10.0'}
+
   own-keys@1.0.1:
   own-keys@1.0.1:
     resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
     resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
     engines: {node: '>= 0.4'}
     engines: {node: '>= 0.4'}
@@ -3308,6 +3350,14 @@ packages:
     resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
     resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
     engines: {node: '>=6'}
     engines: {node: '>=6'}
 
 
+  q@1.5.1:
+    resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
+    engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
+    deprecated: |-
+      You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.
+
+      (For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
+
   query-string@7.1.3:
   query-string@7.1.3:
     resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==}
     resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==}
     engines: {node: '>=6'}
     engines: {node: '>=6'}
@@ -3635,6 +3685,10 @@ packages:
     resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
     resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
     engines: {node: '>=4'}
     engines: {node: '>=4'}
 
 
+  string-width@1.0.2:
+    resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==}
+    engines: {node: '>=0.10.0'}
+
   string-width@4.2.3:
   string-width@4.2.3:
     resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
     resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
     engines: {node: '>=8'}
     engines: {node: '>=8'}
@@ -3665,6 +3719,10 @@ packages:
   string_decoder@1.3.0:
   string_decoder@1.3.0:
     resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
     resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
 
 
+  strip-ansi@3.0.1:
+    resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
+    engines: {node: '>=0.10.0'}
+
   strip-ansi@6.0.1:
   strip-ansi@6.0.1:
     resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
     resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
     engines: {node: '>=8'}
     engines: {node: '>=8'}
@@ -3699,6 +3757,10 @@ packages:
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     engines: {node: '>= 0.4'}
     engines: {node: '>= 0.4'}
 
 
+  svg-to-jsx@1.0.4:
+    resolution: {integrity: sha512-yV5QdtKbJqd/hFU3Scg/FGABPszKuwO2sH06rdpq6wL228nvJGeXD1+uNMR4N0LBcThqSLooCzUuJOPe2QoJJQ==}
+    hasBin: true
+
   tailwind-merge@3.3.1:
   tailwind-merge@3.3.1:
     resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
     resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
 
 
@@ -4035,10 +4097,19 @@ packages:
     engines: {node: '>=8'}
     engines: {node: '>=8'}
     hasBin: true
     hasBin: true
 
 
+  window-size@0.1.4:
+    resolution: {integrity: sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==}
+    engines: {node: '>= 0.10.0'}
+    hasBin: true
+
   word-wrap@1.2.5:
   word-wrap@1.2.5:
     resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
     resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
     engines: {node: '>=0.10.0'}
     engines: {node: '>=0.10.0'}
 
 
+  wrap-ansi@2.1.0:
+    resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==}
+    engines: {node: '>=0.10.0'}
+
   wrap-ansi@7.0.0:
   wrap-ansi@7.0.0:
     resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
     resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
     engines: {node: '>=10'}
     engines: {node: '>=10'}
@@ -4047,6 +4118,10 @@ packages:
     resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
     resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
     engines: {node: '>=12'}
     engines: {node: '>=12'}
 
 
+  xml2js@0.4.23:
+    resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==}
+    engines: {node: '>=4.0.0'}
+
   xml2js@0.6.2:
   xml2js@0.6.2:
     resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==}
     resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==}
     engines: {node: '>=4.0.0'}
     engines: {node: '>=4.0.0'}
@@ -4055,10 +4130,17 @@ packages:
     resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
     resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
     engines: {node: '>=4.0'}
     engines: {node: '>=4.0'}
 
 
+  xmlbuilder@13.0.2:
+    resolution: {integrity: sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==}
+    engines: {node: '>=6.0'}
+
   xtend@4.0.2:
   xtend@4.0.2:
     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
     engines: {node: '>=0.4'}
     engines: {node: '>=0.4'}
 
 
+  y18n@3.2.2:
+    resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==}
+
   y18n@5.0.8:
   y18n@5.0.8:
     resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
     resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
     engines: {node: '>=10'}
     engines: {node: '>=10'}
@@ -4080,6 +4162,9 @@ packages:
     resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
     resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
     engines: {node: '>=12'}
     engines: {node: '>=12'}
 
 
+  yargs@3.32.0:
+    resolution: {integrity: sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg==}
+
   yocto-queue@0.1.0:
   yocto-queue@0.1.0:
     resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
     resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
     engines: {node: '>=10'}
     engines: {node: '>=10'}
@@ -5525,6 +5610,8 @@ snapshots:
       json-schema-traverse: 0.4.1
       json-schema-traverse: 0.4.1
       uri-js: 4.4.1
       uri-js: 4.4.1
 
 
+  ansi-regex@2.1.1: {}
+
   ansi-regex@5.0.1: {}
   ansi-regex@5.0.1: {}
 
 
   ansi-regex@6.1.0: {}
   ansi-regex@6.1.0: {}
@@ -5699,6 +5786,8 @@ snapshots:
 
 
   callsites@3.1.0: {}
   callsites@3.1.0: {}
 
 
+  camelcase@2.1.1: {}
+
   chai@5.3.3:
   chai@5.3.3:
     dependencies:
     dependencies:
       assertion-error: 2.0.1
       assertion-error: 2.0.1
@@ -5722,6 +5811,12 @@ snapshots:
 
 
   classnames@2.5.1: {}
   classnames@2.5.1: {}
 
 
+  cliui@3.2.0:
+    dependencies:
+      string-width: 1.0.2
+      strip-ansi: 3.0.1
+      wrap-ansi: 2.1.0
+
   cliui@8.0.1:
   cliui@8.0.1:
     dependencies:
     dependencies:
       string-width: 4.2.3
       string-width: 4.2.3
@@ -5744,6 +5839,8 @@ snapshots:
       - '@types/react'
       - '@types/react'
       - '@types/react-dom'
       - '@types/react-dom'
 
 
+  code-point-at@1.1.0: {}
+
   color-convert@2.0.1:
   color-convert@2.0.1:
     dependencies:
     dependencies:
       color-name: 1.1.4
       color-name: 1.1.4
@@ -5860,6 +5957,8 @@ snapshots:
     dependencies:
     dependencies:
       ms: 2.1.3
       ms: 2.1.3
 
 
+  decamelize@1.2.0: {}
+
   decimal.js-light@2.5.1: {}
   decimal.js-light@2.5.1: {}
 
 
   decode-uri-component@0.2.2: {}
   decode-uri-component@0.2.2: {}
@@ -6436,6 +6535,8 @@ snapshots:
 
 
   internmap@2.0.3: {}
   internmap@2.0.3: {}
 
 
+  invert-kv@1.0.0: {}
+
   ioredis@5.6.1:
   ioredis@5.6.1:
     dependencies:
     dependencies:
       '@ioredis/commands': 1.2.0
       '@ioredis/commands': 1.2.0
@@ -6503,6 +6604,10 @@ snapshots:
     dependencies:
     dependencies:
       call-bound: 1.0.4
       call-bound: 1.0.4
 
 
+  is-fullwidth-code-point@1.0.0:
+    dependencies:
+      number-is-nan: 1.0.1
+
   is-fullwidth-code-point@3.0.0: {}
   is-fullwidth-code-point@3.0.0: {}
 
 
   is-generator-function@1.1.0:
   is-generator-function@1.1.0:
@@ -6664,6 +6769,10 @@ snapshots:
     dependencies:
     dependencies:
       json-buffer: 3.0.1
       json-buffer: 3.0.1
 
 
+  lcid@1.0.0:
+    dependencies:
+      invert-kv: 1.0.0
+
   levn@0.4.1:
   levn@0.4.1:
     dependencies:
     dependencies:
       prelude-ls: 1.2.1
       prelude-ls: 1.2.1
@@ -6884,6 +6993,8 @@ snapshots:
     dependencies:
     dependencies:
       path-key: 3.1.1
       path-key: 3.1.1
 
 
+  number-is-nan@1.0.1: {}
+
   object-assign@4.1.1: {}
   object-assign@4.1.1: {}
 
 
   object-inspect@1.13.4: {}
   object-inspect@1.13.4: {}
@@ -6939,6 +7050,10 @@ snapshots:
       type-check: 0.4.0
       type-check: 0.4.0
       word-wrap: 1.2.5
       word-wrap: 1.2.5
 
 
+  os-locale@1.4.0:
+    dependencies:
+      lcid: 1.0.0
+
   own-keys@1.0.1:
   own-keys@1.0.1:
     dependencies:
     dependencies:
       get-intrinsic: 1.3.0
       get-intrinsic: 1.3.0
@@ -7063,6 +7178,8 @@ snapshots:
 
 
   punycode@2.3.1: {}
   punycode@2.3.1: {}
 
 
+  q@1.5.1: {}
+
   query-string@7.1.3:
   query-string@7.1.3:
     dependencies:
     dependencies:
       decode-uri-component: 0.2.2
       decode-uri-component: 0.2.2
@@ -7426,6 +7543,12 @@ snapshots:
 
 
   strict-uri-encode@2.0.0: {}
   strict-uri-encode@2.0.0: {}
 
 
+  string-width@1.0.2:
+    dependencies:
+      code-point-at: 1.1.0
+      is-fullwidth-code-point: 1.0.0
+      strip-ansi: 3.0.1
+
   string-width@4.2.3:
   string-width@4.2.3:
     dependencies:
     dependencies:
       emoji-regex: 8.0.0
       emoji-regex: 8.0.0
@@ -7486,6 +7609,10 @@ snapshots:
     dependencies:
     dependencies:
       safe-buffer: 5.2.1
       safe-buffer: 5.2.1
 
 
+  strip-ansi@3.0.1:
+    dependencies:
+      ansi-regex: 2.1.1
+
   strip-ansi@6.0.1:
   strip-ansi@6.0.1:
     dependencies:
     dependencies:
       ansi-regex: 5.0.1
       ansi-regex: 5.0.1
@@ -7514,6 +7641,14 @@ snapshots:
 
 
   supports-preserve-symlinks-flag@1.0.0: {}
   supports-preserve-symlinks-flag@1.0.0: {}
 
 
+  svg-to-jsx@1.0.4:
+    dependencies:
+      object-assign: 4.1.1
+      q: 1.5.1
+      xml2js: 0.4.23
+      xmlbuilder: 13.0.2
+      yargs: 3.32.0
+
   tailwind-merge@3.3.1: {}
   tailwind-merge@3.3.1: {}
 
 
   tailwindcss@4.1.11: {}
   tailwindcss@4.1.11: {}
@@ -7868,8 +8003,15 @@ snapshots:
       siginfo: 2.0.0
       siginfo: 2.0.0
       stackback: 0.0.2
       stackback: 0.0.2
 
 
+  window-size@0.1.4: {}
+
   word-wrap@1.2.5: {}
   word-wrap@1.2.5: {}
 
 
+  wrap-ansi@2.1.0:
+    dependencies:
+      string-width: 1.0.2
+      strip-ansi: 3.0.1
+
   wrap-ansi@7.0.0:
   wrap-ansi@7.0.0:
     dependencies:
     dependencies:
       ansi-styles: 4.3.0
       ansi-styles: 4.3.0
@@ -7882,6 +8024,11 @@ snapshots:
       string-width: 5.1.2
       string-width: 5.1.2
       strip-ansi: 7.1.0
       strip-ansi: 7.1.0
 
 
+  xml2js@0.4.23:
+    dependencies:
+      sax: 1.4.1
+      xmlbuilder: 11.0.1
+
   xml2js@0.6.2:
   xml2js@0.6.2:
     dependencies:
     dependencies:
       sax: 1.4.1
       sax: 1.4.1
@@ -7889,8 +8036,12 @@ snapshots:
 
 
   xmlbuilder@11.0.1: {}
   xmlbuilder@11.0.1: {}
 
 
+  xmlbuilder@13.0.2: {}
+
   xtend@4.0.2: {}
   xtend@4.0.2: {}
 
 
+  y18n@3.2.2: {}
+
   y18n@5.0.8: {}
   y18n@5.0.8: {}
 
 
   yallist@5.0.0: {}
   yallist@5.0.0: {}
@@ -7909,6 +8060,16 @@ snapshots:
       y18n: 5.0.8
       y18n: 5.0.8
       yargs-parser: 21.1.1
       yargs-parser: 21.1.1
 
 
+  yargs@3.32.0:
+    dependencies:
+      camelcase: 2.1.1
+      cliui: 3.2.0
+      decamelize: 1.2.0
+      os-locale: 1.4.0
+      string-width: 1.0.2
+      window-size: 0.1.4
+      y18n: 3.2.2
+
   yocto-queue@0.1.0: {}
   yocto-queue@0.1.0: {}
 
 
   zod@4.0.15: {}
   zod@4.0.15: {}

+ 67 - 0
scripts/convert-svgs.sh

@@ -0,0 +1,67 @@
+#!/bin/bash
+
+# SVG文件目录
+SVG_DIR="public/supply-chain"
+# 输出目录
+OUTPUT_DIR="src/client/home/pages/SupplyChainDashboards/components/icons"
+
+# 需要转换的SVG文件列表
+SVG_FILES=(
+  "union.svg"
+  "img5.svg"
+  "SupplyChainIcons.svg"
+  "BasePointIcon.svg"
+)
+
+# 确保输出目录存在
+mkdir -p "$OUTPUT_DIR"
+
+# 转换每个SVG文件
+for svg_file in "${SVG_FILES[@]}"; do
+  svg_path="$SVG_DIR/$svg_file"
+
+  # 检查SVG文件是否存在
+  if [ ! -f "$svg_path" ]; then
+    echo "警告: SVG文件不存在: $svg_file"
+    continue
+  fi
+
+  # 生成组件名称
+  component_name=$(echo "$svg_file" | sed 's/\.svg$//' | sed 's/[_-]\([a-z]\)/\U\1/g' | sed 's/^\([a-z]\)/\U\1/')
+
+  # 转换SVG为JSX
+  jsx_content=$(npx svg-to-jsx "$svg_path")
+
+  # 生成React组件代码
+  component_code="import React from 'react';
+
+interface ${component_name}Props {
+  className?: string;
+  fill?: string;
+  stroke?: string;
+  width?: number | string;
+  height?: number | string;
+}
+
+const ${component_name}: React.FC<${component_name}Props> = ({
+  className = \"\",
+  fill = \"currentColor\",
+  stroke = \"currentColor\",
+  width,
+  height
+}) => {
+  return (
+    ${jsx_content}
+  );
+};
+
+export default ${component_name};"
+
+  # 写入输出文件
+  output_path="$OUTPUT_DIR/${component_name}.tsx"
+  echo "$component_code" > "$output_path"
+
+  echo "✓ 成功转换: $svg_file -> ${component_name}.tsx"
+done
+
+echo "\nSVG转JSX转换完成!"

+ 1 - 1
src/client/home/pages/SupplyChainDashboards/GrainOilDashboard.tsx

@@ -99,7 +99,7 @@ const GrainOilDashboard: React.FC<GrainOilDashboardProps> = () => {
         onPointClick={handlePointClick}
         onPointClick={handlePointClick}
       />
       />
       
       
-      {/* 右侧供应链合作模式 */}
+      {/* 右侧供应链合作模式 这个不用主题色*/}
       <SupplyChainModel />
       <SupplyChainModel />
 
 
 
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 26 - 0
src/client/home/pages/SupplyChainDashboards/components/icons/BasePointIcon.tsx


+ 25 - 0
src/client/home/pages/SupplyChainDashboards/components/icons/Img5.tsx

@@ -0,0 +1,25 @@
+import React from 'react';
+
+interface Img5Props {
+  className?: string;
+  fill?: string;
+  stroke?: string;
+  width?: number | string;
+  height?: number | string;
+}
+
+const Img5: React.FC<Img5Props> = ({
+  className = "",
+  fill = "currentColor",
+  stroke = "currentColor",
+  width,
+  height
+}) => {
+  return (
+    <svg height="50" width="50" fill="none" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg">
+	<path d="M28.1795 7.10254C28.1795 7.10254 27.0088 6.45224 25 6.5028C22.9911 6.45224 21.8222 7.10254 21.8222 7.10254V9.54132H28.1795V7.10254L28.1795 7.10254ZM36.8945 40.2447C36.8945 40.2447 36.8945 19.4698 36.8945 18.3318C36.8945 17.1937 36.1755 16.8143 36.1755 16.8143L28.2103 10.4699H21.7915L13.8263 16.8143C13.8263 16.8143 13.1055 17.1937 13.1055 18.3318C13.1055 19.4698 13.1055 40.2447 13.1055 40.2447C13.1055 40.2447 12.8273 43.5 16.3753 43.5H21.8222C25.0542 43.5 28.1795 43.5 28.1795 43.5H33.6263C37.1727 43.5 36.8945 40.2447 36.8945 40.2447ZM33.6245 32.372C33.6245 32.7296 33.3247 33.0223 32.9561 33.0223H28.0874C27.7189 33.0223 27.4208 32.7296 27.4208 32.372V21.6268C27.4208 21.2656 27.7189 20.9747 28.0874 20.9747H32.9562C33.3247 20.9747 33.6246 21.2656 33.6246 21.6268V32.372L33.6245 32.372Z" fill="white" fillOpacity="0.5" opacity="0.78"/>
+</svg>
+  );
+};
+
+export default Img5;

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 36 - 0
src/client/home/pages/SupplyChainDashboards/components/icons/SupplyChainIcons.tsx


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 19 - 0
src/client/home/pages/SupplyChainDashboards/components/icons/Union.tsx


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.