Bläddra i källkod

优化:判断胶片上是否有图像,避免在判断函数定义在state中

dengdx 1 månad sedan
förälder
incheckning
b2adc79b5c

+ 5 - 5
src/pages/output/print/PrintControl.tsx

@@ -3,6 +3,8 @@ import { Select, Button, Space, message } from 'antd';
 import { showNotImplemented } from '@/utils/notificationHelper';
 import { useAppSelector } from '@/states/store';
 import { getPrintManager } from '@/services/print';
+import { selectFilmHasImage } from '@/states/print/selectors';
+import { useSelector } from 'react-redux';
 
 const PrintControl: React.FC = () => {
   const [selectedNode, setSelectedNode] = useState<string>('');
@@ -16,7 +18,7 @@ const PrintControl: React.FC = () => {
     const activeId = state.print.activeFilmId;
     return films.find(f => f.id === activeId);
   });
-
+  const hasImage = useSelector(() => selectFilmHasImage(activeFilm));
   // 创建打印管理器实例
   const printManager = useMemo(() => getPrintManager(), []);
 
@@ -27,9 +29,7 @@ const PrintControl: React.FC = () => {
   ];
   // 检查当前胶片是否有图像
   const checkIfCanPrint = () => {
-    const hasImages = activeFilm?.hasImage(activeFilm.images)
-    console.log(`开始计算有效图像数量 ${hasImages}`)
-    if (activeFilm && activeFilm.hasImage(activeFilm.images)) {
+    if (activeFilm && hasImage) {
       setCanPrint(true);
     } else {
       setCanPrint(false);
@@ -38,7 +38,7 @@ const PrintControl: React.FC = () => {
 
   useEffect(() => {
     checkIfCanPrint();
-  }, [activeFilm,activeFilm?.images]);
+  }, [activeFilm, activeFilm?.images]);
 
   const handleLocalPrint = async () => {
     if (isPrinting) {

+ 0 - 7
src/states/print/printSlice.ts

@@ -8,7 +8,6 @@ export interface Film {
   layout: FilmLayout;
   orientation: FilmOrientation;
   images: (string | null)[]; // 图像ID或null(空格子)
-  hasImage: (images) => boolean;
 }
 
 interface PrintState {
@@ -28,9 +27,6 @@ const initialFilm: Film = {
    * 存储每个成员本质上是个sop instance uid
    */
   images: [null], // 1x1只有一个格子
-  hasImage:(images)=>{
-    console.log(`检查胶片 是否有图像:`, images);
-    return images.some(item => item !== null);},
 };
 
 const initialState: PrintState = {
@@ -51,9 +47,6 @@ const printSlice = createSlice({
         layout: '1x1',
         orientation: 'vertical',
         images: [null],
-        hasImage:(images)=>{
-          console.log(`检查胶片 ${newId} 是否有图像:`, images);
-          return images.some(item => item !== null);},
       };
       state.films.push(newFilm);
       state.activeFilmId = newId;

+ 4 - 0
src/states/print/selectors.ts

@@ -0,0 +1,4 @@
+import { Film } from "./printSlice";
+
+export const selectFilmHasImage = (film: Film|undefined) =>
+  film && film.images.some(Boolean);   // 等价于 id => id !== null