破损接口更改后端传参格式,上片机、卧式缓存删除废弃页面,卧式缓存新增一线二线页面及接口,大理片笼破损接口
10个文件已修改
2个文件已删除
1998 ■■■■ 已修改文件
UI-Project/package-lock.json 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/en.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/py.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/router/index.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Caching/cachingbefore.vue 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Caching/cachingun.vue 390 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Caching/cachingyiwu.vue 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/returns.vue 958 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package-lock.json
@@ -24,7 +24,7 @@
        "vue": "^3.3.4",
        "vue-draggable-plus": "^0.5.0",
        "vue-echarts": "^6.7.3",
        "vue-i18n": "^9.10.1",
        "vue-i18n": "^11.0.0-rc.1",
        "vue-print-nb": "^1.7.5",
        "vue-router": "^4.0.13",
        "vue3-print-nb": "^0.1.4",
@@ -148,35 +148,44 @@
      "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
    },
    "node_modules/@intlify/core-base": {
      "version": "9.13.1",
      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.13.1.tgz",
      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
      "version": "11.0.0-rc.1",
      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.0.0-rc.1.tgz",
      "integrity": "sha512-fnfZoa9pb1dKM3L1UkDUGLLrPFQ2BK98x4/fMqwS/fktUor34vQR/itPtfv652ZTplenXXLCEYjUYTGfDZgMTQ==",
      "dependencies": {
        "@intlify/message-compiler": "9.13.1",
        "@intlify/shared": "9.13.1"
        "@intlify/message-compiler": "11.0.0-rc.1",
        "@intlify/shared": "11.0.0-rc.1"
      },
      "engines": {
        "node": ">= 16"
      },
      "funding": {
        "url": "https://github.com/sponsors/kazupon"
      }
    },
    "node_modules/@intlify/message-compiler": {
      "version": "9.13.1",
      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
      "version": "11.0.0-rc.1",
      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-11.0.0-rc.1.tgz",
      "integrity": "sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==",
      "dependencies": {
        "@intlify/shared": "9.13.1",
        "@intlify/shared": "11.0.0-rc.1",
        "source-map-js": "^1.0.2"
      },
      "engines": {
        "node": ">= 16"
      },
      "funding": {
        "url": "https://github.com/sponsors/kazupon"
      }
    },
    "node_modules/@intlify/shared": {
      "version": "9.13.1",
      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.13.1.tgz",
      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
      "version": "11.0.0-rc.1",
      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-11.0.0-rc.1.tgz",
      "integrity": "sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg==",
      "engines": {
        "node": ">= 16"
      },
      "funding": {
        "url": "https://github.com/sponsors/kazupon"
      }
    },
    "node_modules/@jridgewell/sourcemap-codec": {
@@ -2028,12 +2037,12 @@
      }
    },
    "node_modules/vue-i18n": {
      "version": "9.13.1",
      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.13.1.tgz",
      "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
      "version": "11.0.0-rc.1",
      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.0.0-rc.1.tgz",
      "integrity": "sha512-qbdCbA537HEdr2yXQ4ec/OMDsoHjod1DwnWbrf+l4Cu/O7CYTCKsOyITUm3RmrCJgRnoVycuR6i/JWdNTJvD5g==",
      "dependencies": {
        "@intlify/core-base": "9.13.1",
        "@intlify/shared": "9.13.1",
        "@intlify/core-base": "11.0.0-rc.1",
        "@intlify/shared": "11.0.0-rc.1",
        "@vue/devtools-api": "^6.5.0"
      },
      "engines": {
@@ -2307,27 +2316,27 @@
      "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
    },
    "@intlify/core-base": {
      "version": "9.13.1",
      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.13.1.tgz",
      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
      "version": "11.0.0-rc.1",
      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.0.0-rc.1.tgz",
      "integrity": "sha512-fnfZoa9pb1dKM3L1UkDUGLLrPFQ2BK98x4/fMqwS/fktUor34vQR/itPtfv652ZTplenXXLCEYjUYTGfDZgMTQ==",
      "requires": {
        "@intlify/message-compiler": "9.13.1",
        "@intlify/shared": "9.13.1"
        "@intlify/message-compiler": "11.0.0-rc.1",
        "@intlify/shared": "11.0.0-rc.1"
      }
    },
    "@intlify/message-compiler": {
      "version": "9.13.1",
      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
      "version": "11.0.0-rc.1",
      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-11.0.0-rc.1.tgz",
      "integrity": "sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==",
      "requires": {
        "@intlify/shared": "9.13.1",
        "@intlify/shared": "11.0.0-rc.1",
        "source-map-js": "^1.0.2"
      }
    },
    "@intlify/shared": {
      "version": "9.13.1",
      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.13.1.tgz",
      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ=="
      "version": "11.0.0-rc.1",
      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-11.0.0-rc.1.tgz",
      "integrity": "sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg=="
    },
    "@jridgewell/sourcemap-codec": {
      "version": "1.4.15",
@@ -3213,7 +3222,7 @@
        "@vitejs/plugin-vue": "^4.6.2",
        "@vue-macros/reactivity-transform": "^0.3.23",
        "axios": "^1.6.8",
        "babel-polyfill": "*",
        "babel-polyfill": "^6.26.0",
        "chart.js": "^4.4.3",
        "echarts": "^5.5.1",
        "element-plus": "^2.4.0",
@@ -3230,7 +3239,7 @@
        "vue": "^3.3.4",
        "vue-draggable-plus": "^0.5.0",
        "vue-echarts": "^6.7.3",
        "vue-i18n": "^9.10.1",
        "vue-i18n": "11.0.0-rc.1",
        "vue-print-nb": "^1.7.5",
        "vue-router": "^4.0.13",
        "vue3-print-nb": "^0.1.4",
@@ -3314,27 +3323,27 @@
          "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
        },
        "@intlify/core-base": {
          "version": "9.13.1",
          "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.13.1.tgz",
          "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
          "version": "11.0.0-rc.1",
          "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.0.0-rc.1.tgz",
          "integrity": "sha512-fnfZoa9pb1dKM3L1UkDUGLLrPFQ2BK98x4/fMqwS/fktUor34vQR/itPtfv652ZTplenXXLCEYjUYTGfDZgMTQ==",
          "requires": {
            "@intlify/message-compiler": "9.13.1",
            "@intlify/shared": "9.13.1"
            "@intlify/message-compiler": "11.0.0-rc.1",
            "@intlify/shared": "11.0.0-rc.1"
          }
        },
        "@intlify/message-compiler": {
          "version": "9.13.1",
          "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
          "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
          "version": "11.0.0-rc.1",
          "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-11.0.0-rc.1.tgz",
          "integrity": "sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==",
          "requires": {
            "@intlify/shared": "9.13.1",
            "@intlify/shared": "11.0.0-rc.1",
            "source-map-js": "^1.0.2"
          }
        },
        "@intlify/shared": {
          "version": "9.13.1",
          "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.13.1.tgz",
          "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ=="
          "version": "11.0.0-rc.1",
          "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-11.0.0-rc.1.tgz",
          "integrity": "sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg=="
        },
        "@jridgewell/sourcemap-codec": {
          "version": "1.4.15",
@@ -4615,12 +4624,12 @@
          }
        },
        "vue-i18n": {
          "version": "9.13.1",
          "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.13.1.tgz",
          "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
          "version": "11.0.0-rc.1",
          "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.0.0-rc.1.tgz",
          "integrity": "sha512-qbdCbA537HEdr2yXQ4ec/OMDsoHjod1DwnWbrf+l4Cu/O7CYTCKsOyITUm3RmrCJgRnoVycuR6i/JWdNTJvD5g==",
          "requires": {
            "@intlify/core-base": "9.13.1",
            "@intlify/shared": "9.13.1",
            "@intlify/core-base": "11.0.0-rc.1",
            "@intlify/shared": "11.0.0-rc.1",
            "@vue/devtools-api": "^6.5.0"
          }
        },
