wangfei
2024-10-17 0b8f1db9b9db6ec216091e953303a752c91aa307
被覆盖代码找回
9个文件已修改
3个文件已添加
1422 ■■■■ 已修改文件
UI-Project/src/lang/en.js 470 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/py.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/router/index.js 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/NewPage.vue 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/return.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/returns.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/upreturns.vue 538 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/stockBasicData.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/en.js
@@ -1,191 +1,237 @@
export  default {
    "northglassMESsystem": 'Система "NorthGlass MES"' ,
    "northglassMESsystem": "NorthGlass MES System",
      login:{
          userErr:'Введите номер счета.',
          pwErr:'Введите пароль.',
          user:'Аккаунт',
          password:'Код',
          login:'Залогин',
          loginSuccessful:'Вход в систему выполнен успешно!',
          register:'Зарегистрирова',
          namea:'Имя не может быть пустым',
          len:'Длина не должна превышать 16',
          passnull:'Пароль не может быть пустым',
          leng:'Длина пароля не должна быть меньше 6 или больше 16.',
          spwn:'Пароль подтверждения не может быть пустым',
          depass:'Два разных пароля.',
          userErr:'Please enter account number',
          pwErr:'Please input a password',
          user:'Account number',
          password:'Password',
          login:'Log on',
          loginSuccessful:'Log on was successful!',
          register:'Register',
          namea:'Name cannot be empty',
          len:'The length cannot exceed 16',
          passnull:'Password cannot be empty',
          leng:'The password length cannot be less than 6 or more than 16',
          spwn:'Confirm password cannot be empty',
          depass:'The two passwords are not the same',
      },
      register:{
          registerSuccessful:'Регистрация успешно',
          newuserregister:'Новый реестр пользователей',
          name:'Имя:',
          inputname:'Введите имя',
          password:'Код:',
          pwErr:'Введите пароль.',
          passwordation:'Подтвердите пароль:',
          pwErration:'Пожалуйста, подтвертите пароль',
          registration:'Подтверждение о регистрации',
          false:'Отмена',
          registerSuccessful:'login was successful',
          newuserregister:'New user register',
          name:'Full name:',
          inputname:'Please enter your name',
          password:'Password:',
          pwErr:'Please input a password',
          passwordation:'Confirm password:',
          pwErration:'Please confirm password',
          registration:'Registration Confirm',
          false:'Cancel',
      },
      main:{
          connectErr:'Необычное подключение к серверу, попробуйте позже',
          titleFirst:"Добро пожаловать ",
          titleLast:' в систему NorthGlass MES!',
          quit:"Выход",
          connectErr:'The server connection is abnormal. Please try again later',
          titleFirst:"Welcome ",
          titleLast:' to use NorthGlass MES system!',
          quit:"Exit",
      },
      basicData:{
          deletemessage:'Удалить эту информацию или нет?',
          laserprinting:'Машина лазерной маркировки готова:',
          cuttingmachine:'Машина для резки готова:',
          machine:'Состояние станок загрузки в режиме онлайн:',
          machineaa:'Ручное состояние станок загрузки:',
          selectproject:"Выберите проект",
          startloading:'Начало загрузки',
          stop:'Пауза',
          yes:'подтверд',
          change:'переключа',
          projectnumber:'Номер проекта',
          glasswidth:'Ширина стекла',
          glassheight:'Высота стекла',
          coatingtypes:'Типы покрытий',
          coatingtypesa:'Типы покрытий:',
          quantity:'Количество',
          quantitya:'Количество:',
          thickness:'Толщина',
          thicknessa:'Толщина:',
          startstatus:'Статус начала операции',
          pass:'Через',
          waiting:'Ждем.',
          up:'Загрузка',
          finish:'Завершено',
          project:'инженерия',
          plselectproject:'Пожалуйста, выберите проект.',
          confirm:'подтверд',
          cancel:'Отмена',
          startfilm:'Начинать или нет?',
          whetherpause:'Пауза или нет?',
          station:'Рабочее место',
          width:'Ширина',
          widtha:'Ширина:',
          height:'Высота',
          heighta:'Высота:',
          operate:'Операция',
          add:'Добавля',
          delete:'Удал',
          addglass:'Добавить стекло',
          selectwidth:'Выбирите ширину',
          selectheight:'Выбирите высоту',
          selectcoatingtypes:'Выберите типы покрытий',
          selectthickness:'Выберите толщину',
          selectquantity:'Введите кольчество.',
          pause:'Вторая и четвертая строки должны быть выше 2700 для сохранения!',
          pausea:'Пожалуйста, убедитесь, что маркировочная и режущая машины готовы!',
          infonull:'Номер проекта не может быть пустым!',
          updatanull:'Проект не сохранились на листе загрузки!',
          glassnull:'Ошибка при обновлении стекла',
          laserprinting:'Laser printing machine ready status:',
          cuttingmachine:'Cutting machine ready status:',
          machine:'Online status of the loading table:',
          machineaa:'Manual state of the loading table:',
          selectproject:"Select project",
          startloading:'Start loading',
          stop:'Pause',
          yes:'Confirm',
          change:'Switch',
          projectnumber:'Project number',
          glasswidth:'Glass width',
          glassheight:'Glass height',
          coatingtypes:'Coating types',
          coatingtypesa:'Coating types:',
          quantity:'Quantity',
          quantitya:'Quantity:',
          thickness:'Thickness',
          thicknessa:'Thickness:',
          startstatus:'Start status',
          pass:'Pass',
          waiting:'Waiting',
          up:'Loading',
          finish:'Completed',
          project:'Project ',
          plselectproject:'Please select project',
          confirm:'Confirm',
          cancel:'Cancel',
          startfilm:'Whether start loading?',
          whetherpause:'Whether pause?',
          station:'Station',
          width:'Width',
          widtha:'Width:',
          height:'Height',
          heighta:'Height:',
          operate:'Operate',
          add:'Increase',
          delete:'Delete',
          addglass:'Add glass',
          selectwidth:'Please select width',
          selectheight:'Please select high',
          selectcoatingtypes:'Please select the coating types',
          selectthickness:'Please select thickness',
          selectquantity:'Please enter the quantity',
          pause:'The height of the second and fourth rows must be greater than 2700 in order to save!',
          pausea:'Please confirm the ready status of marking machine and cutting machine!',
          infonull:'Project number cannot be empty!',
          updatanull:'This project has not been saved to the loading list!',
          glassnull:'An error occurred while updating the glass status',
          deletemessage:'Do you want to delete this message?',
          layoutSequence:'Serial Number',
      },
      sorter:{
          gridnumber:'Ячеек сеткла',
          glassnumber:'Номер стакла',
          width:'Ширина',
          height:'Высота',
          startstatus:'Статус начала операции',
          disable:'Отключ',
          start:'Начало',
          deficiencieste:'Недостатки в отчетности',
          operate:'Операция',
          prompt:'Подсказк',
          information:'Следует ли сообщать недостающую информацию?',
          yes:'Да',
          cancel:'Отмена',
          gridnumber:'Grid number',
          glassnumber:'Glass number',
          width:'Width',
          height:'Height',
          startstatus:'Start status',
          disable:'Disabled',
          start:'Enabled',
          deficiencieste:'Report deficiencies',
          updown:'Artificial filming',
          operate:'Operate',
          prompt:'Prompt',
          information:'Is the missing information reported?',
          infor:'Whether to manually download this information?',
          yes:'Yes',
          cancel:'Cancel',
      },
      order:{
          dilapidation:'Повреждение',
          Takeaway:'Взять вручную',
          dilapidation:'Breakage',
          takeaway:'Manual removal',
          takeon:'The arrangement is complete',
      },
      searchOrder:{
        cageinformation:'Информация буфера',
        productionqueue:'Производственная очередь',
        outputglassID:'Выходное стекло ID',
        startposition:'Занять позиции',
        targetlocation:'Позиция цели',
        trips:'№ поезда',
        number:'Серийн номер',
        taskstatus:'Состояние задачи',
        filmenter:'Ожидание стеклянной вход',
        infilm:'В настоящее время',
        endtask:'Задача на конец',
        completetask:'Выполнение задания',
        intoglassid:'Входной стеклянный ID',
        line:'Линия',
        Usage:'Скорость использования',
        free:'Бесплатно (ячеек)',
        addcage:'Добавить информацию о буфере',
        glassIDa:'Стеклянный ID:',
        glassID:'Стеклянный ID',
        inglassID:'Введите стекло ID',
        pieceingrid:'Порядок расположения маленьких стеклянных пластин в клетке',
        pieceingrida:'Порядок расположения маленьких стеклянных пластин в клетке:',
        inpieceingrid:'Введите порядок расположения стеклянных листов в ячееке',
        cardnumber:'Номер карточки процесса',
        cardnumbera:'Номер карточки процесса:',
        incardnumber:'Введите номер процесса .',
        typeglass:'Тип стекла',
        typeglassa:'Тип стекла:',
        intypeglass:'Введите тип стекла',
        coatingtypes:'Типы покрытий',
        width:'Ширина',
        widtha:'Ширина:',
        inwidth:'Введите ширину',
        height:'Высота',
        heighta:'Высота:',
        inheight:'Введите высоту',
        thickness:'Толщина',
        thicknessa:'Толщина:',
        inthickness:'Введите толщину.',
        layoutID:'Чертеж ID загрузки печи для закалки',
        layoutIDa:'Чертеж ID загрузки печи для закалки:',
        inlayoutID:'Введите чертеж закалки ID',
        picturesequence:'Чертеж серийн номер загрузки печи для закалки',
        picturesequencea:'Чертеж серийн номер загрузки печи для закалки:',
        inpicturesequence:'Введите порядок чертежи закалки стекла.',
        startstatus:'Статус начала операции',
        startstatusa:'Статус начала операции:',
        instartstatus:'Введите состояние активации',
        glassgaps:'Стеклянный зазор',
        glassgapsa:'Стеклянный зазор:',
        inglassgaps:'Введите стекло зазор',
        sure:'подтверд',
        cancel:'Отмена',
        glassID:'Стеклянный ID',
        operate:'Операция',
        breakage:'Повреждение',
        delete:'Удал',
        outfilm:'Выпуск стекла',
        cagetableID:'ID буферной таблицы',
        cagenumber:'Буфер номера',
        gridnumber:'Ячеек сеткла',
        enable:'Начало',
        disable:'Отключ',
        remainingwidth:'Остаточная ширина',
        add:'Добавля',
        sheetID:'Закалка маленький стеклянный ID таблицы информации',
        processcards:'Карточка процесса',
        processcardtype:'Тип стекла карточки процесса',
        acceptshorizontal:'Умеренное принятие горизонтали',
        xcoordinates:'X-координаты',
        ycoordinates:'Y-координаты',
        rotationangle:'Угол вращения (против часовой стрелки)',
        state:'Состояние',
        takeout:'Взять',
        deletemessage:'Удалить эту информацию или нет?',
        prompt:'Подсказк',
        yes:'Да',
        accept:'Принять',
        noaccept:'Не принимать',
        filmcomplete:'Стекло готово',
        waiting:'Ждем.',
          searchlayout:'Non-tempered process card inquiry',
          fullfurnaces:'Number of full furnaces',
          specifiedproject:'The currently specified project',
          undesignate:'Undesignate',
          allnumber:'Total quantity',
          numbercages:'Number of cages',
          missingquantity:'Missing quantity',
          breakquantity:'Breakage/Take Away quantity',
          ceng:'layer',
          cageinformation:'Sorter information',
          productionqueue:'Production queue',
          outputglassID:'Output glass ID',
          startposition:'Start position',
          targetlocation:'Target Position',
          trips:'Train number',
          number:'Serial Number',
          taskstatus:'Task state',
          filmenter:'Waiting for input glass',
          infilm:'In progress',
          endtask:'End task',
          completetask:'Complete the task',
          intoglassid:'Input glass ID',
          line:'Wire',
          Usage:'Usage rate',
          free:'Free(pieces)',
          addcage:'Add information on sorter',
          glassIDa:'Glass ID:',
          glassID:'Glass ID',
          inglassID:'Please enter the glass ID',
          pieceingrid:'The order of small pieces within the grid',
          pieceingrida:'The order of small pieces within the grid:',
          inpieceingrid:'Please enter the order of small pieces within the grid',
          cardnumber:'Process card number',
          cardnumbera:'Process card number:',
          incardnumber:'Please enter the process card number',
          typeglass:'Glass type',
          typeglassa:'Glass type:',
          intypeglass:'Please enter the glass type',
          width:'Width',
          widtha:'Width:',
          inwidth:'Please enter width',
          height:'Height',
          heighta:'Height:',
          inheight:'Please enter height',
          coatingtypes:'Coating types',
          thickness:'Thickness',
          thicknessa:'Thickness:',
          inthickness:'Please enter the thickness',
          layoutID:'Drawing ID of loading for tempering furnace',
          layoutIDa:'Drawing ID of loading for tempering furnace:',
          inlayoutID:'Please enter the drawing ID of loading for tempering furnace',
          picturesequence:'Drawing sequence of loading for tempering furnace',
          picturesequencea:'Drawing sequence of loading for tempering furnace:',
          inpicturesequence:'Please enter the drawing sequence of loading for tempering furnace',
          startstatus:'Start status',
          startstatusa:'Start status:',
          instartstatus:'Please enter the enabled status',
          glassgaps:'Glass gap',
          glassgapsa:'Glass gap:',
          inglassgaps:'Please enter the glass gap',
          sure:'Confirm',
          cancel:'Cancel',
          operate:'Operate',
          breakage:'Breakage',
          delete:'Delete',
          outfilm:'Output glass',
          cagetableID:'Sorter table ID',
          cagenumber:'Sorter number',
          gridnumber:'Grid number',
          gridnumbera:'Grid number:',
          grid:'Please enter a grid number',
          enable:'Enabled',
          disable:'Disabled',
          remainingwidth:'Remaining width',
          add:'Add',
          sheetID:'Tempered small piece information table ID',
          processcards:'Process card',
          processcardtype:'Process card glass type',
          acceptshorizontal:'Does tempering accept horizontal placement',
          xcoordinates:'x coordinate',
          ycoordinates:'Y coordinate',
          rotationangle:'Rotation angle (counterclockwise)',
          state:'Status',
          takeout:'Take away',
          deletemessage:'Do you want to delete this message?',
          prompt:'Prompt',
          yes:'Yes',
          accept:'Accept',
          noaccept:'Not accept',
          filmcomplete:'Glass output completed',
          waiting:'Waiting',
          broke:'Is this information damaged?',
          brokeb:'Do you need to delete the message?',
          outfil:'Whether the film is released or not?',
          inputid:'Please enter the glass ID',
          search:'Search',
          tabid:'Dali film cage details table ID',
          tid:'Device ID',
          tida:'Device ID:',
          fin:'Whether or not the task was completed?',
          sureadd:'Confirm the addition',
          sureadda:'Whether to confirm the addition?',
          zailong:'In a cage',
          rengongxp:'Artificial filming',
          up:'Previous',
          down:'Next',
          now:'The current page is displayed',
          tit:'data',
          temperingqueries:'Tempering queries',
          specifytempering:'Specify a furnace',
          specifyengineerid:'Specify the project',
          projectnumber:'Project number',
          layoutnumber:'Drawing number of loading for tempering furnace',
          numberglasses:'Number of glasses',
          specifytemperinga:'Whether to specify the tempering of this information?',
          temperedswitch:'Tempered switch',
          dutyinformation:'Duty information',
          process:'Process',
          team:'Team',
          basic:'equipment',
          makesure:'Confirm the save',
          // cancel:'取消',
          temperingtotal:'Number of tempering furnaces:',
          glasstotal:'Total number of glasses:',
    },
    workOrder:{
        glassID: 'Glass ID',
@@ -206,6 +252,14 @@
        glasstype: 'Glass type',
        line: 'Wire',
        status: 'Status',
          time:'Time period',
          cway:'Please select a route',
          cstate:'Please select a status',
          edgingone:'Edging a line',
          edgingtwo:'Edging two lines',
          nedging:'Unedging',
          edging:'Edging',
          finedging:'has been edging',
    },
    processCard: {
        intofurnace: 'Entering the furnace',
@@ -231,32 +285,48 @@
        glassID: 'Glass ID',
    },
    reportWork:{
        lowerbit:'Станция разгрузки',
        shelfnumber:'Номер стойки регистрации',
        cardnumber:'Номер карточки процесса',
        totalquantity:'Общее количество',
        beendropped:'Количество стекла разгрузки',
        state:'Состояние',
        devicenumber:'Номер оборудования.',
        startstatus:'Статус начала операции',
        enable:'Начало',
        unenable:'Не начат',
        operate:'Операция',
        bindingshelves:'Назначенная стеллажка',
        clear:'Чисто.',
        workstation:'Станция номер',
        shelfnumber:'Номер стойки регистрации:',
        cardnumbera:'Номер карточки процесса:',
        incardnumber:'Пожалуйста, выберите номер программы',
        clearglass:'Очистить стекло с полки',
        sure:'подтверд',
        cancel:'Отмена',
        glassinformation:'Информация стекла',
        glassID:'Стеклянный ID',
        coatingtypes:'Типы покрытий',
        thickness:'Толщина',
        width:'Ширина',
        height:'Высота',
          details:'Drop off details',
          filming:'Artificial filming',
          printing:'Automatic printing',
          cenumber:'Number of layers',
          artificialorder:'The number of pieces under artificial order',
          processcard:'Print the process card',
          printlabels:'Print labels',
          information:'Landing information',
          cstation:'Please select a desk',
          all:'all',
          timeperiod:'Time period',
          stationnumber:'Station number',
          order:'order',
          filminformation:'Manual film information',
          glassmation:'Artificial film current glass information',
          barcodescanner:'The current glass information of the barcode scanner',
          lowerbit:'Unloading station',
          shelfnumber:'Rack number',
          cardnumber:'Process card number',
          totalquantity:'Total quantity',
          beendropped:'Quantity of unloaded glass',
          state:'Status',
          devicenumber:'Equipment No.',
          startstatus:'Start status',
          enable:'Start',
          unenable:'Unstart',
          operate:'Operate',
          bindingshelves:'Assigned rack',
          clear:'Clear',
          workstation:'Station No.',
          shelfnumbera:'Rack number:',
          cardnumbera:'Process card number:',
          incardnumber:'Please select the process card number',
          clearglass:'Clear the glass on the shelf',
          sure:'Operate',
          cancel:'Cancel',
          glassinformation:'Glass information',
          glassID:'Glass ID',
          coatingtypes:'Coating types',
          thickness:'Thickness',
          width:'Width',
          height:'Height',
    },
    productStock: {
UI-Project/src/lang/py.js
@@ -105,6 +105,15 @@
    },
    searchOrder: {
        searchlayout:'Запрос нетемперированной технологической карты',
        fullfurnaces:'Количество полных печей',
        specifiedproject:'Указанный в данный момент проект',
        undesignate:'Без обозначения',
        allnumber:'Общее количество',
        numbercages:'Количество сепараторов',
        missingquantity:'Недостающее количество',
        breakquantity:'Количество Поломка/Вынос',
        ceng:'слой',
        cageinformation: 'Информация буфера',
        productionqueue: 'Производственная очередь',
        outputglassID: 'Выходное стекло ID',
@@ -202,6 +211,14 @@
        takemessage: 'Следует ли удалять сообщение?',
        breakage: 'Повреждение',
        takeout: 'Взять',
        time:'Период времени',
        cway:'Пожалуйста, выберите маршрут',
        cstate:'Пожалуйста, выберите статус',
        edgingone:'Окантовка линии',
        edgingtwo:'Окантовка двух линий',
        nedging:'Окантовка',
        edging:'Край',
        finedging:'был окантовочным',
    },
    processCard: {
        intofurnace: 'В печь',
@@ -209,6 +226,22 @@
        outfurnace: 'Окончено стекло из печи для закалки',
    },
    reportWork: {
        details:'Сведения о сдаче',
        filming:'Искусственная съемка',
        printing:'Автоматическая печать',
        cenumber:'Количество слоев',
        artificialorder:'Количество штук при искусственном заказе',
        processcard:'Печать технологической карты',
        printlabels:'Печать этикеток',
        information:'Информация о посадке',
        cstation:'Пожалуйста, выберите стол',
        all:'все',
        timeperiod:'Период времени',
        stationnumber:'Номер станции',
        order:'порядок',
        filminformation:'Информация о пленке вручную',
        glassmation:'Искусственная пленка актуальная информация о стекле',
        barcodescanner:'Актуальная информация о стекле сканера штрих-кода',
        lowerbit: 'Станция разгрузки',
        shelfnumber: 'Номер стойки регистрации',
        cardnumber: 'Номер карточки процесса',
UI-Project/src/lang/zh.js
@@ -108,6 +108,15 @@
        takeon:'摆片完成',
    },
    searchOrder:{
        searchlayout:'非钢化流程卡查询',
        fullfurnaces:'满炉数量',
        specifiedproject:'当前指定工程',
        undesignate:'取消指定',
        allnumber:'总数量',
        numbercages:'笼子内数量',
        missingquantity:'缺少数量',
        breakquantity:'破损/拿走数量',
        ceng:'层',
        cageinformation:'理片笼信息',
        productionqueue:'出片队列',
        outputglassID:'出片玻璃ID',
@@ -245,6 +254,14 @@
        glasstype:'玻璃类型',
        line:'线路',
        status:'状态',
        time:'时间段',
        cway:'请选择线路',
        cstate:'请选择状态',
        edgingone:'磨边一线',
        edgingtwo:'磨边二线',
        nedging:'未磨边',
        edging:'磨边中',
        finedging:'已磨边',
    },
    processCard:{
        intofurnace:'进炉中',
@@ -270,6 +287,22 @@
        glassID:'玻璃ID',
    },
    reportWork:{
        details:'落架详情',
        filming:'人工下片',
        printing:'自动打印',
        cenumber:'层数',
        artificialorder:'人工下片数',
        processcard:'打印流程卡',
        printlabels:'打印标签',
        information:'落架信息',
        cstation:'请选择工位',
        all:'全部',
        timeperiod:'时间段',
        stationnumber:'工位号',
        order:'顺序',
        filminformation:'人工下片信息',
        glassmation:'人工下片当前玻璃信息',
        barcodescanner:'扫码枪当前玻璃信息',
        lowerbit:'下片位',
        shelfnumber:'架号',
        cardnumber:'流程卡号',
@@ -572,4 +605,24 @@
        inquire :'查询',
        station :'工位',
    },
    Mounting:{
        previewproject :'选择预览工程',
        loadinglinea :'上片线',
        loadingline :'上片线:',
        inloadingline :'请选择上片线',
        oneloadingline :'一号上片线',
        twoloadingline :'二号上片线',
        waiting :'等待中',
        setparameters :'设置参数',
        project :'工程号',
        projecta :'工程号:',
        width :'原片宽',
        height :'原片高',
        thickness :'原片厚',
        projectnumber :'工程原片序号',
        state :'状态',
        createtime :'创建时间',
        all :'全选',
    }
}
UI-Project/src/router/index.js
@@ -3,7 +3,6 @@
// import User from '../views/sys/User.vue'
// import Role from '../views/sys/Role.vue'
// import Menu from '../views/sys/Menu.vue'
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
@@ -17,6 +16,11 @@
      path: '/login',
      name: 'login',
      component: () => import('../views/LoginView.vue')
    },
    {
      path: '/new-page', // 新增的无需登录的页面
      name: 'newPage',
      component: () => import('../views/NewPage.vue')
    },
    {
      path: '/main',
@@ -68,13 +72,18 @@
        /*----------- 上片机 ----------------*/
      {
        path: 'Returns',
        name: 'Returns',
        component: () => import('../views/Returns/returns.vue'),
        name: 'return',
        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')
          },
        ]
      },