@@ -5178,12 +5187,12 @@
      }
    },
    "vue-i18n": {
      "version": "9.13.1",
      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.13.1.tgz",
      "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
      "version": "11.0.0-rc.1",
      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.0.0-rc.1.tgz",
      "integrity": "sha512-qbdCbA537HEdr2yXQ4ec/OMDsoHjod1DwnWbrf+l4Cu/O7CYTCKsOyITUm3RmrCJgRnoVycuR6i/JWdNTJvD5g==",
      "requires": {
        "@intlify/core-base": "9.13.1",
        "@intlify/shared": "9.13.1",
        "@intlify/core-base": "11.0.0-rc.1",
        "@intlify/shared": "11.0.0-rc.1",
        "@vue/devtools-api": "^6.5.0"
      }
    },
UI-Project/package.json
@@ -24,7 +24,7 @@
    "vue": "^3.3.4",
    "vue-draggable-plus": "^0.5.0",
    "vue-echarts": "^6.7.3",
    "vue-i18n": "^9.10.1",
    "vue-i18n": "^11.0.0-rc.1",
    "vue-print-nb": "^1.7.5",
    "vue-router": "^4.0.13",
    "vue3-print-nb": "^0.1.4",
UI-Project/src/lang/en.js
@@ -87,6 +87,20 @@
          layoutSequence:'Serial Number',
      },
      sorter:{
          inPlace:'到位',
          ninPlace:'未到位',
          emptymissions:'空任务',
          advancetask:'进片任务',
          outputtasks:'出片任务',
          straighttasks:'直通任务',
          endingtask:'结束',
          another:'其他',
          taskRunning:'任务请求',
          updateTime:'更新时间',
          id:'磨边前理片笼表ID',
          remainWidth:'剩余',
          place:'是否到位',
          layernow:'当前层号',
          gridnumber:'Grid number',
          glassnumber:'Glass number',
          width:'Width',
UI-Project/src/lang/py.js
@@ -87,6 +87,20 @@
        layoutSequence:'Серийн номер',
    },
    sorter: {
        inPlace:'到位',
        ninPlace:'未到位',
        emptymissions:'空任务',
        advancetask:'进片任务',
        outputtasks:'出片任务',
        straighttasks:'直通任务',
        endingtask:'结束',
        another:'其他',
        taskRunning:'任务请求',
        remainWidth:'剩余',
        id:'磨边前理片笼表ID',
        updateTime:'更新时间',
        place:'是否到位',
        layernow:'当前层号',
        gridnumber: 'Ячеек сеткла',
        glassnumber: 'Номер стакла',
        width: 'Ширина',
UI-Project/src/lang/zh.js
@@ -87,6 +87,20 @@
          layoutSequence:'序号',
      },
      sorter:{
          inPlace:'到位',
          ninPlace:'未到位',
          emptymissions:'空任务',
          advancetask:'进片任务',
          outputtasks:'出片任务',
          straighttasks:'直通任务',
          endingtask:'结束',
          another:'其他',
          id:'磨边前理片笼表ID',
          remainWidth:'剩余',
          taskRunning:'任务请求',
          updateTime:'更新时间',
          place:'是否到位',
          layernow:'当前层号',
          gridnumber:'栅格号',
          glassnumber:'玻璃编号',
          width:'宽',
UI-Project/src/router/index.js
@@ -46,11 +46,6 @@
        component: () => import('../views/Returns/return.vue'),
        children:[
          {
            path: '/Returns/returns',
            name: 'returns',
            component: () => import('../views/Returns/returns.vue')
          },
          {
            path: '/Returns/upreturns',
            name: 'upreturns',
            component: () => import('../views/Returns/upreturns.vue')
@@ -95,11 +90,6 @@
        path: '/Caching/cachingun',
        name: 'cachingun',
        component: () => import('../views/Caching/cachingun.vue')
      },
      {
        path: '/Caching/cachingyiwu',
        name: 'cachingyiwu',
        component: () => import('../views/Caching/cachingyiwu.vue')
      },
    ]
  },