@@ -302,7 +311,7 @@
        },
        {
          path: '',
          redirect: '/returns/returns'
          redirect: '/Returns/returns'
        }
      ]
    },
@@ -315,4 +324,13 @@
  ]
})
// 导航守卫
router.beforeEach((to, from, next) => {
  const isAuthenticated = !!localStorage.getItem('authToken'); // 假设这是你的登录状态检查逻辑
  if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
    next({ name: 'login' }); // 如果需要登录但未登录,则重定向到登录页面
  } else {
    next(); // 否则继续导航
  }
});
export default router
UI-Project/src/views/NewPage.vue
New file
@@ -0,0 +1,151 @@
<template>
  <div>
<div style="display: flex;">
  <div style="margin-left: 50px;margin-top: 15px;font-size:large">工程号:</div>
<el-input v-model="current" style="margin-left: 20px;margin-top: 15px;width: 240px" placeholder="请输入工程号" @input="updateUrl"/>
    <el-button style="margin-top: 15px;margin-left: 15px;"  type="primary" @click="fetchData">查询</el-button>
  </div>
  <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;margin-right: 10px;width: 1850px;" height="900" v-loading="loading">
  <div v-for="(row, rowIndex) in divsData" :key="rowIndex" class="row">
      <div v-for="(rect, colIndex) in row" :key="colIndex" class="div-container">
  <el-scrollbar height="430px" width="900px" style="background-color: #e9e9eb;">
  <div  style="position: relative;width: 100%;height: 100%;">
    <div
      v-for="(rect, index) in getAdjustedRectsForRow(rowIndex)"
    :key="index"
    class="rect"
    :style="{ position: 'absolute',
     top: `${rect.y_axis}px`,
     left: `${rect.x_axis}px`,
     width: `${rect.width}px`,
       height: `${rect.height}px`,
      backgroundColor:  '#911005'}">
   <div  class="centered-text">
  <div style="font-size: 15px;font-weight: bold;">{{ rect.process_id }}</div>
  <div style="font-size: 15px;font-weight: bold;">{{ rect.project_no }}</div>
  <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div>