UI-Project/src/views/Caching/cachingbefore.vue
@@ -8,77 +8,115 @@
import {useI18n} from 'vue-i18n'
const {t} = useI18n()
let language = ref(localStorage.getItem('lang') || 'zh')
const tableData = ref([])
const slot = ref('')
const tableDataa = ref([])
const tableDatab = ref([])
const adjustedRects = ref([]);
onMounted(async () => {
  try {
    const response = await request.post('/cacheGlass/edgStorageCage/selectEdgStorageCage');
    if (response.code === 200) {
      const rawRects = response.data;
      tableData.value = response.data
      adjustedRects.value = rawRects.map(rect => ({
        ...rect,
        width: rect.width * 0.5 ,
        id: rect.id * 10,
      }));
    } else {
      ElMessage.warning(res.msg)
    }
  } catch (error) {
    // console.error('Error fetching rects :', error);
  }
});
const toggleEnableState = async (row) => {
  const newState = row.enable_state === 1 ? 0 : 1;
  const response = await request.post('/cacheGlass/edgStorageCage/updateEdgStorageCage', { id: row.id, enableState: newState });
  if (response.code === 200) {
      ElMessage.success(response.message);
      } else {
      ElMessage.error(response.message);
      }
  row.enable_state = newState;
};
const open = async(row) => {
  try {
    const confirmResult = await ElMessageBox.confirm(
      t('sorter.information'),
      t('sorter.prompt'),
      {
        confirmButtonText: t('sorter.yes'),
        cancelButtonText: t('sorter.cancel'),
        type: 'warning',
      }
    );
    if (confirmResult === 'confirm') {
      var url="/cacheGlass/edgStorageCage/edgStorageCageGlass?edgStorageCageId="+row.id;
      const response = await request.post(url, {
        glassId:row.glass_id
    })
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {
      ElMessage.error(response.msg);
      }
    }
  } catch (error) {
    console.error('发生错误:', error);
  }
};
let socket = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassOne`;
const handleMessage = (data) => {
  tableData.value = data.EdgStorageCageinfos[0]
  adjustedRects.value = data.EdgStorageCageinfos[0].map(rect => ({
      ...rect,
      width: rect.width * 0.5 ,
      id: rect.id * 10,
    }));
  const cageInfo = data.taskMessage[0];
  if (cageInfo && cageInfo.createTime) {
    cageInfo.formattedCreateTime = formatTimestamp(cageInfo.createTime);
  }
  if (cageInfo && cageInfo.updateTime) {
    cageInfo.formattedupdateTime = formatTimestamp(cageInfo.updateTime);
  }
  tableDataa.value = data.EdgStorageCageinfos[0]
  tableDatab.value = data.taskMessage
  // adjustedRects.value = data.EdgStorageCageinfos[0].map(rect => ({
  //     ...rect,
  //     width: rect.width * 0.5 ,
  //     id: rect.id * 10,
  //   }));
};
// 初始化 WebSocket,并传递消息处理函数
onMounted(() => {
  socket = initializeWebSocket(socketUrl, handleMessage);
});
function getStatusTypea(taskRunning) {
  switch (taskRunning) {
    case 0:
      return 'info';
    case 1:
      return 'success';
    case 2:
      return 'success';
    case 3:
      return 'success';
    case 4:
      return 'success';
    case 5:
      return 'danger';
    case 6:
      return 'info';
  }
}
function getStatusTexta(taskRunning) {
  switch (taskRunning) {
    case 0:
      return t('sorter.emptymissions');
    case 1:
      return t('sorter.advancetask');
    case 2:
      return t('sorter.outputtasks');
    case 3:
      return t('sorter.straighttasks');
    case 4:
      return t('searchOrder.infilm');
    case 5:
      return t('sorter.endingtask');
    case 6:
      return t('sorter.another');
  }
}
function getStatusTypeb(taskState) {
  switch (taskState) {
    case 0:
      return 'info';
    case 1:
      return 'success';
    case 2:
      return 'success';
    case 3:
      return 'success';
    case 4:
      return 'success';
    case 5:
      return 'danger';
    case 6:
      return 'info';
  }
}
function getStatusTextb(taskState) {
  switch (taskState) {
    case 0:
      return t('sorter.emptymissions');
    case 1:
      return t('sorter.advancetask');
    case 2:
      return t('sorter.outputtasks');
    case 3:
      return t('sorter.straighttasks');
    case 4:
      return t('searchOrder.infilm');
    case 5:
      return t('sorter.endingtask');
    case 6:
      return t('sorter.another');
  }
}
// 格式化时间戳为年月日时间字符串的函数
function formatTimestamp(timestamp) {
  const date = new Date(timestamp);
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零
  const day = String(date.getDate()).padStart(2, '0'); // 补零
  const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间)
  const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间)
  const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间)
  // 只显示年月日,如果需要显示时间,则拼接 hours + ':' + minutes + ':' + seconds
  return `${year}-${month}-${day}`;
}
  onUnmounted(() => {
    if (socket) {
    closeWebSocket(socket);
@@ -93,41 +131,84 @@
  <div style="height: 500px;">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="340" ref="table"
        <el-table height="300" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
        :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" :label="$t('sorter.id')" min-width="80" />
          <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="80" />
          <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
          <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" />
          <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" />
          <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" />
          <el-table-column
            align="center"
            :label="$t('sorter.startstatus')"
            min-width="80"
            prop="enable_state"
            prop="enableState"
          >
          <template #default="scope">
            <el-tag
              :type="scope.row.enableState === 1 ? 'success' : 'warning'"
            >
              {{ scope.row.enableState === 1 ? $t('sorter.start') : $t('sorter.disable') }}
            </el-tag>
          </template>
      </el-table-column>
          <el-table-column prop="remainWidth" align="center" :label="$t('sorter.remainWidth')" min-width="80" />
        </el-table>
      </div>
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;margin-top: 15px;">
        <el-table height="90" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" />
          <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" />
          <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" />
          <el-table-column
            align="center"
            :label="$t('sorter.place')"
            min-width="80"
            prop="inPlace"
          >
          <template #default="scope">
            <el-tag
              :type="scope.row.inPlace === 1 ? 'success' : 'warning'"
            >
              {{ scope.row.inPlace === 1 ? $t('sorter.inPlace') : $t('sorter.ninPlace') }}
            </el-tag>
          </template>
      </el-table-column>
          <el-table-column
            align="center"
            :label="$t('sorter.taskRunning')"
            min-width="80"
            prop="taskRunning"
          >
          <template #default="scope">  
          <el-tag
            :type="scope.row.enable_state === 1 ? 'success' : 'danger'"
            @click="toggleEnableState(scope.row)"
          >
            {{ scope.row.enable_state === 1 ?  $t('sorter.start') : $t('sorter.disable') }}
          </el-tag>
        </template>
        <el-tag :type="getStatusTypea(scope.row.taskRunning)">
          {{ getStatusTexta(scope.row.taskRunning) }}
        </el-tag>
      </template>
          </el-table-column>
          <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain  @click="open(scope.row)">{{ $t('sorter.deficiencieste') }}</el-button>
            </template>
        </el-table-column>
          <el-table-column
            align="center"
            :label="$t('film.taskstatus')"
            min-width="80"
            prop="taskState"
          >
          <template #default="scope">
        <el-tag :type="getStatusTypeb(scope.row.taskState)">
          {{ getStatusTextb(scope.row.taskState) }}
        </el-tag>
      </template>
          </el-table-column>
          <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="120" />
          <el-table-column prop="formattedupdateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" />
        </el-table>
      </div>
    </el-card>
  <div class="awatch">
    <img src="../../assets/woshihuancun.png" alt="" style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;">
    <img src="../../assets/woshihuancun.png" alt="" style="width: 50%;height: 70%;margin-left: 30%;margin-top: 20px;position: relative;">
    <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
    <div  
      v-for="(rect, index) in adjustedRects"
      v-for="(rect, index) in adjustedRects"
      :key="rect"  
      :style="{ position: 'absolute', 
       top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
UI-Project/src/views/Caching/cachingun.vue
@@ -1,200 +1,244 @@
<template>
  <div style="height: 500px;">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="340" ref="table" @selection-change="handleSelectionChange" :data="tableData"
          :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
          <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
          <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" />
          <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" />
          <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" />
          <el-table-column align="center" :label="$t('sorter.startstatus')" min-width="80" prop="enable_state">
            <template #default="scope">
              <el-tag :type="scope.row.enable_state === 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)">
                {{ scope.row.enable_state === 1 ? $t('sorter.start') : $t('sorter.disable') }}
              </el-tag>
            </template>
          </el-table-column>
          <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('sorter.deficiencieste')
                }}</el-button>
              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('sorter.updown') }}</el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
    </el-card>
    <div class="awatch">
      <img src="../../assets/woshihuancun.png" alt=""
        style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;">
      <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
        <div v-for="(rect, index) in adjustedRects" :key="rect" :style="{
      position: 'absolute',
      top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
      backgroundColor: '#409EFF'
    }">
        </div>
      </div>
    </div>
  </div>
</template>
<script setup>
import { Search, Lock, Avatar } from "@element-plus/icons-vue";
import { reactive } from "vue";
import { useRouter } from "vue-router"
const router = useRouter()
import { WebSocketHost, host } from '@/utils/constants'
import {onBeforeUnmount, onMounted, onUnmounted, ref} from "vue";
import {useRouter} from "vue-router"
import {host, WebSocketHost} from '@/utils/constants'
import request from "@/utils/request"
import { ref, onMounted, onBeforeUnmount, onUnmounted } from "vue";
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import { ElMessage, ElMessageBox } from 'element-plus'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const tableData = reactive([]);
const slot = ref('')
import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
import {ElMessage, ElMessageBox} from 'element-plus'
import {useI18n} from 'vue-i18n'
const {t} = useI18n()
let language = ref(localStorage.getItem('lang') || 'zh')
const tableDataa = ref([])
const tableDatab = ref([])
const adjustedRects = ref([]);
onMounted(async () => {
  try {
    const response = await request.get('/unLoadGlass/downStorage/selectStorageCage');
    if (response.code === 200) {
      const rawRects = response.data;
      tableData.value = response.data
      console.log(response.data);
      adjustedRects.value = rawRects.map(rect => ({
        ...rect,
        width: rect.width * 0.5,
        id: rect.id * 10,
      }));
      console.log(adjustedRects.value);
    } else {
      ElMessage.warning(res.msg)
    }
  } catch (error) {
    // console.error('Error fetching rects :', error);
  }
});
const open = async (row) => {
  try {
    const confirmResult = await ElMessageBox.confirm(
      t('sorter.information'),
      t('sorter.prompt'),
      {
        confirmButtonText: t('sorter.yes'),
        cancelButtonText: t('sorter.cancel'),
        type: 'warning',
      }
    );
    if (confirmResult === 'confirm') {
      var url = "/unLoadGlass/downStorage/deleteDownStorageCage";
      console.log(url);
      const response = await request.post(url, {
        glassId: row.glass_id,
        state: 9,
        line: 1001,
        workingProcedure: '磨边',
    })
    if (response.code === 200) {
      ElMessage.success(response.message);
    } else {
      ElMessage.error(response.message);
    }
  }
  }
  catch (error) {
  console.error('发生错误:', error);
}
};
// 人工下片
const opena = async (row) => {
  try {
    const confirmResult = await ElMessageBox.confirm(
      t('sorter.infor'),
      t('sorter.prompt'),
      {
        confirmButtonText: t('sorter.yes'),
        cancelButtonText: t('sorter.cancel'),
        type: 'warning',
      }
    );
    if (confirmResult === 'confirm') {
      const response = await request.post("/unLoadGlass/downGlassTask/generateOutGlassTask", {
        glassId: row.glass_id
      })
      if (response.code === 200) {
        ElMessage.success(response.message);
      } else {
        ElMessage.error(response.message);
      }
    }
  }
  catch (error) {
    console.error('发生错误:', error);
  }
};
const toggleEnableState = async (row) => {
  const newState = row.enable_state === 1 ? 0 : 1;
  const response = await request.post('/unLoadGlass/downStorage/updateDownStorageCage', { id: row.id, enableState: newState });
  if (response.code === 200) {
    ElMessage.success(response.message);
  } else {
    ElMessage.error(response.message);
  }
  row.enable_state = newState;
};
let socket = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/downcache`;
const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassTwo`;
const handleMessage = (data) => {
  tableData.splice(0, tableData.length, ...data.params2[0]);
  adjustedRects.value = data.params2[0].map(rect => ({
    ...rect,
    width: rect.width * 0.5,
    id: rect.id * 10,
  }));
  const cageInfo = data.taskMessage[0];
  if (cageInfo && cageInfo.createTime) {
    cageInfo.formattedCreateTime = formatTimestamp(cageInfo.createTime);
  }
  if (cageInfo && cageInfo.updateTime) {
    cageInfo.formattedupdateTime = formatTimestamp(cageInfo.updateTime);
  }
  tableDataa.value = data.EdgStorageCageinfos[0]
  tableDatab.value = data.taskMessage
  // adjustedRects.value = data.EdgStorageCageinfos[0].map(rect => ({
  //     ...rect,
  //     width: rect.width * 0.5 ,
  //     id: rect.id * 10,
  //   }));
};
// 初始化 WebSocket,并传递消息处理函数
onMounted(() => {
  socket = initializeWebSocket(socketUrl, handleMessage);
});
onUnmounted(() => {
  if (socket) {
    closeWebSocket(socket);
function getStatusTypea(taskRunning) {
  switch (taskRunning) {
    case 0:
      return 'info';
    case 1:
      return 'success';
    case 2:
      return 'success';
    case 3:
      return 'success';
    case 4:
      return 'success';
    case 5:
      return 'danger';
    case 6:
      return 'info';
  }
});
}
function getStatusTexta(taskRunning) {
  switch (taskRunning) {
    case 0:
      return t('sorter.emptymissions');
    case 1:
      return t('sorter.advancetask');
    case 2:
      return t('sorter.outputtasks');
    case 3:
      return t('sorter.straighttasks');
    case 4:
      return t('searchOrder.infilm');
    case 5:
      return t('sorter.endingtask');
    case 6:
      return t('sorter.another');
  }
}
function getStatusTypeb(taskState) {
  switch (taskState) {
    case 0:
      return 'info';
    case 1:
      return 'success';
    case 2:
      return 'success';
    case 3:
      return 'success';
    case 4:
      return 'success';
    case 5:
      return 'danger';
    case 6:
      return 'info';
  }
}
function getStatusTextb(taskState) {
  switch (taskState) {
    case 0:
      return t('sorter.emptymissions');
    case 1:
      return t('sorter.advancetask');
    case 2:
      return t('sorter.outputtasks');
    case 3:
      return t('sorter.straighttasks');
    case 4:
      return t('searchOrder.infilm');
    case 5:
      return t('sorter.endingtask');
    case 6:
      return t('sorter.another');
  }
}
// 格式化时间戳为年月日时间字符串的函数
function formatTimestamp(timestamp) {
  const date = new Date(timestamp);
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零
  const day = String(date.getDate()).padStart(2, '0'); // 补零
  const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间)
  const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间)
  const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间)
  // 只显示年月日,如果需要显示时间,则拼接 hours + ':' + minutes + ':' + seconds
  return `${year}-${month}-${day}`;
}
  onUnmounted(() => {
    if (socket) {
    closeWebSocket(socket);
    }
    });
onBeforeUnmount(() => {
  console.log("关闭了")
  closeWebSocket();
});
</script>
<template>
  <div style="height: 500px;">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="300" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" :label="$t('sorter.id')" min-width="80" />
          <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="80" />
          <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
          <el-table-column
            align="center"
            :label="$t('sorter.startstatus')"
            min-width="80"
            prop="enableState"
          >
          <template #default="scope">
            <el-tag
              :type="scope.row.enableState === 1 ? 'success' : 'warning'"
            >
              {{ scope.row.enableState === 1 ? $t('sorter.start') : $t('sorter.disable') }}
            </el-tag>
          </template>
      </el-table-column>
          <el-table-column prop="remainWidth" align="center" :label="$t('sorter.remainWidth')" min-width="80" />
        </el-table>
      </div>
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;margin-top: 15px;">
        <el-table height="90" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" />
          <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" />
          <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" />
          <el-table-column
            align="center"
            :label="$t('sorter.place')"
            min-width="80"
            prop="inPlace"
          >
          <template #default="scope">
            <el-tag
              :type="scope.row.inPlace === 1 ? 'success' : 'warning'"
            >
              {{ scope.row.inPlace === 1 ? $t('sorter.inPlace') : $t('sorter.ninPlace') }}
            </el-tag>
          </template>
      </el-table-column>
          <el-table-column
            align="center"
            :label="$t('sorter.taskRunning')"
            min-width="80"
            prop="taskRunning"
          >
          <template #default="scope">
        <el-tag :type="getStatusTypea(scope.row.taskRunning)">
          {{ getStatusTexta(scope.row.taskRunning) }}
        </el-tag>
      </template>
          </el-table-column>
          <el-table-column
            align="center"
            :label="$t('film.taskstatus')"
            min-width="80"
            prop="taskState"
          >
          <template #default="scope">
        <el-tag :type="getStatusTypeb(scope.row.taskState)">
          {{ getStatusTextb(scope.row.taskState) }}
        </el-tag>
      </template>
          </el-table-column>
          <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="120" />
          <el-table-column prop="formattedupdateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" />
        </el-table>
      </div>
    </el-card>
  <div class="awatch">
    <img src="../../assets/woshihuancun.png" alt="" style="width: 50%;height: 70%;margin-left: 30%;margin-top: 20px;position: relative;">
    <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
    <div
      v-for="(rect, index) in adjustedRects"
      :key="rect"
      :style="{ position: 'absolute',
       top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
      backgroundColor: '#409EFF'
       }"
    >
  </div>
  </div>
</div>
</div>
</template>
<style scoped>
#dt {
  display: block;
  float: left;
  line-height: 20px;
  margin-left: 100px;
}
#dta {
  display: block;
  float: left;
  line-height: 20px;
  margin-left: 80%;
}
#dialog-footer {
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message {
#message{
  text-align: center;
  align-items: center;
  color: black;
  width: 200px;
  height: 100px;
  background-color: #337ecc;
  margin-left: 28%;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
.awatch {
.awatch{
  height: 460px;
  width: 1500px;
  max-width: 100%;
  /* margin-top: -60px; */
}
</style>
</style>
UI-Project/src/views/Caching/cachingyiwu.vue
File was deleted
UI-Project/src/views/Returns/returns.vue
File was deleted
UI-Project/src/views/Slicecage/slicecage.vue
@@ -69,6 +69,7 @@
const cell7=ref(true);
const cell8=ref(true);
const cell9=ref(true);
const canEdit = ref(true);
const selectedRow = ref(null);
const temperingtotal = ref(0);
const glasstotal = ref(0);
@@ -186,16 +187,21 @@
  row.enableState = newState;  
}; 
// 是否破损
const toggleEnableisDamage = async (row) => {
const broken = async (row) => {
  try  {
  const newState = row.isDamage === 1 ? 0 : 1;
  const response = await request.post('/cacheGlass/edgStorageCage/updateEdgStorageCage', { id: row.id, enableState: newState });
  if (response.code === 200) {
  const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/bigStorageGlassDamageByGlassId', { glassId: row.glassId });
    if (response.code == 200) {
      ElMessage.success(response.message);
      } else {
    } else {
      ElMessage.error(response.message);
      }
    }
  row.isDamage = newState;   
};
}
catch (error) {
    console.error(error);
  }
}
 // 删除 
 const opena = async(row) => {  
  try {
@@ -1504,16 +1510,24 @@
            min-width="80"
            prop="isDamage"
          >
          <template #default="scope">
          <el-tag
            :type="scope.row.isDamage === 1 ? 'danger' : 'success'"
            @click="toggleEnableisDamage(scope.row)"
          >
            {{ scope.row.isDamage === 1 ?  $t('searchOrder.breakage') : $t('searchOrder.breakagn') }}
          </el-tag>
        </template>
            <template #default="scope">
              <div
                @click="scope.row.isDamage === 1 ? null : broken(scope.row)"
                style="position: relative; display: inline-block;"
              >
                <el-tag
                  :type="scope.row.isDamage === 1 ? 'danger' : 'success'"
                  style="pointer-events: {{ scope.row.isDamage === 1 ? 'none' : 'auto' }};"
                >
                  {{ scope.row.isDamage === 1 ? $t('searchOrder.breakage') : $t('searchOrder.breakagn') }}
                </el-tag>
                <div
                  v-if="scope.row.isDamage === 1"
                  style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: transparent; z-index: 1;"
                ></div>
              </div>
            </template>
          </el-table-column>
          <!-- <el-table-column prop="isDamage" align="center" :label="$t('searchOrder.state')" min-width="80" /> -->
          <el-table-column prop="layer" align="center" :label="$t('processCard.layer')" min-width="80" />
          <el-table-column prop="xcoordinate" align="center" :label="$t('searchOrder.xcoordinates')" min-width="80" />
          <el-table-column prop="ycoordinate" align="center" :label="$t('searchOrder.ycoordinates')" min-width="80" />
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -173,7 +173,9 @@
    @ApiOperation("大理片笼报破损")
    @PostMapping("/bigStorageGlassDamageByGlassId")
    public Result<String> bigStorageGlassDamageByGlassId(String glassId) {
    public Result<String> bigStorageGlassDamageByGlassId(@RequestBody Map<String, String> map) {
        String glassId=map.get("glassId");
        return Result.build(200, "报破损成功", bigStorageCageDetailsService.bigStorageGlassDamageByGlassId(glassId));
    }
}