</div>
</div>
 </div>
 </el-scrollbar>
 </div>
 </div>
 </el-card>
</div>
</template>
   <script setup>
   import { ref, onMounted, watch, watchEffect } from 'vue';
   import { useRoute, useRouter } from 'vue-router';
   import request from "@/utils/request"
   const route = useRoute();
   const router = useRouter();
   const current = ref(route.query.current || '');
   const adjustedRects = ref([]);
   const loading = ref(false);
   const adjustedRectsPerRow = ref([]);
   const divsData = ref([]);
   const rawData = ref([]);
   onMounted(() => {
     if (route.query.current) {
       current.value = route.query.current;
       console.log(current.value);
       window.localStorage.setItem('current', current.value)
     }
   });
   onMounted(async () => {
       try {
         let current = window.localStorage.getItem('current')
           const response = await request.post(`/cacheGlass/taskCache/temperingTerritory?current=${current}`);
         if (response.code === 200) {
           rawData.value = response.data;
                 console.log(rawData.value);
                 processData(rawData.value);
         } else {
          //  ElMessage.warning(res.msg)
         }
       } catch (error) {
         // console.error('Error fetching rects :', error);
       }
     });
   watch(
     current,
     (newVal) => {
       router.replace({ query: { current: newVal } });
     },
     { immediate: true } // 使用 immediate: true 来确保在组件挂载时立即执行一次 watch 回调
   );
   const fetchData = async () => {
     try {
       const response = await request.post(`/cacheGlass/taskCache/temperingTerritory?current=${current.value}`);
       if (response.code === 200) {
          rawData.value = response.data;
          console.log(rawData.value);
          processData(rawData.value);
  }
} catch (error) {
  console.error('Failed to fetch data:', error);
} finally {
  loading.value = false;
}
};
   function processData(data) {
const groupedData = [];
for (let i = 0; i < data.length; i += 2) {
  groupedData.push(data.slice(i, i + 2));
}
divsData.value = groupedData;
adjustedRectsPerRow.value = divsData.value.map(() => []);
divsData.value.forEach((row, rowIndex) => {
  const rawRowData = rawData.value[rowIndex];
  if (rawRowData) {
adjustedRectsPerRow.value[rowIndex] = rawRowData.map(rect => {
      let adjustedWidth, adjustedHeight,newX;
      if (rect.rotate_angle  === 0) {
       newX = rect.olHeight -(rect.y_axis + rect.height);
       adjustedWidth = rect.height * (900/rect.olHeight);
       adjustedHeight = rect.width * (430/rect.olWidth);
      } else {
        newX = rect.olHeight -(rect.y_axis + rect.width);
       adjustedWidth = rect.width * (900/rect.olHeight);
       adjustedHeight = rect.height * (430/rect.olWidth);
      }
      // 该页面为顺时针旋转90度
      let adjustedRect = {
        ...rect,
        // x_axis: rect.y_axis * (959.35/rect.olHeight),
        y_axis: rect.x_axis * (430/rect.olWidth),
        x_axis: newX * (900/rect.olHeight),
        // y_axis: rect.x_axis * (430/rect.olWidth),
        width: adjustedWidth,
        height: adjustedHeight,
        widtha: rect.width,
        heighta: rect.height,
      };
      return adjustedRect;
    });
  }
});
}
// 方法用于获取当前行的adjustedRects
function getAdjustedRectsForRow(rowIndex) {
return adjustedRectsPerRow.value[rowIndex] || [];
}
   </script>
<style scoped>
.row {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
.div-container {
width: 900px;
float: left;
background-color: #f4f4f5;
height: 430px;
box-sizing: border-box;
}
</style>
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -790,7 +790,7 @@
<div style="width: 49%;float: right;background-color: #f4f4f5;height: 430px;">
    <div v-if="adjustedRects1.length > 0">
      <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplay }}-{{ adjustedRects[0].temperingLayoutId }}</div>   -->
    <div style="text-align: center;"> 炉号:{{ adjustedRects1[0].engineerId }}-{{ adjustedRects1[0].temperingLayoutId }} </div>
    <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ adjustedRects1[0].engineerId }}-{{ adjustedRects1[0].temperingLayoutId }} </div>
    <el-scrollbar height="430px" style="background-color: #e9e9eb;">
    <div  style="position: relative;max-width: 1400px;">  
      <div  
@@ -816,7 +816,7 @@
  </div>
<div style="width: 50%;float: left;background-color: #f4f4f5;height: 430px;">
    <div v-if="adjustedRects2.length > 0">
    <div style="text-align: center;"> 炉号:{{ adjustedRects2[0].engineerId }}-{{ adjustedRects2[0].temperingLayoutId }} </div>
    <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ adjustedRects2[0].engineerId }}-{{ adjustedRects2[0].temperingLayoutId }} </div>
    <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplay2 }}-{{ adjustedRects[0].temperingLayoutId }}</div>   -->
    <el-scrollbar height="430px" style="background-color: #e9e9eb;">
    <div  style="position: relative;max-width: 1400px;">  
@@ -847,7 +847,7 @@
  <!-- 进炉前 -->
  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;" v-loading="loading">
    <div v-if="adjustedRectsa.length > 0">
    <div style="text-align: center;"> 炉号:{{ adjustedRectsa[0].engineerId }}-{{ adjustedRectsa[0].temperingLayoutId }} </div>
    <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ adjustedRectsa[0].engineerId }}-{{ adjustedRectsa[0].temperingLayoutId }} </div>
    <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplaya }}-{{ adjustedRects[0].temperingLayoutId }}</div>   -->
      <el-scrollbar height="750px" style="background-color: #e9e9eb;">
    <div  style="position: relative;max-width: 1400px;">  
@@ -874,7 +874,7 @@
  <!-- 已出炉 -->
  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;" v-loading="loading">
      <div v-if="adjustedRectsb.length > 0">
    <div style="text-align: center;"> 炉号:{{ adjustedRectsb[0].engineerId }}-{{ adjustedRectsb[0].temperingLayoutId }} </div>
    <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ adjustedRectsb[0].engineerId }}-{{ adjustedRectsb[0].temperingLayoutId }} </div>
    <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplayb }}-{{ adjustedRects[0].temperingLayoutId }}</div>   -->
      <el-scrollbar height="750px" style="background-color: #e9e9eb;">
    <div  style="position: relative;max-width: 1400px;">  
UI-Project/src/views/Returns/return.vue
New file
@@ -0,0 +1,49 @@
<script setup>
import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue"
import {useRouter} from "vue-router";
let indexFlag=$ref(1)
function changeRouter(index){
  indexFlag=index
}
</script>
<template>
  <!-- <div id="main-div"> -->
    <div id="main-body">
      <router-view  />
    </div>
  <!-- </div> -->
</template>
<style scoped>
#main-div{
  width: 100%;
  height: 100%;
}
#div-title{
  height: 2%;
  width: 100%;
}
#searchButton{
  margin-top: -5px;
  margin-left: 1rem;
}
/* #searchButton1{
//margin-left: 10rem;
} */
/*main-body样式*/
#main-body{
  width: 100%;
  height: 95%;
  /* margin-top: 1%; */
}
#select{
  margin-left:0.5rem;
}
:deep(.indexTag .el-breadcrumb__inner){
  color: #5CADFE !important;
}
</style>
UI-Project/src/views/Returns/returns.vue
UI-Project/src/views/Returns/upreturns.vue
New file
@@ -0,0 +1,538 @@
<script lang="ts" setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import type { TableColumnCtx } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
import { WebSocketHost ,host} from '@/utils/constants'
import request from "@/utils/request"
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import { ref, onMounted, onUnmounted, onBeforeUnmount } from "vue";
const selectValuesa = reactive([]);
const selectedProjectNo = ref(''); // 当前选中的工程号
const loadingline = ref(''); // 当前选中的上片线
const dialogFormVisible = ref(false)
const blind = ref(false)
const blinda = ref(false)
const blindb = ref(false)
const add = ref(false)
const adda = ref(false)
const dialoglea = ref(false)
const tableDatax = ref([])
const user = ref('');
const projectNo = ref('');
const workstationId = ref('');
const id = ref('');
const patternHeight = ref('');
const patternWidth = ref('');
const filmsId = ref('');
const patternThickness = ref('');
const number = ref('');
const canSelectProject = ref(true);
const canStartLoading = ref(false);
const selectedValue = ref(''); // 当前选中的宽
const selectedValuea = ref('');
const selectedValueb = ref('');
const selectedValuec = ref('');
// const upstatus = ref('上片机手动状态:'); // 假设这个用于显示自动/手动状态
const upstatus = ref(t('basicData.machineaa'));
const cuttingMachine = ref(''); // 假设这个用于存储后端返回的状态值(0或1)
const cuttingMachineStatusColor = ref('#911005'); // 用于动态设置i标签的背景色
const inKageWord = ref(0); // 用于存储要传递给接口的inKageWord值
const options = ref<any[]>([]); // 下拉选项列表
const ida = ref(null);
const selectOptions = ref<Array<any>>([]); // 下拉选选项数组
const selectOptionsa = ref<Array<any>>([]); // 下拉选选项数组
const selectOptionsb = ref<Array<any>>([]); // 下拉选选项数组
const selectOptionsc = ref<Array<any>>([]); // 下拉选选项数组
  const tableDataa = ref([])
  const tableData = reactive([]);
const handlezhiban = () => {
  dialoglea.value = true; // 打开绑定架子对话框
};
const selectproject = () => {
  dialogFormVisible.value = true;
};
onMounted(() => {
  // socket = initializeWebSocket(socketUrl, handleMessage);
});
  onUnmounted(() => {
    if (socket) {
    closeWebSocket(socket);
    }
    });
//定义接收加载表头下拉数据
const titleSelectJson = ref({
  processType: [],
})
const titleSelectJsona = ref({
  processTypea: [],
})
let socket = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
// 定义消息处理函数,更新 receivedData 变量
const requestData = {
  state: 100
};
onBeforeUnmount(() => {
  closeWebSocket();
});
// 添加
const handleBindRack = (row) => {
  workstationId.value = row.workstationId; // 假设rackNumber是架号字段的属性名
  ida.value = row.id;
  add.value = true; // 打开绑定架子对话框
};
// 暂停
const handlea = async () => {
  try  {
  let engineeringId = window.localStorage.getItem('engineeringId')
console.log(engineeringId);
if (engineeringId !== '') {
  const response = await request.post('/loadGlass/engineering/engineering/pauseTask', {
      engineeringId: engineeringId,
      state: 0,
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      blinda.value = false;
      // tableData.splice([]);
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
    }
  }
    else  {
      ElMessage({
        type: 'info',
        message: t('basicData.infonull'),
      })
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
function getStatusText(state: number) {
  switch (state) {
    case 0:
      return t('basicData.waiting');
    case 1:
      return t('basicData.up');
    case 2:
    return t('basicData.up');
    case 100:
    return t('basicData.finish');
  }
}
function getStatusType(state: number) {
  switch (state) {
    case 0:
      return 'warning';
    case 1:
      return 'primary';
    case 2:
      return 'primary';
    case 100:
      return 'success';
  }
}
// 开始上片
const handleBind = (row) => {
  blind.value = true; // 打开绑定架子对话框
};
// 暂停
const handleBinda = (row) => {
  blinda.value = true;
};
// 停止任务
const handleBindb = (row) => {
  blindb.value = true;
};
// 删除
const handleBindRacka = (row) => {
  workstationId.value = row.workstationId;
  adda.value = true;
};
const toggleEnableState = async (row: any) => {
  // 检查 id 是否为空
  if (!row.id) {
    ElMessage.error(t('basicData.updatanull'));
    return; // 如果 id 为空,则不执行后续操作
  }
  const newState = row.state === 100 ? 0 : 100;
  try {
    // 发送请求到后端更新状态
    const response = await request.post('/loadGlass/up-patten-usage/updateGlassState', { id: row.id, state: newState });
    if (response.code === 200) {
      ElMessage.success(response.message);
      row.state = newState;
    } else {
      ElMessage.error(response.message);
    }
  } catch (error) {
    // 处理请求错误
    ElMessage.error(t('basicData.glassnull'));
  }
};
</script>
<template>
  <div>
    <div id="dotClass">
      <div>{{ $t('basicData.laserprinting') }}</div>
    <i :style="{ marginTop: '2px', backgroundColor: markingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
    <el-button @click="confirmMarkingMachine" style="margin-left: 30px;margin-top: -3px;">{{ $t('basicData.yes') }}</el-button>
    <div style="margin-left: 70px;">{{ $t('basicData.cuttingmachine') }}</div>
    <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
    <el-button @click="confirmCuttingMachine" style="margin-left: 30px;margin-top: -3px;" >{{ $t('basicData.yes') }}</el-button>
    <div style="margin-left: 70px;">{{ upstatus  }} </div>
    <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatusColor, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
    <el-button @click="confirmCutting" style="margin-left: 30px;margin-top: -3px;" >{{ $t('basicData.change') }}</el-button>
  </div>
    <el-button style="margin-top: 5px;margin-left: 15px;"  type="primary" @click="selectproject">{{ $t('Mounting.previewproject') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" type="success" @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
    <el-select v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.loadinglinea')" style="margin-top: 5px;margin-left: 20px;" >
      <el-option :label="$t('Mounting.all')" value="0"></el-option>
      <el-option :label="$t('Mounting.oneloadingline')" value="1"></el-option>
      <el-option :label="$t('Mounting.twoloadingline')" value="2"></el-option>
    </el-select>
    <el-select v-model="selectValuesa[0]" clearable :placeholder="$t('film.taskstatus')" style="margin-top: 5px;margin-left: 20px;" >
      <el-option :label="$t('Mounting.waiting')" value="1"></el-option>
      <el-option :label="$t('film.execution')" value="2"></el-option>
      <el-option :label="$t('film.finish')" value="3"></el-option>
    </el-select>
    <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('Mounting.setparameters') }}</el-button>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
    <el-table
    height="350"
     ref="table"
     :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
      :data="tableData"
    >
      <el-table-column prop="layoutSequence" :label="$t('Mounting.project')" width="100" align="center"/>
      <el-table-column prop="engineeringId" :label="$t('Mounting.width')" width="200" align="center"/>
      <el-table-column prop="width" :label="$t('Mounting.height')" align="center"/>
      <el-table-column prop="height" :label="$t('Mounting.thickness')" align="center"/>
      <el-table-column prop="filmsId" :label="$t('Mounting.loadinglinea')" align="center"/>
      <el-table-column :label="$t('Mounting.projectnumber')" align="center">
      <template #default="{ row }">
        <!-- 这里总是显示 1 -->
        <span>{{ 1 }}</span>
      </template>
    </el-table-column>
      <el-table-column
          align="center"
            :label="$t('Mounting.state')"
            min-width="80"
            prop="state"
          >
          <template #default="scope">
          <el-tag
            :type="scope.row.state === 100 ? 'success' : 'warning'"
            @click="toggleEnableState(scope.row)"
          >
            {{ scope.row.state === 100 ? $t('Mounting.pass') : $t('Mounting.waiting') }}
          </el-tag>
        </template>
          </el-table-column>
      <el-table-column prop="filmsId" :label="$t('Mounting.createtime')" align="center"/>
    </el-table>
      </div>
    </el-card>
    <div style="display: flex;">
  <div style="width: 49%;float: left;">
    <div style="display: flex;">
        <img src="../../assets/shangpianji.png" alt="" style="max-width: 25%;max-height: 25%;margin-left: 10%;margin-top: 5%;">
        <el-table :data="tableDataa" border style="width: 75%;margin-top: 10%;margin-left: 2%;"
     :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
        >
          <el-table-column prop="workstationId" align="center" :label="$t('basicData.station')" min-width="60" />
          <el-table-column prop="patternWidth" align="center" :label="$t('basicData.width')" min-width="80" />
          <el-table-column prop="patternHeight" align="center" :label="$t('basicData.height')" min-width="80" />
          <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80" />
          <el-table-column prop="number" align="center" :label="$t('basicData.quantity')" min-width="80" />
        </el-table>
    </div>
  </div>
    <div style="width: 48%;float: right;">
      <div style="display: flex;">
        <img src="../../assets/shangpianji.png" alt="" style="max-width: 25%;max-height: 25%;margin-left: 10%;margin-top: 5%;">
        <el-table :data="tableDataa" border style="width: 75%;margin-top: 10%;margin-left: 2%;"
     :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
        >
          <el-table-column prop="workstationId" align="center" :label="$t('basicData.station')" min-width="60" />
          <el-table-column prop="patternWidth" align="center" :label="$t('basicData.width')" min-width="80" />
          <el-table-column prop="patternHeight" align="center" :label="$t('basicData.height')" min-width="80" />
          <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80" />
          <el-table-column prop="number" align="center" :label="$t('basicData.quantity')" min-width="80" />
        </el-table>
    </div>
</div>
</div>
  <el-dialog v-model="blind" top="30vh" width="25%" :title="$t('basicData.startfilm')">
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handle">
          {{ $t('basicData.confirm') }}
        </el-button>
        <el-button @click="blind = false">{{ $t('basicData.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
<el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')">
    <el-table  ref="table" style="margin-top: 20px;height: 300px;"
        :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')"/>
          <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')" />
          <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')">
        <template #default="{ row }">
          <el-input v-model="row.teamsGroupsName" autocomplete="off" min-width="150"/>
        </template>
      </el-table-column>
          <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')">
            <template #default="{ row }">
          <el-input v-model="row.deviceName" autocomplete="off" min-width="150"/>
        </template>
        </el-table-column>
        </el-table>
        <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleConfirm">
          {{ $t('searchOrder.add') }}
        </el-button>
        <el-button @click="dialoglea = false">{{ $t('searchOrder.cancel') }}</el-button>
      </div>
    </template>
</el-dialog>
  <el-dialog v-model="blinda" top="24vh" width="30%" :title="$t('basicData.whetherpause')">
    <div style="margin-left: 50px;margin-bottom: 10px;">
    <el-form-item :label="$t('Mounting.loadingline')" :required="true">
    <el-select v-model="loadingline" clearable :placeholder="$t('Mounting.inloadingline')" style="margin-left: 20px;" >
      <el-option :label="$t('Mounting.all')" value="0"></el-option>
      <el-option :label="$t('Mounting.oneloadingline')" value="1"></el-option>
      <el-option :label="$t('Mounting.twoloadingline')" value="2"></el-option>
    </el-select>
    </el-form-item>
    </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleup">
          {{ $t('basicData.confirm') }}
        </el-button>
        <el-button @click="blinda = false">{{ $t('basicData.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="add" top="23vh" width="45%" :title="$t('basicData.addglass')" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form label-width="70px" label-position="right">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item :label="$t('basicData.widtha')" :required="true" style="width: 14vw">
               <el-select
                      v-model="selectedValue"
                      filterable
                      clearable
                      :placeholder="$t('basicData.selectwidth')"
                      style="width: 220px"
                      @input="handleInputChangea"
                    >
                 <el-option
                    v-for="item in selectOptions"
                    :key="item.id"
                    :label="item.label"
                    :value="item.value"
                 />
               </el-select>
              </el-form-item>
              </div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('basicData.heighta')" :required="true" style="width: 14vw">
            <el-select
                      v-model="selectedValuea"
                      filterable
                      clearable
                      :placeholder="$t('basicData.selectheight')"
                      style="width: 220px"
                      @input="handleInputChangea"
                    >
                 <el-option
                    v-for="item in selectOptionsa"
                    :key="item.id"
                    :label="item.label"
                    :value="item.value"
                 />
               </el-select>
              </el-form-item></div>
              </div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item :label="$t('basicData.coatingtypesa')"  :required="true" style="width: 14vw;">
                <el-select
                      v-model="selectedValueb"
                      filterable
                      clearable
                      :placeholder="$t('basicData.selectcoatingtypes')"
                      style="width: 220px"
                      @input="handleInputChangea"
                    >
                 <el-option
                    v-for="item in selectOptionsb"
                    :key="item.id"
                    :label="item.label"
                    :value="item.value"
                 />
               </el-select>
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item :label="$t('basicData.thicknessa')" :required="true" style="width: 14vw">
                <el-select
                      v-model="selectedValuec"
                      filterable
                      clearable
                      :placeholder="$t('basicData.selectthickness')"
                      style="width: 220px"
                      @input="handleInputChangea"
                    >
                 <el-option
                    v-for="item in selectOptionsc"
                    :key="item.id"
                    :label="item.label"
                    :value="item.value"
                 />
               </el-select>
                <!-- <el-input v-model="patternThickness" autocomplete="off" /> -->
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item :label="$t('basicData.quantitya')" :required="true" style="width: 14vw;">
                <el-input :placeholder="$t('basicData.selectquantity')" v-model="number" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleConfirm">
          {{ $t('basicData.confirm') }}
        </el-button>
        <el-button @click="add = false">{{ $t('basicData.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="adda" top="30vh" width="25%" :title="$t('basicData.deletemessage')">
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleConfirma">
          {{ $t('basicData.confirm') }}
        </el-button>
        <el-button @click="adda = false">{{ $t('basicData.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
        </div>
  <el-dialog v-model="dialogFormVisible" top="24vh" width="50%"  >
    <div class="flex-container" style="margin-left: 50px;margin-bottom: 10px;">
    <el-form-item :label="$t('Mounting.loadingline')" :required="true">
    <el-select v-model="loadingline" clearable :placeholder="$t('Mounting.inloadingline')"  >
      <el-option :label="$t('Mounting.oneloadingline')" value="1"></el-option>
      <el-option :label="$t('Mounting.twoloadingline')" value="2"></el-option>
    </el-select>
              </el-form-item>
      <el-form-item :label="$t('Mounting.projecta')" :required="true">
        <el-select
           v-model="selectedProjectNo"
           filterable
           clearable
           :placeholder="$t('basicData.plselectproject')"
           style="width: 220px"
           @input="handleInputChange"
         >
      <el-option
         v-for="item in titleSelectJson['processType']"
         :key="item.id"
         :label="item.projectNo"
         :value="item.projectNo"
      />
    </el-select>
              </el-form-item>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleup">
          {{ $t('basicData.confirm') }}
        </el-button>
        <el-button @click="dialogFormVisible = false">{{ $t('basicData.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
</template>
<style scoped>
 .flex-container {
  display: flex;
  align-items: center; /* 垂直居中 */
}
.flex-container .el-form-item {
  flex: 1; /* 使每个表单项占据相等的空间 */
  margin-right: 0; /* 移除默认的右侧边距 */
}
.flex-container .el-form-item:last-child {
  margin-left: 20px; /* 为第二个表单项添加左侧边距 */
}
#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;
}
#dotClass {
  display: flex;
  margin-left: 20px;
  size: 50px;
  margin-top: 20px;
  margin-bottom: 10px;
}
</style>
UI-Project/src/views/Slicecage/slicecage.vue
@@ -886,7 +886,7 @@
    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="success" @click="dialogFormVisibleb = true">{{ $t('searchOrder.productionqueue') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="warning" @click="handleganghua">{{ $t('searchOrder.temperingqueries') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="info" @click="dialogFormVisibles=true;fetchFlows()">非钢化流程卡查询</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="info" @click="dialogFormVisibles=true;fetchFlows()">{{ $t('searchOrder.searchlayout') }}</el-button>
    <el-switch style="margin-top: 5px;margin-left: 10px;" v-model="ganghua" class="mb-2" :inactive-text="$t('searchOrder.temperedswitch')" @change="handleChange" />
    <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;">
@@ -1533,21 +1533,21 @@
          </el-col>
          <el-col :span="4">
              <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('满炉数量')"  style="width: 14vw">
              <el-form-item :label="$t('searchOrder.fullfurnaces')" style="width: 14vw">
                {{ fulltotals }}
              </el-form-item>
              </div>
          </el-col>
          <el-col :span="4">
              <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('当前指定工程')"  style="width: 14vw">
              <el-form-item :label="$t('searchOrder.specifiedproject')" style="width: 14vw">
                {{ temperingengineerId }}
              </el-form-item>
              </div>
          </el-col>
          <el-col :span="4">
              <div id="dt" style="font-size: 15px;">
                <el-button size="mini" type="text" plain @click="broked()">{{ $t('取消指定') }}</el-button>
                <el-button size="mini" type="text" plain @click="broked()">{{ $t('searchOrder.undesignate') }}</el-button>
              </div>
          </el-col>
        </el-row>
@@ -1557,10 +1557,10 @@
        :data="tableDatagh" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="engineer_id" fixed align="center" :label="$t('searchOrder.projectnumber')" min-width="150"/>
          <el-table-column prop="tempering_layout_id" fixed align="center" :label="$t('searchOrder.layoutnumber')" min-width="120" />
          <el-table-column prop="count2" align="center" :label="$t('总数量')" min-width="150" />
          <el-table-column prop="count1" align="center" :label="$t('笼子内数量')" min-width="150" />
          <el-table-column prop="count3" align="center" :label="$t('缺少数量')" min-width="150" />
          <el-table-column prop="count4" align="center" :label="$t('破损/拿走数量')" min-width="150" />
          <el-table-column prop="count2" align="center" :label="$t('searchOrder.allnumber')" min-width="150" />
          <el-table-column prop="count1" align="center" :label="$t('searchOrder.numbercages')" min-width="150" />
          <el-table-column prop="count3" align="center" :label="$t('searchOrder.missingquantity')" min-width="150" />
          <el-table-column prop="count4" align="center" :label="$t('searchOrder.breakquantity')" min-width="150" />
          <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="250">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="brokee(scope.row,1)">{{ $t('searchOrder.specifytempering') }}</el-button>
@@ -1599,7 +1599,7 @@
    <el-table  ref="table" style="margin-top: 20px;height: 500px;"
        :data="tableDatas" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="flow_card_id" fixed align="center" :label="$t('searchOrder.processcards')"/>
          <el-table-column prop="layer" align="center" label="层" />
          <el-table-column prop="layer" align="center" :label="$t('searchOrder.ceng')" />
          <el-table-column prop="count" align="center" :label="$t('searchOrder.numberglasses')" />
          <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" >
            <template #default="scope">
UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -155,20 +155,20 @@
<template>
  <div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('请选择线路')" clearable style="margin-left: 20px;margin-bottom: 10px;">
            <el-option label="磨边一线" value="2001"></el-option>
            <el-option label="磨边二线" value="2002"></el-option>
      <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('workOrder.cway')" clearable style="margin-left: 20px;margin-bottom: 10px;">
            <el-option :label="$t('workOrder.edgingone')" value="2001"></el-option>
            <el-option :label="$t('workOrder.edgingtwo')" value="2002"></el-option>
          </el-select>
          <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('请选择状态')" clearable style="margin-left: 20px;margin-bottom: 10px;" >
            <el-option label="未磨边" value="0"></el-option>
            <el-option label="磨边中" value="1"></el-option>
            <el-option label="已磨边" value="2"></el-option>
          <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('workOrder.cstate')" clearable style="margin-left: 20px;margin-bottom: 10px;" >
            <el-option :label="$t('workOrder.nedging')" value="0"></el-option>
            <el-option :label="$t('workOrder.edging')" value="1"></el-option>
            <el-option :label="$t('workOrder.finedging')" value="2"></el-option>
          </el-select>
          <span class="demonstration" style="margin-left: 20px;margin-bottom: 10px;">时间段</span>
            <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" start-placeholder="开始日期"  style="margin-left: 20px;margin-bottom: 10px;" value-format = "YYYY-MM-DD hh:mm:ss"
          <span class="demonstration" style="margin-left: 20px;margin-bottom: 10px;">{{ $t('workOrder.time') }}</span>
            <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" :start-placeholder="$t('reportmanage.starttime')"  style="margin-left: 20px;margin-bottom: 10px;" value-format = "YYYY-MM-DD hh:mm:ss"
            
              end-placeholder="结束日期">
              :end-placeholder="$t('reportmanage.endtime')">
            </el-date-picker>
          <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="setEdgGlassInfoRequest()">{{
        $t('reportmanage.inquire')
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -446,13 +446,13 @@
<template>
  <div>
    <el-button style="margin-top: 10px;margin-left: 10px;margin-bottom: 10px;" id="searchButton" type="primary"
      @click="dialogFormVisibleaDownGlass = true">落架详情
      @click="dialogFormVisibleaDownGlass = true">{{ $t('reportWork.details') }}
    </el-button>
    <el-button style="margin-top: 10px;margin-left: 10px;margin-bottom: 10px;" id="searchButton" type="primary"
      @click="dialogFormVisibleaDownGlasss = true">人工下片
      @click="dialogFormVisibleaDownGlasss = true">{{ $t('reportWork.filming') }}
    </el-button>
    <el-switch style="margin-top: 10px;margin-left: 15px;margin-bottom: 10px;" v-model="autoPrint" class="mb-2"
      :inactive-text="$t('自动打印')" @change="handleChange" />
      :inactive-text="$t('basicData.printing')" @change="handleChange" />
    <el-card style="flex: 1;" v-loading="loading">
      <el-card style="flex: 1;margin-left: 4px;margin-top: 1px;" v-loading="loading">
        <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
@@ -465,8 +465,8 @@
            <el-table-column prop="totalQuantity" align="center" :label="$t('reportWork.totalquantity')"
              min-width="120" />
            <el-table-column prop="racksNumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" />
            <el-table-column prop="layer" align="center" label="层数" min-width="120" />
            <el-table-column prop="otherNumber" align="center" label="人工下片数" min-width="120" />
            <el-table-column prop="layer" align="center" :label="$t('reportWork.cenumber')" min-width="120" />
            <el-table-column prop="otherNumber" align="center" :label="$t('reportWork.artificialorder')" min-width="120" />
            <!-- <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" /> -->
            <el-table-column prop="deviceId" align="center" :label="$t('reportWork.devicenumber')" min-width="120" />
            <el-table-column align="center" :label="$t('reportWork.startstatus')" min-width="80" prop="enableState">
@@ -483,17 +483,17 @@
                </el-button>
                <el-button size="mini" type="text" plain @click="handleBindRack2(scope.row)">{{ $t('reportWork.clear')
                  }}</el-button>
                <el-button @click="open(scope.row)" :disabled="scope.row.flowCardId == null">打印流程卡</el-button>
                <el-button @click="open1(scope.row)" :disabled="scope.row.flowCardId == null">打印标签</el-button>
                <el-button @click="open(scope.row)" :disabled="scope.row.flowCardId == null">{{ $t('reportWork.processcard') }}</el-button>
                <el-button @click="open1(scope.row)" :disabled="scope.row.flowCardId == null">{{ $t('reportWork.printlabels') }}</el-button>
              </template>
            </el-table-column>
          </el-table>
        </div>
        <el-dialog v-model="dialogFormVisibleaDownGlass" top="2vh" width="97%" :title="$t('落架信息')">
          <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('请选择工位')" clearable>
            <el-option label="全部" value="0"></el-option>
        <el-dialog v-model="dialogFormVisibleaDownGlass" top="2vh" width="97%" :title="$t('reportWork.information')">
          <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('reportWork.cstation')" clearable>
            <el-option :label="$t('reportWork.all')" value="0"></el-option>
            <el-option label="1" value="1"></el-option>
            <el-option label="2" value="2"></el-option>
            <el-option label="3" value="3"></el-option>
@@ -508,9 +508,9 @@
            <el-option v-for="item in selectOptionsa" :key="item" :label="item" :value="item" />
          </el-select>
          <span class="demonstration">时间段</span>
          <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" start-placeholder="开始日期"
            value-format="YYYY-MM-DD hh:mm:ss" end-placeholder="结束日期">
          <span class="demonstration">{{ $t('reportWork.timeperiod') }}</span>
          <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" :start-placeholder="$t('reportmanage.starttime')"
            value-format="YYYY-MM-DD hh:mm:ss" :end-placeholder="$t('reportmanage.endtime')">
          </el-date-picker>
          <el-button type="primary" style="margin-left: 10px;" @click="selectDownGlassData()">{{
@@ -519,19 +519,19 @@
          </el-button>
          <el-table height="200px" ref="table" @selection-change="handleSelectionChange" :data="downGlass"
            :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
            <el-table-column prop="workStationId" align="center" :label="$t('工位号')" min-width="80" />
            <el-table-column prop="engineerId" align="center" :label="$t('工程号')" min-width="80" />
            <el-table-column prop="flowCardId" align="center" :label="$t('流程卡号')" min-width="80" />
            <el-table-column prop="layer" align="center" :label="$t('层')" min-width="120" />
            <el-table-column prop="sequence" align="center" :label="$t('顺序')" min-width="150" />
            <el-table-column prop="width" align="center" :label="$t('宽')" min-width="120" />
            <el-table-column prop="height" align="center" :label="$t('高')" min-width="120" />
            <el-table-column prop="Filmsid" align="center" :label="$t('膜系')" min-width="120" />
            <el-table-column prop="thickness" align="center" label="厚度" min-width="120" />
            <el-table-column prop="glassId" align="center" :label="$t('玻璃id')" min-width="120" />
            <el-table-column prop="workStationId" align="center" :label="$t('reportWork.stationnumber')" min-width="80" />
            <el-table-column prop="engineerId" align="center" :label="$t('basicData.projectnumber')" min-width="80" />
            <el-table-column prop="flowCardId" align="center" :label="$t('workOrder.cardnumber')" min-width="80" />
            <el-table-column prop="layer" align="center" :label="$t('searchOrder.ceng')" min-width="120" />
            <el-table-column prop="sequence" align="center" :label="$t('reportWork.order')" min-width="150" />
            <el-table-column prop="width" align="center" :label="$t('basicData.width')" min-width="120" />
            <el-table-column prop="height" align="center" :label="$t('basicData.height')" min-width="120" />
            <el-table-column prop="Filmsid" align="center" :label="$t('basicData.coatingtypes')" min-width="120" />
            <el-table-column prop="thickness" align="center" :label="$t('basicData.thickness')" min-width="120" />
            <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="120" />
          </el-table>
        </el-dialog>
        <el-dialog v-model="dialogFormVisibleaDownGlasss" top="2vh" width="97%" :title="$t('人工下片信息')">
        <el-dialog v-model="dialogFormVisibleaDownGlasss" top="2vh" width="97%" :title="$t('searchOrder.filminformation')">
          <div style="display:flex;justify-content: space-around;">
            <el-card
              style="display: flex; justify-content: center; align-items: center; width:800px; height: 800px;position: relative;">
@@ -540,8 +540,8 @@
              </div>
              <div style="font-size: 50px; text-align: center;position: absolute;top:0px;left:170px;">
                <div>人工下片当前玻璃信息</div>
                <div><el-button type="primary" @click="open1(takeGlass)" >打印标签</el-button></div>
                <div>{{ $t('reportWork.glassmation') }}</div>
                <div><el-button type="primary" @click="open1(takeGlass)" >{{ $t('reportWork.printlabels') }}</el-button></div>
                <div>{{ takeGlass.flowCardId }}</div>
                <div>{{ takeGlass.layer }}</div>
                <div>{{ takeGlass.glassId }}</div>
@@ -556,8 +556,8 @@
              </div>
              <div style="font-size: 50px; text-align: center;position: absolute;top:0px;left:200px;">
                <div>扫码枪当前玻璃信息</div>
                <div><el-button type="primary" @click="open1(scanGlass)" >打印标签</el-button></div>
                <div>{{ $t('reportWork.barcodescanner') }}</div>
                <div><el-button type="primary" @click="open1(scanGlass)" >{{ $t('reportWork.printlabels') }}</el-button></div>
                <div>{{ scanGlass.flowCardId }}</div>
                <div>{{ scanGlass.layer }}</div>
                <div>{{ scanGlass.glassId }}</div>