ZengTao
2024-10-17 d5d652d23a0bdf64ce527a6b592713a849abac7d
Merge branch 'master' of http://bore.pub:10439/r/HangZhouMes

# Conflicts:
# UI-Project/src/views/Slicecage/slicecage.vue
# UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
# hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
# hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
# hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
30个文件已修改
1个文件已添加
1个文件已删除
4838 ■■■■■ 已修改文件
UI-Project/config.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/en.js 1203 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/py.js 619 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 1213 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/router/index.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/constants.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/NewPage.vue 276 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/return.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/returns.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/upreturns.vue 1005 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/stockBasicData.vue 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/resources/mapper/FlowCardMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/readMe-OPC.md 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/config.js
@@ -1,9 +1,9 @@
export default {
 serverUrl: "10.153.19.150:88/api",
//  serverUrl: "192.168.1.199:88/api",
//  serverUrl: "10.153.19.150:88/api",
 serverUrl: "192.168.1.199:88/api",
//  serverUrl: "127.0.0.1:88/api",
  serverUrl2: "10.153.19.150:88"
  // serverUrl2: "192.168.1.199:88"
  // serverUrl2: "10.153.19.150:88"
  serverUrl2: "192.168.1.199:88"
    // serverUrl2: "127.0.0.1:88"
  //serverUrl:"res.abeim.cn"
UI-Project/src/lang/en.js
@@ -1,586 +1,619 @@
export  default {
  "northglassMESsystem": "NorthGlass MES System",
    login:{
        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:'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:'The server connection is abnormal. Please try again later',
        titleFirst:"Welcome ",
        titleLast:' to use NorthGlass MES system!',
        quit:"Exit",
    },
    basicData:{
        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:'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:'Breakage',
        takeaway:'Manual removal',
        takeon:'The arrangement is complete',
    },
    searchOrder:{
        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',
        height:'Height',
        width:'Width',
        thickness:'Thickness',
        coatingtypes:'Coating types',
        productionsequence:'Production sequence',
        cardnumber:'Process card number',
        operate:'Operate',
        messagedamaged:'Is this information damaged?',
        prompt:'Prompt',
        yes:'Yes',
        cancel:'Cancel',
        takemessage:'Do you need to delete the message?',
        breakage:'Breakage',
        takeout:'Take away',
        glasstype:'Glass type',
        line:'Wire',
        status:'Status',
    },
    processCard:{
        intofurnace:'Entering the furnace',
        beforefurnace:'Before entering the furnace',
        outfurnace:'Glass finished from tempering furnace',
        print:'Take away the print',
        printing:'print',
        projectnumber:'Please enter the project number',
        inquire:'Inquire',
        project:'Project number',
        awayprocess:'Take away the process',
        awayequipment:'Take away the equipment',
        awayteam:'Take away the crew',
        flowcard:'Process card',
        layer:'Layer number',
        temperinglayout:'Heat number',
        temperingfeed:'Preface',
        width:'Width',
        height:'Height',
        thickness:'Thickness',
        glasstakeout:'Glass take away list',
        layoutID:'Drawing ID of loading for tempering furnace',
        glassID:'Glass ID',
    },
    reportWork:{
        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:{
        addusers:'Add user',
        username:'User name',
        usernamea:'User name:',
        inusername:'Enter one user name',
        role:'Role',
        rolea:'Role:',
        inrole:'Please select a role',
        test:'Test',
        admin:'Administrator',
        operate:'Operate',
        resetpassword:'Reset password',
        exit:'Edit',
        delete:'Delete',
        prompt:'Prompt',
        repassword:'Do you want to reset the user password?',
        yes:'Yes',
        cancel:'Cancel',
        reusername:'Modify Users',
        addusername:'Add user',
        password:'Password:',
        sure:'Confirm',
        inpassword:'Please input a password',
        deusername:'Do you want to delete the user?',
    },
    customer:{
        addmenua:'Add secondary menus',
        addmenu:'Add a first-level menu',
        firstmenu:'First level menu bar',
        firstmenuname:'The name of the first-level menu:',
        link:'Link',
        inlink:'Please enter the link',
        linka:'Link:',
        sort:'Sort',
        insort:'Please enter sorting',
        sorta:'Sort:',
        operate:'Operate',
        exit:'Edit',
        delete:'Delete',
        semenu:'Secondary menu bar',
        semenuname:'Secondary menu name:',
        menu:'Menu bar:',
        inmenu:'Please enter a menu name',
        sure:'Confirm',
        cancel:'Cancel',
        exmene:'Modify the first-level menu',
        exmenea:'Modify the secondary menu',
        yes:'Yes',
        demenu:'Do you want to delete this menu?',
        prompt:'Prompt',
    },
    delivery:{
        addrole:'Add Role',
        editrole:'Modify role',
        role :'Role',
        rolea :'Role:',
        inrole :'Please enter the role',
        operate :'Operate',
        edit :'Edit',
        delete :'Delete',
        yes:'Yes',
        sure :'Confirm',
        cancel :'Cancel',
        derole :'Do you want to delete this role',
        prompt:'Prompt',
        choice:'Menu permissions:',
        inchoice:'Please select Menu Permissions',
    },
    replenish:{
        patchManagement:'Mesh management',
    },
    rework:{
        reworkManagement:'Rework management',
        addRework:"Rework added ",
    },
    role:{
        id:'ID',
        characterHomepage:'Character Home',
    },
    user:{
        userId:'User ID',
        userHomepage:'User Home',
    },
    orderBasicData:{
        order:'orders',
        orderType:'The type of order',
    },
    machine:{
        basicId:'Device number',
        basicName:'The name of the device',
        basicCategory:'The process in which it is located',
        tempering:'Steel',
    },
    report:{
        productionReport:'Production reports',
        workInProgressReport:'WIP report',
    },
    productionBasicData:{
        basicDataQuery :'Basic data query',
    },
    mainIngredient:{
        materialInformation :'Material information',
    },
    mainIngredientStock:{
        materialName :'The name of the item',
        createTime :'Return date',
    },
    large:{
        time: 'The time of the break',
        number: 'Order number',
        jobnumber: 'Job number',
        productionnumber: 'The production order number',
        cardnumber: 'Process card number',
        projectname: 'The name of the project',
        batch: 'batch',
        detailID: 'Detail ID',
        building: 'Building No',
        serialnumber: 'Order serial number',
        productname: 'Product name',
        serial: 'Process validation number',
        slicemarker: 'Frame marker (position)',
        numberpatches: 'Number of patches',
        width: 'Width',
        height: 'Height',
        shape: 'Shape',
        responsibleprocess: 'Responsible process',
        process: 'This process',
        numberfractions: 'The number of unfilled fractions',
        breakreason: 'The reason for the break',
        breaktype: 'Sub-break type',
        responsiblepersonnel: 'Responsible Personnel',
        responsiblequipment: 'Responsible Equipment',
        responsibleteam: 'Responsible team',
        area: 'Sub-broken area',
        inspector: 'Quality inspector',
        operate: 'Operate',
        mes: 'Detail',
        projectnumber: 'The project order number',
        brokeno: 'The report is broken and not filled',
        close: 'Shut down',
        orderId: 'Order ID',
        customerName: 'The name of the customer',
        project: 'The name of the project',
        are: 'are',
        quantity: 'quantity',
        warehousing: 'State',
        deliveryDate: 'Delivery time',
        notstocked: 'Not yet in stock',
        inboundstatus: 'Partial inventory status',
        allstatus: 'All in stock status',
        completedquantity: 'Completed quantity',
        scrapquantity: 'Scrap Quantity',
        method: 'Processing method',
        innumber: 'Quantity already entered',
        productstatus: 'Production status',
        right: 'normal',
        stop: 'termination',
        inquire: 'query',
        starttime :'Start Time',
        endtime :'End Time',
        loading :'In the process of uploading:',
    },
    reportmanage:{
        productiontime :'production time',
        starttime :'Start Time',
        endtime :'End Time',
        ctype :'Please select type',
        cstate :'Please select the status',
        cprocess :'Please select the process',
        all :'All',
        completed :'Completed',
        broke :'Damaged',
        takeout :'Takeout',
        dreportwork :'Unreported work',
        pendingwork :'Pending job application',
        reportwork :'Reported work',
        incise :'slicing',
        edging :'edging',
        steel :'toughened',
        inquire :'query',
        signingwork :'Reporting for work',
        reporteam :'Report work team',
        reportingequipment :'Reporting equipment',
        line :'line',
        process :'production processes',
        glassID :'Glass ID',
        projectnumber :'Project number',
        layoutID :'Tempered layout ID',
        type :'type',
        state :'state',
        processcards :'Flow Card',
        number :'Serial Number',
        layer :'storey',
        typebreakage :'Damage type',
        ptypebreakage :' Please select the type of damage',
        causebreakage :'Reason for damage',
        pcausebreakage :'Please select the reason for the damage',
        responsibleprocess :'Responsibility Process',
        responsiblepersonnel :'Responsible personnel',
        presponsiblepersonnel :'Please enter the responsible personnel',
        responsibleteam :'Responsible team',
        presponsibleteam :'Please select the responsible team',
        responsibleequipment :'Responsible equipment',
        presponsibleequipment :'Please select the responsible device',
        remark :'notes',
        premark :'Please enter a note',
    },
    film:{
        mes:'Original film storage details',
        warehousing:'store',
        operate: 'Operate',
        exit:'Edit',
        delete:'Delete',
        outbound:'Outbound',
        deviceid:'device ID',
        slot:'Grid number',
        enablestatea:'Enable tagging',
        disable:'Disable',
        start:'Enable',
        startslot:'Start workstation',
        endslot:'Target workstation',
        slotid:'Grid ID',
        width:'Width',
        widtha:'Width:',
        inwidth:'Please enter width',
        height:'Height',
        inheight:'Please enter height',
        heighta:'Height:',
        thickness:'Thickness',
        inthickness:'Please enter thickness',
        thicknessa:'Thickness:',
        films:'Films',
        infilms:'Please enter films',
        filmsa:'Films:',
        createtime:'Creation time',
        remainquantity:'Remaining Quantity',
        thickremainquantity:'Remaining quantity of original film (sheets):',
        inquantity:'Please enter the quantity',
        quantitya:'Number:',
        enableid:'Task ID',
        originateslot:'Starting grid',
        patternquantity:'Number',
        enabletype:'Task Type',
        enablestate:'Workstation status',
        finish:'Completed',
        unfinish:'Incomplete',
        dedelete:'Do you want to delete this content?',
        dedisable:'Do you want to disable this content?',
        deoutbound:'Whether to release the content of this item from the warehouse?',
        selectwarehousing:'Please select the lifting position',
        inwarehousing:'Lifting position:',
        warehousing1:'Lifting position 1',
        warehousing2:'Lifting position 2',
        starttime :'Start Time',
        endtime :'End Time',
        taskstatus :'Status',
        built :'newly built',
        execution :'In progress',
        tasktype :'Task Type',
        stocke :'store',
        dispatch :'dispatch',
        inquire :'query',
        station :'station',
    },
    Mounting:{
        previewproject :'Select Preview Project',
        loadinglinea :'Upper film line',
        loadingline :'Upper film line:',
        inloadingline :'Please select the upper film line',
        oneloadingline :'Line 1 on film',
        twoloadingline :'Line 2 on film',
        waiting :'Waiting',
        setparameters :'Set parameters',
        project :'Project number',
        projecta :'Project number:',
        width :'Width',
        height :'Height',
        thickness :'Thickness',
        projectnumber :'Project original piece number',
        state :'state',
        createtime :'Creation time',
        all :'Select All',
    }
}
    "northglassMESsystem": "NorthGlass MES System",
      login:{
          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:'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:'The server connection is abnormal. Please try again later',
          titleFirst:"Welcome ",
          titleLast:' to use NorthGlass MES system!',
          quit:"Exit",
      },
      basicData:{
          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:'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:'Breakage',
          takeaway:'Manual removal',
          takeon:'The arrangement is complete',
      },
      searchOrder:{
          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',
          height:'Height',
          width:'Width',
          thickness:'Thickness',
          coatingtypes:'Coating types',
          productionsequence:'Production sequence',
          cardnumber:'Process card number',
          operate:'Operate',
          messagedamaged:'Is this information damaged?',
          prompt:'Prompt',
          yes:'Yes',
          cancel:'Cancel',
          takemessage:'Do you need to delete the message?',
          breakage:'Breakage',
          takeout:'Take away',
          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',
          beforefurnace:'Before entering the furnace',
          outfurnace:'Glass finished from tempering furnace',
          print:'Take away the print',
          printing:'print',
          projectnumber:'Please enter the project number',
          inquire:'Inquire',
          project:'Project number',
          awayprocess:'Take away the process',
          awayequipment:'Take away the equipment',
          awayteam:'Take away the crew',
          flowcard:'Process card',
          layer:'Layer number',
          temperinglayout:'Heat number',
          temperingfeed:'Preface',
          width:'Width',
          height:'Height',
          thickness:'Thickness',
          glasstakeout:'Glass take away list',
          layoutID:'Drawing ID of loading for tempering furnace',
          glassID:'Glass ID',
      },
      reportWork:{
          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:{
          addusers:'Add user',
          username:'User name',
          usernamea:'User name:',
          inusername:'Enter one user name',
          role:'Role',
          rolea:'Role:',
          inrole:'Please select a role',
          test:'Test',
          admin:'Administrator',
          operate:'Operate',
          resetpassword:'Reset password',
          exit:'Edit',
          delete:'Delete',
          prompt:'Prompt',
          repassword:'Do you want to reset the user password?',
          yes:'Yes',
          cancel:'Cancel',
          reusername:'Modify Users',
          addusername:'Add user',
          password:'Password:',
          sure:'Confirm',
          inpassword:'Please input a password',
          deusername:'Do you want to delete the user?',
      },
      customer:{
          addmenua:'Add secondary menus',
          addmenu:'Add a first-level menu',
          firstmenu:'First level menu bar',
          firstmenuname:'The name of the first-level menu:',
          link:'Link',
          inlink:'Please enter the link',
          linka:'Link:',
          sort:'Sort',
          insort:'Please enter sorting',
          sorta:'Sort:',
          operate:'Operate',
          exit:'Edit',
          delete:'Delete',
          semenu:'Secondary menu bar',
          semenuname:'Secondary menu name:',
          menu:'Menu bar:',
          inmenu:'Please enter a menu name',
          sure:'Confirm',
          cancel:'Cancel',
          exmene:'Modify the first-level menu',
          exmenea:'Modify the secondary menu',
          yes:'Yes',
          demenu:'Do you want to delete this menu?',
          prompt:'Prompt',
      },
      delivery:{
          addrole:'Add Role',
          editrole:'Modify role',
          role :'Role',
          rolea :'Role:',
          inrole :'Please enter the role',
          operate :'Operate',
          edit :'Edit',
          delete :'Delete',
          yes:'Yes',
          sure :'Confirm',
          cancel :'Cancel',
          derole :'Do you want to delete this role',
          prompt:'Prompt',
          choice:'Menu permissions:',
          inchoice:'Please select Menu Permissions',
      },
      replenish:{
          patchManagement:'Mesh management',
      },
      rework:{
          reworkManagement:'Rework management',
          addRework:"Rework added ",
      },
      role:{
          id:'ID',
          characterHomepage:'Character Home',
      },
      user:{
          userId:'User ID',
          userHomepage:'User Home',
      },
      orderBasicData:{
          order:'orders',
          orderType:'The type of order',
      },
      machine:{
          basicId:'Device number',
          basicName:'The name of the device',
          basicCategory:'The process in which it is located',
          tempering:'Steel',
      },
      report:{
          productionReport:'Production reports',
          workInProgressReport:'WIP report',
      },
      productionBasicData:{
          basicDataQuery :'Basic data query',
      },
      mainIngredient:{
          materialInformation :'Material information',
      },
      mainIngredientStock:{
          materialName :'The name of the item',
          createTime :'Return date',
      },
      large:{
          time: 'The time of the break',
          number: 'Order number',
          jobnumber: 'Job number',
          productionnumber: 'The production order number',
          cardnumber: 'Process card number',
          projectname: 'The name of the project',
          batch: 'batch',
          detailID: 'Detail ID',
          building: 'Building No',
          serialnumber: 'Order serial number',
          productname: 'Product name',
          serial: 'Process validation number',
          slicemarker: 'Frame marker (position)',
          numberpatches: 'Number of patches',
          width: 'Width',
          height: 'Height',
          shape: 'Shape',
          responsibleprocess: 'Responsible process',
          process: 'This process',
          numberfractions: 'The number of unfilled fractions',
          breakreason: 'The reason for the break',
          breaktype: 'Sub-break type',
          responsiblepersonnel: 'Responsible Personnel',
          responsiblequipment: 'Responsible Equipment',
          responsibleteam: 'Responsible team',
          area: 'Sub-broken area',
          inspector: 'Quality inspector',
          operate: 'Operate',
          mes: 'Detail',
          projectnumber: 'The project order number',
          brokeno: 'The report is broken and not filled',
          close: 'Shut down',
          orderId: 'Order ID',
          customerName: 'The name of the customer',
          project: 'The name of the project',
          are: 'are',
          quantity: 'quantity',
          warehousing: 'State',
          deliveryDate: 'Delivery time',
          notstocked: 'Not yet in stock',
          inboundstatus: 'Partial inventory status',
          allstatus: 'All in stock status',
          completedquantity: 'Completed quantity',
          scrapquantity: 'Scrap Quantity',
          method: 'Processing method',
          innumber: 'Quantity already entered',
          productstatus: 'Production status',
          right: 'normal',
          stop: 'termination',
          inquire: 'query',
          starttime :'Start Time',
          endtime :'End Time',
          loading :'In the process of uploading:',
      },
      reportmanage:{
          productiontime :'production time',
          starttime :'Start Time',
          endtime :'End Time',
          ctype :'Please select type',
          cstate :'Please select the status',
          cprocess :'Please select the process',
          all :'All',
          completed :'Completed',
          broke :'Damaged',
          takeout :'Takeout',
          dreportwork :'Unreported work',
          pendingwork :'Pending job application',
          reportwork :'Reported work',
          incise :'slicing',
          edging :'edging',
          steel :'toughened',
          inquire :'query',
          signingwork :'Reporting for work',
          reporteam :'Report work team',
          reportingequipment :'Reporting equipment',
          line :'line',
          process :'production processes',
          glassID :'Glass ID',
          projectnumber :'Project number',
          layoutID :'Tempered layout ID',
          type :'type',
          state :'state',
          processcards :'Flow Card',
          number :'Serial Number',
          layer :'storey',
          typebreakage :'Damage type',
          ptypebreakage :' Please select the type of damage',
          causebreakage :'Reason for damage',
          pcausebreakage :'Please select the reason for the damage',
          responsibleprocess :'Responsibility Process',
          responsiblepersonnel :'Responsible personnel',
          presponsiblepersonnel :'Please enter the responsible personnel',
          responsibleteam :'Responsible team',
          presponsibleteam :'Please select the responsible team',
          responsibleequipment :'Responsible equipment',
          presponsibleequipment :'Please select the responsible device',
          remark :'notes',
          premark :'Please enter a note',
      },
      film:{
          mes:'Original film storage details',
          warehousing:'store',
          operate: 'Operate',
          exit:'Edit',
          delete:'Delete',
          outbound:'Outbound',
          deviceid:'device ID',
          slot:'Grid number',
          enablestatea:'Enable tagging',
          disable:'Disable',
          start:'Enable',
          startslot:'Start workstation',
          endslot:'Target workstation',
          slotid:'Grid ID',
          width:'Width',
          widtha:'Width:',
          inwidth:'Please enter width',
          height:'Height',
          inheight:'Please enter height',
          heighta:'Height:',
          thickness:'Thickness',
          inthickness:'Please enter thickness',
          thicknessa:'Thickness:',
          films:'Films',
          infilms:'Please enter films',
          filmsa:'Films:',
          createtime:'Creation time',
          remainquantity:'Remaining Quantity',
          thickremainquantity:'Remaining quantity of original film (sheets):',
          inquantity:'Please enter the quantity',
          quantitya:'Number:',
          enableid:'Task ID',
          originateslot:'Starting grid',
          patternquantity:'Number',
          enabletype:'Task Type',
          enablestate:'Workstation status',
          finish:'Completed',
          unfinish:'Incomplete',
          dedelete:'Do you want to delete this content?',
          dedisable:'Do you want to disable this content?',
          deoutbound:'Whether to release the content of this item from the warehouse?',
          selectwarehousing:'Please select the lifting position',
          inwarehousing:'Lifting position:',
          warehousing1:'Lifting position 1',
          warehousing2:'Lifting position 2',
          starttime :'Start Time',
          endtime :'End Time',
          taskstatus :'Status',
          built :'newly built',
          execution :'In progress',
          tasktype :'Task Type',
          stocke :'store',
          dispatch :'dispatch',
          inquire :'query',
          station :'station',
      },
      Mounting:{
          previewproject :'Select Preview Project',
          loadinglinea :'Upper film line',
          loadingline :'Upper film line:',
          inloadingline :'Please select the upper film line',
          oneloadingline :'Line 1 on film',
          twoloadingline :'Line 2 on film',
          waiting :'Waiting',
          setparameters :'Set parameters',
          project :'Project number',
          projecta :'Project number:',
          width :'Width',
          height :'Height',
          thickness :'Thickness',
          projectnumber :'Project original piece number',
          state :'state',
          createtime :'Creation time',
          all :'Select All',
      }
  }
UI-Project/src/lang/py.js
@@ -1,300 +1,333 @@
export  default {
    "northglassMESsystem": 'Система "NorthGlass MES"' ,
      login:{
          userErr:'Введите номер счета.',
          pwErr:'Введите пароль.',
          user:'Аккаунт',
          password:'Код',
          login:'Залогин',
          loginSuccessful:'Вход в систему выполнен успешно!',
          register:'Зарегистрирова',
          namea:'Имя не может быть пустым',
          len:'Длина не должна превышать 16',
          passnull:'Пароль не может быть пустым',
          leng:'Длина пароля не должна быть меньше 6 или больше 16.',
          spwn:'Пароль подтверждения не может быть пустым',
          depass:'Два разных пароля.',
      },
      register:{
          registerSuccessful:'Регистрация успешно',
          newuserregister:'Новый реестр пользователей',
          name:'Имя:',
          inputname:'Введите имя',
          password:'Код:',
          pwErr:'Введите пароль.',
          passwordation:'Подтвердите пароль:',
          pwErration:'Пожалуйста, подтвертите пароль',
          registration:'Подтверждение о регистрации',
          false:'Отмена',
      },
      main:{
          connectErr:'Необычное подключение к серверу, попробуйте позже',
          titleFirst:"Добро пожаловать ",
          titleLast:' в систему NorthGlass MES!',
          quit:"Выход",
      },
      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:'Ошибка при обновлении стекла',
      },
      sorter:{
          gridnumber:'Ячеек сеткла',
          glassnumber:'Номер стакла',
          width:'Ширина',
          height:'Высота',
          startstatus:'Статус начала операции',
          disable:'Отключ',
          start:'Начало',
          deficiencieste:'Недостатки в отчетности',
          operate:'Операция',
          prompt:'Подсказк',
          information:'Следует ли сообщать недостающую информацию?',
          yes:'Да',
          cancel:'Отмена',
      },
      order:{
          dilapidation:'Повреждение',
          Takeaway:'Взять вручную',
      },
      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:'Отмена',
        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:'Ждем.',
export default {
    "northglassMESsystem": 'Система "NorthGlass MES"',
    login: {
        userErr: 'Введите номер счета.',
        pwErr: 'Введите пароль.',
        user: 'Аккаунт',
        password: 'Код',
        login: 'Залогин',
        loginSuccessful: 'Вход в систему выполнен успешно!',
        register: 'Зарегистрирова',
        namea: 'Имя не может быть пустым',
        len: 'Длина не должна превышать 16',
        passnull: 'Пароль не может быть пустым',
        leng: 'Длина пароля не должна быть меньше 6 или больше 16.',
        spwn: 'Пароль подтверждения не может быть пустым',
        depass: 'Два разных пароля.',
    },
    workOrder:{
        glassID:'Стеклянный ID',
        height:'Высота',
        width:'Ширина',
        thickness:'Толщина',
        coatingtypes:'Типы покрытий',
        productionsequence:'Последовательность производства',
        cardnumber:'Номер карточки процесса',
        operate:'Операция',
        messagedamaged:'Повреждено ли сообщение?',
        prompt:'Подсказк',
        yes:'Да',
        cancel:'Отмена',
        takemessage:'Следует ли удалять сообщение?',
        breakage:'Повреждение',
        takeout:'Взять',
    register: {
        registerSuccessful: 'Регистрация успешно',
        newuserregister: 'Новый реестр пользователей',
        name: 'Имя:',
        inputname: 'Введите имя',
        password: 'Код:',
        pwErr: 'Введите пароль.',
        passwordation: 'Подтвердите пароль:',
        pwErration: 'Пожалуйста, подтвертите пароль',
        registration: 'Подтверждение о регистрации',
        false: 'Отмена',
    },
    processCard:{
        intofurnace:'В печь',
        beforefurnace:'До печки.',
        outfurnace:'Окончено стекло из печи для закалки',
    main: {
        connectErr: 'Необычное подключение к серверу, попробуйте позже',
        titleFirst: "Добро пожаловать ",
        titleLast: ' в систему NorthGlass MES!',
        quit: "Выход",
    },
    reportWork:{
        lowerbit:'Станция разгрузки',
        shelfnumber:'Номер стойки регистрации',
        cardnumber:'Номер карточки процесса',
        totalquantity:'Общее количество',
        beendropped:'Количество стекла разгрузки',
        state:'Состояние',
        devicenumber:'Номер оборудования.',
        startstatus:'Статус начала операции',
        enable:'Начало',
        unenable:'Не начат',
        operate:'Операция',
        bindingshelves:'Назначенная стеллажка',
        clear:'Чисто.',
        workstation:'Станция номер',
        cardnumbera:'Номер карточки процесса:',
        incardnumber:'Пожалуйста, выберите номер программы',
        clearglass:'Очистить стекло с полки',
        sure:'подтверд',
        cancel:'Отмена',
        glassinformation:'Информация стекла',
        glassID:'Стеклянный ID',
        coatingtypes:'Типы покрытий',
        thickness:'Толщина',
        width:'Ширина',
        height:'Высота',
    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: 'Ошибка при обновлении стекла',
    },
    productStock:{
        addusers:'Добавьте пользователей.',
        username:'Имя пользователя.',
        usernamea:'Имя пользователя.:',
        inusername:'Введите имя пользователя',
        role:'Роль',
        rolea:'Роль:',
        inrole:'Выберите роль',
        test:'Тест',
        admin:'Администратор.',
        operate:'Операция',
        resetpassword:'Сбросить пароль',
        exit:'Редактор',
        delete:'Удал',
        prompt:'Подсказк',
        repassword:'Перезагрузка пользовательского пароля или нет?',
        yes:'Да',
        cancel:'Отмена',
        reusername:'Изменение пользователя',
        addusername:'Добавьте пользователей.',
        password:'Код:',
        sure:'подтверд',
        inpassword:'Введите пароль.',
        deusername:'Удаление пользователя или нет?',
    sorter: {
        gridnumber: 'Ячеек сеткла',
        glassnumber: 'Номер стакла',
        width: 'Ширина',
        height: 'Высота',
        startstatus: 'Статус начала операции',
        disable: 'Отключ',
        start: 'Начало',
        deficiencieste: 'Недостатки в отчетности',
        operate: 'Операция',
        prompt: 'Подсказк',
        information: 'Следует ли сообщать недостающую информацию?',
        yes: 'Да',
        cancel: 'Отмена',
    },
    customer:{
        addmenu:'Добавьте меню.',
        firstmenu:'Таблица меню первой степени',
        link:'Ссылк',
        linka:'Ссылк:',
        inlink:'Введите ссылку',
        sort:'Сортировк',
        sorta:'Сортировк:',
        insort:'Введите сортировку',
        operate:'Операция',
        exit:'Редактор',
        inmenu:'Введите меню',
        delete:'Удал',
        semenu:'Таблица меню второй степени',
        menu:'Меню.:',
        sure:'подтверд',
        cancel:'Отмена',
        exmene:'Изменение меню.',
        yes:'Да',
        demenu:'Удалить меню или нет?',
        prompt:'Подсказк',
    order: {
        dilapidation: 'Повреждение',
        Takeaway: 'Взять вручную',
    },
    delivery:{
        addrole:'Добавьте роли.',
        editrole:'Изменение роли.',
        role :'Роль',
        rolea :'Роль:',
        inrole :'Введите роли.',
        operate :'Операция',
        edit :'Редактор',
        delete :'Удал',
        sure :'подтверд',
        cancel :'Отмена',
        yes:'Да',
        derole :'Удалить персонаж или нет?',
        prompt:'Подсказк',
    searchOrder: {
        searchlayout:'Запрос нетемперированной технологической карты',
        fullfurnaces:'Количество полных печей',
        specifiedproject:'Указанный в данный момент проект',
        undesignate:'Без обозначения',
        allnumber:'Общее количество',
        numbercages:'Количество сепараторов',
        missingquantity:'Недостающее количество',
        breakquantity:'Количество Поломка/Вынос',
        ceng:'слой',
        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: 'Отмена',
        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: 'Ждем.',
    },
  }
    workOrder: {
        glassID: 'Стеклянный ID',
        height: 'Высота',
        width: 'Ширина',
        thickness: 'Толщина',
        coatingtypes: 'Типы покрытий',
        productionsequence: 'Последовательность производства',
        cardnumber: 'Номер карточки процесса',
        operate: 'Операция',
        messagedamaged: 'Повреждено ли сообщение?',
        prompt: 'Подсказк',
        yes: 'Да',
        cancel: 'Отмена',
        takemessage: 'Следует ли удалять сообщение?',
        breakage: 'Повреждение',
        takeout: 'Взять',
        time:'Период времени',
        cway:'Пожалуйста, выберите маршрут',
        cstate:'Пожалуйста, выберите статус',
        edgingone:'Окантовка линии',
        edgingtwo:'Окантовка двух линий',
        nedging:'Окантовка',
        edging:'Край',
        finedging:'был окантовочным',
    },
    processCard: {
        intofurnace: 'В печь',
        beforefurnace: 'До печки.',
        outfurnace: 'Окончено стекло из печи для закалки',
    },
    reportWork: {
        details:'Сведения о сдаче',
        filming:'Искусственная съемка',
        printing:'Автоматическая печать',
        cenumber:'Количество слоев',
        artificialorder:'Количество штук при искусственном заказе',
        processcard:'Печать технологической карты',
        printlabels:'Печать этикеток',
        information:'Информация о посадке',
        cstation:'Пожалуйста, выберите стол',
        all:'все',
        timeperiod:'Период времени',
        stationnumber:'Номер станции',
        order:'порядок',
        filminformation:'Информация о пленке вручную',
        glassmation:'Искусственная пленка актуальная информация о стекле',
        barcodescanner:'Актуальная информация о стекле сканера штрих-кода',
        lowerbit: 'Станция разгрузки',
        shelfnumber: 'Номер стойки регистрации',
        cardnumber: 'Номер карточки процесса',
        totalquantity: 'Общее количество',
        beendropped: 'Количество стекла разгрузки',
        state: 'Состояние',
        devicenumber: 'Номер оборудования.',
        startstatus: 'Статус начала операции',
        enable: 'Начало',
        unenable: 'Не начат',
        operate: 'Операция',
        bindingshelves: 'Назначенная стеллажка',
        clear: 'Чисто.',
        workstation: 'Станция номер',
        cardnumbera: 'Номер карточки процесса:',
        incardnumber: 'Пожалуйста, выберите номер программы',
        clearglass: 'Очистить стекло с полки',
        sure: 'подтверд',
        cancel: 'Отмена',
        glassinformation: 'Информация стекла',
        glassID: 'Стеклянный ID',
        coatingtypes: 'Типы покрытий',
        thickness: 'Толщина',
        width: 'Ширина',
        height: 'Высота',
    },
    productStock: {
        addusers: 'Добавьте пользователей.',
        username: 'Имя пользователя.',
        usernamea: 'Имя пользователя.:',
        inusername: 'Введите имя пользователя',
        role: 'Роль',
        rolea: 'Роль:',
        inrole: 'Выберите роль',
        test: 'Тест',
        admin: 'Администратор.',
        operate: 'Операция',
        resetpassword: 'Сбросить пароль',
        exit: 'Редактор',
        delete: 'Удал',
        prompt: 'Подсказк',
        repassword: 'Перезагрузка пользовательского пароля или нет?',
        yes: 'Да',
        cancel: 'Отмена',
        reusername: 'Изменение пользователя',
        addusername: 'Добавьте пользователей.',
        password: 'Код:',
        sure: 'подтверд',
        inpassword: 'Введите пароль.',
        deusername: 'Удаление пользователя или нет?',
    },
    customer: {
        addmenu: 'Добавьте меню.',
        firstmenu: 'Таблица меню первой степени',
        link: 'Ссылк',
        linka: 'Ссылк:',
        inlink: 'Введите ссылку',
        sort: 'Сортировк',
        sorta: 'Сортировк:',
        insort: 'Введите сортировку',
        operate: 'Операция',
        exit: 'Редактор',
        inmenu: 'Введите меню',
        delete: 'Удал',
        semenu: 'Таблица меню второй степени',
        menu: 'Меню.:',
        sure: 'подтверд',
        cancel: 'Отмена',
        exmene: 'Изменение меню.',
        yes: 'Да',
        demenu: 'Удалить меню или нет?',
        prompt: 'Подсказк',
    },
    delivery: {
        addrole: 'Добавьте роли.',
        editrole: 'Изменение роли.',
        role: 'Роль',
        rolea: 'Роль:',
        inrole: 'Введите роли.',
        operate: 'Операция',
        edit: 'Редактор',
        delete: 'Удал',
        sure: 'подтверд',
        cancel: 'Отмена',
        yes: 'Да',
        derole: 'Удалить персонаж или нет?',
        prompt: 'Подсказк',
    },
}
UI-Project/src/lang/zh.js
@@ -1,587 +1,628 @@
export  default {
  "northglassMESsystem": "北玻MES系统",
    login:{
        userErr:'请输入账号',
        pwErr:'请输入密码',
        user:'账号',
        password:'密码',
        login:'登录',
        loginSuccessful:'登录成功!',
        register:'注册',
        namea:'姓名不能为空',
        len:'长度不能超过16',
        passnull:'密码不能为空',
        leng:'密码长度不能低于6或超过16',
        spwn:'确认密码不能为空',
        depass:'两次密码不相同',
    },
    register:{
        registerSuccessful:'注册成功',
        newuserregister:'注册新用户',
        name:'姓名:',
        inputname:'请输入姓名',
        password:'密码:',
        pwErr:'请输入密码',
        passwordation:'确认密码:',
        pwErration:'请确认密码',
        registration:'确认注册',
        false:'取消',
    },
    main:{
        connectErr:'服务器连接异常,请稍后再试',
        titleFirst:"欢迎 ",
        titleLast:' 使用北玻MES系统!',
        quit:"退出",
    },
    basicData:{
        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:'更新玻璃状态时发生错误',
        deletemessage:'是否删除该条信息?',
        layoutSequence:'序号',
    },
    sorter:{
        gridnumber:'栅格号',
        glassnumber:'玻璃编号',
        width:'宽',
        height:'高',
        startstatus:'启用状态',
        disable:'已禁用',
        start:'已启用',
        deficiencieste:'报缺',
        updown:'人工下片',
        operate:'操作',
        prompt:'提示',
        information:'是否报缺该条信息?',
        infor:'是否人工下片该条信息?',
        yes:'是',
        cancel:'取消',
    },
    order:{
        dilapidation:'破损',
        takeaway:'人工拿走',
        takeon:'摆片完成',
    },
    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:'请输入玻璃类型',
        width:'宽',
        widtha:'宽:',
        inwidth:'请输入宽',
        height:'高',
        heighta:'高:',
        inheight:'请输入高',
        coatingtypes:'膜系',
        thickness:'厚度',
        thicknessa:'厚度:',
        inthickness:'请输入厚度',
        layoutID:'钢化版图ID',
        layoutIDa:'钢化版图ID:',
        inlayoutID:'请输入钢化版图ID',
        picturesequence:'钢化版图片序',
        picturesequencea:'钢化版图片序:',
        inpicturesequence:'请输入钢化版图片序',
        startstatus:'启用状态',
        startstatusa:'启用状态:',
        instartstatus:'请输入启用状态',
        glassgaps:'玻璃间隙',
        glassgapsa:'玻璃间隙:',
        inglassgaps:'请输入玻璃间隙',
        sure:'确认',
        cancel:'取消',
        operate:'操作',
        breakage:'破损',
        delete:'删除',
        outfilm:'出片',
        cagetableID:'大理片笼表ID',
        cagenumber:'理片笼号',
        gridnumber:'栅格号',
        gridnumbera:'栅格号:',
        grid:'请输入栅格号',
        enable:'已启用',
        disable:'已禁用',
        remainingwidth:'剩余宽度',
        add:'添加',
        sheetID:'钢化小片信息表ID',
        processcards:'流程卡',
        processcardtype:'流程卡玻璃类型',
        acceptshorizontal:'钢化是否接受横放',
        xcoordinates:'x坐标',
        ycoordinates:'y坐标',
        rotationangle:'旋转角度(逆时针)',
        state:'状态',
        takeout:'拿走',
        deletemessage:'是否删除该条信息?',
        prompt:'提示',
        yes:'是',
        accept:'接受',
        noaccept:'不接受',
        filmcomplete:'出片完成',
        waiting:'等待中',
        broke:'是否破损该条信息?',
        brokeb:'是否拿走该条信息?',
        outfil:'是否出片该条信息?',
        inputid:'请输入玻璃ID',
        search:'搜索',
        tabid:'大理片笼详情表id',
        tid:'设备id',
        tida:'设备id:',
        fin:'是否完成任务?',
        sureadd: '确认添加',
        sureadda: '是否确认添加?',
        zailong: '在笼中',
        rengongxp: '人工下片',
        up: '上一页',
        down: '下一页',
        now: '当前页显示',
        tit: '条数据',
        temperingqueries: '钢化查询',
        specifytempering: '指定一炉',
        specifyout: '指定人工出片',
        specifyengineerid: '指定工程',
        projectnumber: '工程号',
        layoutnumber: '钢化版图号',
        numberglasses: '玻璃数量',
        specifytemperinga: '是否指定钢化该条信息?',
        temperedswitch: '钢化开关',
        dutyinformation: '值班信息',
        process: '工序',
        team: '班组',
        basic: '设备',
        makesure:'确认保存',
        // cancel:'取消',
        temperingtotal:'钢化炉数:',
        glasstotal:'玻璃总数:',
    },
    workOrder:{
        glassID:'玻璃ID',
        height:'高',
        width:'宽',
        thickness:'厚度',
        coatingtypes:'膜系',
        productionsequence:'出片顺序',
        cardnumber:'流程卡号',
        operate:'操作',
        messagedamaged:'是否破损该条信息?',
        prompt:'提示',
        yes:'是',
        cancel:'取消',
        takemessage:'是否拿走该条信息?',
        breakage:'破损',
        takeout:'拿走',
        glasstype:'玻璃类型',
        line:'线路',
        status:'状态',
    },
    processCard:{
        intofurnace:'进炉中',
        beforefurnace:'进炉前',
        outfurnace:'已出炉玻璃',
        print:'拿走打印',
        printing:'打印',
        projectnumber:'请输入工程号',
        inquire:'查询',
        project:'工程号',
        awayprocess:'拿走工序',
        awayequipment:'拿走设备',
        awayteam:'拿走班组',
        flowcard:'流程卡',
        layer:'层号',
        temperinglayout:'炉号',
        temperingfeed:'片序',
        width:'宽',
        height:'高',
        thickness:'厚',
        glasstakeout:'玻璃拿走清单',
        layoutID:'版图ID',
        glassID:'玻璃ID',
    },
    reportWork:{
        lowerbit:'下片位',
        shelfnumber:'架号',
        cardnumber:'流程卡号',
        totalquantity:'总数量',
        beendropped:'已落架数量',
        state:'状态',
        devicenumber:'设备号',
        startstatus:'启用状态',
        enable:'已启用',
        unenable:'未启用',
        operate:'操作',
        bindingshelves:'绑定架子',
        clear:'清空',
        workstation:'号工位',
        shelfnumbera:'架号:',
        cardnumbera:'流程卡号:',
        incardnumber:'请选择流程卡号',
        clearglass:'清除架子玻璃',
        sure:'确认',
        cancel:'取消',
        glassinformation:'玻璃信息',
        glassID:'玻璃ID',
        coatingtypes:'膜系',
        thickness:'厚度',
        width:'宽度',
        height:'高度',
    },
    productStock:{
        addusers:'添加用户',
        username:'用户名',
        usernamea:'用户名:',
        inusername:'请输入用户名',
        role:'角色',
        rolea:'角色:',
        inrole:'请选择角色',
        test:'测试',
        admin:'管理员',
        operate:'操作',
        resetpassword:'重置密码',
        exit:'编辑',
        delete:'删除',
        prompt:'提示',
        repassword:'是否重置用户密码?',
        yes:'是',
        cancel:'取消',
        reusername:'修改用户',
        addusername:'添加用户',
        password:'密码:',
        sure:'确认',
        inpassword:'请输入密码',
        deusername:'是否删除该用户?',
    },
    customer:{
        addmenua:'添加二级菜单',
        addmenu:'添加一级菜单',
        firstmenu:'一级菜单栏',
        firstmenuname:'一级菜单名称:',
        link:'链接',
        inlink:'请输入链接',
        linka:'链接:',
        sort:'排序',
        insort:'请输入排序',
        sorta:'排序:',
        operate:'操作',
        exit:'编辑',
        delete:'删除',
        semenu:'二级菜单栏',
        semenuname:'二级菜单名称:',
        menu:'菜单栏:',
        inmenu:'请输入菜单名称',
        sure:'确认',
        cancel:'取消',
        exmene:'修改一级菜单',
        exmenea:'修改二级菜单',
        yes:'是',
        demenu:'是否删除该菜单?',
        prompt:'提示',
    },
    delivery:{
        addrole:'添加角色',
        editrole:'修改角色',
        role :'角色',
        rolea :'角色:',
        inrole :'请输入角色',
        operate :'操作',
        edit :'编辑',
        delete :'删除',
        yes:'是',
        sure :'确认',
        cancel :'取消',
        derole :'是否删除该角色',
        prompt:'提示',
        choice:'菜单权限:',
        inchoice:'请选择菜单权限',
    },
    replenish:{
        patchManagement:'补片管理',
    },
    rework:{
        reworkManagement:'返工管理',
        addRework:"返工新增 ",
    },
    role:{
        id:'ID',
        characterHomepage:'角色首页',
    },
    user:{
        userId:'用户ID',
        userHomepage:'用户首页',
    },
    orderBasicData:{
        order:'订单',
        orderType:'订单类型',
    },
    machine:{
        basicId:'设备编号',
        basicName:'设备名称',
        basicCategory:'所在工序',
        tempering:'钢化',
    },
    report:{
        productionReport:'生产报表',
        workInProgressReport:'在制品报表',
    },
    productionBasicData:{
        basicDataQuery :'基础数据查询',
    },
    mainIngredient:{
        materialInformation :'物料资料',
    },
    mainIngredientStock:{
        materialName :'物料名称',
        createTime :'返库日期',
    },
    large:{
        time: '次破时间',
        number: '订单号',
        jobnumber: '报工编号',
        productionnumber: '生产订单号',
        cardnumber: '流程卡号',
        projectname: '项目名称',
        batch: '批次',
        detailID: '明细ID',
        building: '楼号',
        serialnumber: '订单序号',
        productname: '产品名称',
        serial: '工艺确认序号',
        slicemarker: '片标记(位置)',
        numberpatches: '补片数量',
        width: '宽',
        height: '高',
        shape: '形状',
        responsibleprocess: '责任工序',
        process: '本工序',
        numberfractions: '次破未补数量',
        breakreason: '次破原因',
        breaktype: '次破类型',
        responsiblepersonnel: '责任人员',
        responsiblequipment: '责任设备',
        responsibleteam: '责任班组',
        area: '次破面积',
        inspector: '质检员',
        operate: '操作',
        mes: '详情',
        projectnumber: '工程单号',
        brokeno: '报次破未补',
        close: '关闭',
        orderId: '订单ID',
        customerName: '客户名称',
        project: '项目名称',
        are: '面积',
        quantity: '数量',
        warehousing: '状态',
        deliveryDate: '送货时间',
        notstocked: '未入库',
        inboundstatus: '部分入库状态',
        allstatus: '全部入库状态',
        completedquantity: '完成数量',
        scrapquantity: '报废数量',
        method: '加工方式',
        innumber: '已入数量',
        productstatus: '生产状态',
        right: '正常',
        stop: '终止',
        inquire: '查询',
        starttime :'开始时间',
        endtime :'结束时间',
        loading :'正在上片:',
    },
    reportmanage:{
        productiontime :'生产时间',
        starttime :'开始时间',
        endtime :'结束时间',
        ctype :'清选择类型',
        cstate :'清选择状态',
        cprocess :'清选择工序',
        all :'全部',
        completed :'完工',
        broke :'破损',
        takeout :'拿走',
        dreportwork :'未报工',
        pendingwork :'待报工',
        reportwork :'已报工',
        incise :'切割',
        edging :'磨边',
        steel :'钢化',
        inquire :'查询',
        signingwork :'报工',
        reporteam :'报工班组',
        reportingequipment :'报工设备',
        line :'线路',
        process :'工序',
        glassID :'玻璃ID',
        projectnumber :'工程号',
        layoutID :'钢化版图ID',
        type :'类型',
        state :'状态',
        processcards :'流程卡',
        number :'序号',
        layer :'层',
        typebreakage :'破损类型',
        ptypebreakage :' 请选择破损类型',
        causebreakage :'破损原因',
        pcausebreakage :'请选择破损原因',
        responsibleprocess :'责任工序',
        responsiblepersonnel :'责任人员',
        presponsiblepersonnel :'请输入责任人员',
        responsibleteam :'责任班组',
        presponsibleteam :'请选择责任班组',
        responsibleequipment :'责任设备',
        presponsibleequipment :'请选择责任设备',
        remark :'备注',
        premark :'请输入备注',
    },
    film:{
        mes:'原片仓储详情',
        warehousing:'入库',
        operate: '操作',
        exit:'编辑',
        delete:'删除',
        outbound:'出库',
        deviceid:'设备ID',
        slot:'栅格号',
        enablestatea:'启用标记',
        disable:'禁用',
        start:'启用',
        startslot:'开始工位',
        endslot:'目标工位',
        slotid:'格子ID',
        width:'原片宽',
        widtha:'原片宽:',
        inwidth:'请输入原片宽',
        height:'原片高',
        inheight:'请输入原片高',
        heighta:'原片高:',
        thickness:'原片厚度',
        inthickness:'请输入原片厚度',
        thicknessa:'原片厚度:',
        films:'膜系',
        infilms:'请输入膜系',
        filmsa:'膜系:',
        createtime:'创建时间',
        remainquantity:'剩余数量',
        thickremainquantity:'原片剩余数量(张):',
        inquantity:'请输入数量',
        quantitya:'数量:',
        enableid:'任务ID',
        originateslot:'起始格子',
        patternquantity:'原片数量',
        enabletype:'任务类型',
        enablestate:'工位状态',
        finish:'已完成',
        unfinish:'未完成',
        dedelete:'是否删除该条内容?',
        dedisable:'是否禁用该条内容?',
        deoutbound:'是否出库该条内容?',
        selectwarehousing:'请选择吊装位',
        inwarehousing:'吊装位:',
        warehousing1:'吊装位1',
        warehousing2:'吊装位2',
        starttime :'开始时间',
        endtime :'结束时间',
        taskstatus :'任务状态',
        built :'新建',
        execution :'执行中',
        tasktype :'任务类型',
        stocke :'入库',
        dispatch :'调度',
        inquire :'查询',
        station :'工位',
    },
    Mounting:{
        previewproject :'选择预览工程',
        loadinglinea :'上片线',
        loadingline :'上片线:',
        inloadingline :'请选择上片线',
        oneloadingline :'一号上片线',
        twoloadingline :'二号上片线',
        waiting :'等待中',
        setparameters :'设置参数',
        project :'工程号',
        projecta :'工程号:',
        width :'原片宽',
        height :'原片高',
        thickness :'原片厚',
        projectnumber :'工程原片序号',
        state :'状态',
        createtime :'创建时间',
        all :'全选',
    }
}
    "northglassMESsystem": "北玻MES系统",
      login:{
          userErr:'请输入账号',
          pwErr:'请输入密码',
          user:'账号',
          password:'密码',
          login:'登录',
          loginSuccessful:'登录成功!',
          register:'注册',
          namea:'姓名不能为空',
          len:'长度不能超过16',
          passnull:'密码不能为空',
          leng:'密码长度不能低于6或超过16',
          spwn:'确认密码不能为空',
          depass:'两次密码不相同',
      },
      register:{
          registerSuccessful:'注册成功',
          newuserregister:'注册新用户',
          name:'姓名:',
          inputname:'请输入姓名',
          password:'密码:',
          pwErr:'请输入密码',
          passwordation:'确认密码:',
          pwErration:'请确认密码',
          registration:'确认注册',
          false:'取消',
      },
      main:{
          connectErr:'服务器连接异常,请稍后再试',
          titleFirst:"欢迎 ",
          titleLast:' 使用北玻MES系统!',
          quit:"退出",
      },
      basicData:{
          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:'更新玻璃状态时发生错误',
          deletemessage:'是否删除该条信息?',
          layoutSequence:'序号',
      },
      sorter:{
          gridnumber:'栅格号',
          glassnumber:'玻璃编号',
          width:'宽',
          height:'高',
          startstatus:'启用状态',
          disable:'已禁用',
          start:'已启用',
          deficiencieste:'报缺',
          updown:'人工下片',
          operate:'操作',
          prompt:'提示',
          information:'是否报缺该条信息?',
          infor:'是否人工下片该条信息?',
          yes:'是',
          cancel:'取消',
      },
      order:{
          dilapidation:'破损',
          takeaway:'人工拿走',
          takeon:'摆片完成',
      },
      searchOrder:{
          searchlayout:'非钢化流程卡查询',
          fullfurnaces:'满炉数量',
          specifiedproject:'当前指定工程',
          undesignate:'取消指定',
          allnumber:'总数量',
          numbercages:'笼子内数量',
          missingquantity:'缺少数量',
          breakquantity:'破损/拿走数量',
          ceng:'层',
          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:'请输入玻璃类型',
          width:'宽',
          widtha:'宽:',
          inwidth:'请输入宽',
          height:'高',
          heighta:'高:',
          inheight:'请输入高',
          coatingtypes:'膜系',
          thickness:'厚度',
          thicknessa:'厚度:',
          inthickness:'请输入厚度',
          layoutID:'钢化版图ID',
          layoutIDa:'钢化版图ID:',
          inlayoutID:'请输入钢化版图ID',
          picturesequence:'钢化版图片序',
          picturesequencea:'钢化版图片序:',
          inpicturesequence:'请输入钢化版图片序',
          startstatus:'启用状态',
          startstatusa:'启用状态:',
          instartstatus:'请输入启用状态',
          glassgaps:'玻璃间隙',
          glassgapsa:'玻璃间隙:',
          inglassgaps:'请输入玻璃间隙',
          sure:'确认',
          cancel:'取消',
          operate:'操作',
          breakage:'破损',
          delete:'删除',
          outfilm:'出片',
          cagetableID:'大理片笼表ID',
          cagenumber:'理片笼号',
          gridnumber:'栅格号',
          gridnumbera:'栅格号:',
          grid:'请输入栅格号',
          enable:'已启用',
          disable:'已禁用',
          remainingwidth:'剩余宽度',
          add:'添加',
          sheetID:'钢化小片信息表ID',
          processcards:'流程卡',
          processcardtype:'流程卡玻璃类型',
          acceptshorizontal:'钢化是否接受横放',
          xcoordinates:'x坐标',
          ycoordinates:'y坐标',
          rotationangle:'旋转角度(逆时针)',
          state:'状态',
          takeout:'拿走',
          deletemessage:'是否删除该条信息?',
          prompt:'提示',
          yes:'是',
          accept:'接受',
          noaccept:'不接受',
          filmcomplete:'出片完成',
          waiting:'等待中',
          broke:'是否破损该条信息?',
          brokeb:'是否拿走该条信息?',
          outfil:'是否出片该条信息?',
          inputid:'请输入玻璃ID',
          search:'搜索',
          tabid:'大理片笼详情表id',
          tid:'设备id',
          tida:'设备id:',
          fin:'是否完成任务?',
          sureadd:'确认添加',
          sureadda:'是否确认添加?',
          zailong:'在笼中',
          rengongxp:'人工下片',
          up:'上一页',
          down:'下一页',
          now:'当前页显示',
          tit:'条数据',
          temperingqueries:'钢化查询',
          specifytempering:'指定一炉',
          specifyout:'指定人工出片',
          specifyengineerid:'指定工程',
          projectnumber:'工程号',
          layoutnumber:'钢化版图号',
          numberglasses:'玻璃数量',
          specifytemperinga:'是否指定钢化该条信息?',
          temperedswitch:'钢化开关',
          dutyinformation:'值班信息',
          line:'线路',
          process:'工序',
          team:'班组',
          basic:'设备',
          makesure:'确认保存',
          cancel:'取消',
          temperingtotal:'钢化炉数:',
          glasstotal:'玻璃总数:',
      },
      workOrder:{
          glassID:'玻璃ID',
          height:'高',
          width:'宽',
          thickness:'厚度',
          coatingtypes:'膜系',
          productionsequence:'出片顺序',
          cardnumber:'流程卡号',
          operate:'操作',
          messagedamaged:'是否破损该条信息?',
          prompt:'提示',
          yes:'是',
          cancel:'取消',
          takemessage:'是否拿走该条信息?',
          breakage:'破损',
          takeout:'拿走',
          glasstype:'玻璃类型',
          line:'线路',
          status:'状态',
          time:'时间段',
          cway:'请选择线路',
          cstate:'请选择状态',
          edgingone:'磨边一线',
          edgingtwo:'磨边二线',
          nedging:'未磨边',
          edging:'磨边中',
          finedging:'已磨边',
      },
      processCard:{
          intofurnace:'进炉中',
          beforefurnace:'进炉前',
          outfurnace:'已出炉玻璃',
          print:'拿走打印',
          printing:'打印',
          projectnumber:'请输入工程号',
          inquire:'查询',
          project:'工程号',
          awayprocess:'拿走工序',
          awayequipment:'拿走设备',
          awayteam:'拿走班组',
          flowcard:'流程卡',
          layer:'层号',
          temperinglayout:'炉号',
          temperingfeed:'片序',
          width:'宽',
          height:'高',
          thickness:'厚',
          glasstakeout:'玻璃拿走清单',
          layoutID:'版图ID',
          glassID:'玻璃ID',
      },
      reportWork:{
          details:'落架详情',
          filming:'人工下片',
          printing:'自动打印',
          cenumber:'层数',
          artificialorder:'人工下片数',
          processcard:'打印流程卡',
          printlabels:'打印标签',
          information:'落架信息',
          cstation:'请选择工位',
          all:'全部',
          timeperiod:'时间段',
          stationnumber:'工位号',
          order:'顺序',
          filminformation:'人工下片信息',
          glassmation:'人工下片当前玻璃信息',
          barcodescanner:'扫码枪当前玻璃信息',
          lowerbit:'下片位',
          shelfnumber:'架号',
          cardnumber:'流程卡号',
          totalquantity:'总数量',
          beendropped:'已落架数量',
          state:'状态',
          devicenumber:'设备号',
          startstatus:'启用状态',
          enable:'已启用',
          unenable:'未启用',
          operate:'操作',
          bindingshelves:'绑定架子',
          clear:'清空',
          workstation:'号工位',
          shelfnumbera:'架号:',
          cardnumbera:'流程卡号:',
          incardnumber:'请选择流程卡号',
          clearglass:'清除架子玻璃',
          sure:'确认',
          cancel:'取消',
          glassinformation:'玻璃信息',
          glassID:'玻璃ID',
          coatingtypes:'膜系',
          thickness:'厚度',
          width:'宽度',
          height:'高度',
      },
      productStock:{
          addusers:'添加用户',
          username:'用户名',
          usernamea:'用户名:',
          inusername:'请输入用户名',
          role:'角色',
          rolea:'角色:',
          inrole:'请选择角色',
          test:'测试',
          admin:'管理员',
          operate:'操作',
          resetpassword:'重置密码',
          exit:'编辑',
          delete:'删除',
          prompt:'提示',
          repassword:'是否重置用户密码?',
          yes:'是',
          cancel:'取消',
          reusername:'修改用户',
          addusername:'添加用户',
          password:'密码:',
          sure:'确认',
          inpassword:'请输入密码',
          deusername:'是否删除该用户?',
      },
      customer:{
          addmenua:'添加二级菜单',
          addmenu:'添加一级菜单',
          firstmenu:'一级菜单栏',
          firstmenuname:'一级菜单名称:',
          link:'链接',
          inlink:'请输入链接',
          linka:'链接:',
          sort:'排序',
          insort:'请输入排序',
          sorta:'排序:',
          operate:'操作',
          exit:'编辑',
          delete:'删除',
          semenu:'二级菜单栏',
          semenuname:'二级菜单名称:',
          menu:'菜单栏:',
          inmenu:'请输入菜单名称',
          sure:'确认',
          cancel:'取消',
          exmene:'修改一级菜单',
          exmenea:'修改二级菜单',
          yes:'是',
          demenu:'是否删除该菜单?',
          prompt:'提示',
      },
      delivery:{
          addrole:'添加角色',
          editrole:'修改角色',
          role :'角色',
          rolea :'角色:',
          inrole :'请输入角色',
          operate :'操作',
          edit :'编辑',
          delete :'删除',
          yes:'是',
          sure :'确认',
          cancel :'取消',
          derole :'是否删除该角色',
          prompt:'提示',
          choice:'菜单权限:',
          inchoice:'请选择菜单权限',
      },
      replenish:{
          patchManagement:'补片管理',
      },
      rework:{
          reworkManagement:'返工管理',
          addRework:"返工新增 ",
      },
      role:{
          id:'ID',
          characterHomepage:'角色首页',
      },
      user:{
          userId:'用户ID',
          userHomepage:'用户首页',
      },
      orderBasicData:{
          order:'订单',
          orderType:'订单类型',
      },
      machine:{
          basicId:'设备编号',
          basicName:'设备名称',
          basicCategory:'所在工序',
          tempering:'钢化',
      },
      report:{
          productionReport:'生产报表',
          workInProgressReport:'在制品报表',
      },
      productionBasicData:{
          basicDataQuery :'基础数据查询',
      },
      mainIngredient:{
          materialInformation :'物料资料',
      },
      mainIngredientStock:{
          materialName :'物料名称',
          createTime :'返库日期',
      },
      large:{
          time: '次破时间',
          number: '订单号',
          jobnumber: '报工编号',
          productionnumber: '生产订单号',
          cardnumber: '流程卡号',
          projectname: '项目名称',
          batch: '批次',
          detailID: '明细ID',
          building: '楼号',
          serialnumber: '订单序号',
          productname: '产品名称',
          serial: '工艺确认序号',
          slicemarker: '片标记(位置)',
          numberpatches: '补片数量',
          width: '宽',
          height: '高',
          shape: '形状',
          responsibleprocess: '责任工序',
          process: '本工序',
          numberfractions: '次破未补数量',
          breakreason: '次破原因',
          breaktype: '次破类型',
          responsiblepersonnel: '责任人员',
          responsiblequipment: '责任设备',
          responsibleteam: '责任班组',
          area: '次破面积',
          inspector: '质检员',
          operate: '操作',
          mes: '详情',
          projectnumber: '工程单号',
          brokeno: '报次破未补',
          close: '关闭',
          orderId: '订单ID',
          customerName: '客户名称',
          project: '项目名称',
          are: '面积',
          quantity: '数量',
          warehousing: '状态',
          deliveryDate: '送货时间',
          notstocked: '未入库',
          inboundstatus: '部分入库状态',
          allstatus: '全部入库状态',
          completedquantity: '完成数量',
          scrapquantity: '报废数量',
          number: '数量',
          method: '加工方式',
          innumber: '已入数量',
          productstatus: '生产状态',
          projectnumber: '工程号',
          right: '正常',
          stop: '终止',
          inquire: '查询',
          starttime :'开始时间',
          endtime :'结束时间',
          loading :'正在上片:',
      },
      reportmanage:{
          productiontime :'生产时间',
          starttime :'开始时间',
          endtime :'结束时间',
          ctype :'清选择类型',
          cstate :'清选择状态',
          cprocess :'清选择工序',
          all :'全部',
          completed :'完工',
          broke :'破损',
          takeout :'拿走',
          dreportwork :'未报工',
          pendingwork :'待报工',
          reportwork :'已报工',
          incise :'切割',
          edging :'磨边',
          steel :'钢化',
          inquire :'查询',
          signingwork :'报工',
          reporteam :'报工班组',
          reportingequipment :'报工设备',
          line :'线路',
          process :'工序',
          glassID :'玻璃ID',
          projectnumber :'工程号',
          layoutID :'钢化版图ID',
          productiontime :'生产时间',
          type :'类型',
          state :'状态',
          processcards :'流程卡',
          number :'序号',
          layer :'层',
          typebreakage :'破损类型',
          ptypebreakage :' 请选择破损类型',
          causebreakage :'破损原因',
          pcausebreakage :'请选择破损原因',
          responsibleprocess :'责任工序',
          responsiblepersonnel :'责任人员',
          presponsiblepersonnel :'请输入责任人员',
          responsibleteam :'责任班组',
          presponsibleteam :'请选择责任班组',
          responsibleequipment :'责任设备',
          presponsibleequipment :'请选择责任设备',
          remark :'备注',
          premark :'请输入备注',
      },
      film:{
          mes:'原片仓储详情',
          warehousing:'入库',
          operate: '操作',
          exit:'编辑',
          delete:'删除',
          outbound:'出库',
          deviceid:'设备ID',
          slot:'栅格号',
          enablestatea:'启用标记',
          disable:'禁用',
          start:'启用',
          startslot:'开始工位',
          endslot:'目标工位',
          slotid:'格子ID',
          slot:'格子号',
          width:'原片宽',
          widtha:'原片宽:',
          inwidth:'请输入原片宽',
          height:'原片高',
          inheight:'请输入原片高',
          heighta:'原片高:',
          thickness:'原片厚度',
          inthickness:'请输入原片厚度',
          thicknessa:'原片厚度:',
          films:'膜系',
          infilms:'请输入膜系',
          filmsa:'膜系:',
          createtime:'创建时间',
          remainquantity:'剩余数量',
          thickremainquantity:'原片剩余数量(张):',
          inquantity:'请输入数量',
          quantitya:'数量:',
          enableid:'任务ID',
          originateslot:'起始格子',
          endslot:'目标格子',
          patternquantity:'原片数量',
          enabletype:'任务类型',
          enablestate:'工位状态',
          finish:'已完成',
          unfinish:'未完成',
          dedelete:'是否删除该条内容?',
          dedisable:'是否禁用该条内容?',
          deoutbound:'是否出库该条内容?',
          selectwarehousing:'请选择吊装位',
          inwarehousing:'吊装位:',
          warehousing1:'吊装位1',
          warehousing2:'吊装位2',
          starttime :'开始时间',
          endtime :'结束时间',
          taskstatus :'任务状态',
          built :'新建',
          execution :'执行中',
          finish :'完成',
          tasktype :'任务类型',
          stocke :'入库',
          outbound :'出库',
          dispatch :'调度',
          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
@@ -213,7 +213,7 @@
            }
          ]
        },
         /*----------- 可视化系统 ----------------*/
         {
          path: 'Visualization',
@@ -323,7 +323,7 @@
    
  ]
})
// 导航守卫  
router.beforeEach((to, from, next) => {  
  const isAuthenticated = !!localStorage.getItem('authToken'); // 假设这是你的登录状态检查逻辑  
@@ -333,4 +333,4 @@
    next(); // 否则继续导航  
  }  
}); 
export default router
export default router
UI-Project/src/utils/constants.js
@@ -1,4 +1,4 @@
//  export const WebSocketHost = "192.168.1.199";
export const WebSocketHost = "10.153.19.150";
 export const WebSocketHost = "192.168.1.199";
// export const WebSocketHost = "10.153.19.150";
// export const WebSocketHost = "127.0.0.1";
export const host = "88";
UI-Project/src/views/NewPage.vue
@@ -1,151 +1,151 @@
<template>  
    <div>
  <div style="display: flex;">
    <div style="margin-left: 50px;margin-top: 15px;font-size:large">工程号:</div>
  <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 {onMounted, ref, watch} 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);
    <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)
         }  
       });
     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;
       } 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;
   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) {
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);
        }
        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;
      });
    }
  });
      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] || [];
return adjustedRectsPerRow.value[rowIndex] || [];
}  
     </script>
  <style scoped>
.row {
  display: flex;
  justify-content: space-between;
  margin-bottom: 20px;
}
   </script>
  
.div-container {
  width: 900px;
  float: left;
  background-color: #f4f4f5;
  height: 430px;
  box-sizing: border-box;
<style scoped>
.row {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}  
  </style>
.div-container {
width: 900px;
float: left;
background-color: #f4f4f5;
height: 430px;
box-sizing: border-box;
}
</style>
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -272,7 +272,7 @@
        widtha = rect.width;
        heighta = rect.height;
      }
  if (rect.angle === 0) {
  if (rect.angle === 0) {
    adjustedWidth = widtha * scaleFactor;  
    adjustedHeight = heighta * scaleFactory;  
    // adjustedWidtha = widtha;  
@@ -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
@@ -5,19 +5,19 @@
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%;
UI-Project/src/views/Returns/returns.vue
@@ -723,7 +723,7 @@
    <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 :disabled="!canSelectProject" style="margin-top: 5px;margin-left: 15px;"  type="primary" @click="selectproject">{{ $t('basicData.selectproject') }}</el-button>
    <el-button :disabled="!canSelectProject" :style="{ backgroundColor: canStartLoading ? 'green' : 'initial',color: canStartLoading ? 'white' : 'black', }" style="margin-top: 5px;margin-left: 20px;"  @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
UI-Project/src/views/Returns/upreturns.vue
@@ -1,27 +1,29 @@
<script lang="ts" setup>
import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue";
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
import {ElMessage} from 'element-plus'
import {useI18n} from 'vue-i18n'
import {host, WebSocketHost} from '@/utils/constants'
import request from "@/utils/request"
import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
const router = useRouter()
const {t} = useI18n()
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 flake = ref(false)
const flakea = ref(false)
const flakeb = ref(false)
const flakec = ref(false)
const dialoglea = ref(false)
const tableDatax = ref([])
const user = ref('');
@@ -35,160 +37,39 @@
const number = ref('');
const canSelectProject = ref(true);
const canStartLoading = ref(false);
const ida = ref(null);
const selectedProjectNo = ref(''); // 当前选中的工程号
const selectedProjectNoa = ref(''); // 当前选中的工程号
const selectedValue = ref(''); // 当前选中的宽  
const selectedValuea = ref('');
const selectedValuea = ref('');
const selectedValueb = ref('');
const selectedValuec = 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 fetchTableData = async () => {
  try {
    const response = await request.get("/loadGlass/up-patten-usage/prioritylist");
    // 检查响应状态
    if (response.code === 200) {
      // 更新表格数据
      console.log('成功获取表格数据:', response.data);
      tableData.splice(0, tableData.length, ...response.data);
      // window.localStorage.setItem('engineeringId', response.data[0].engineeringId)
      // 获取唯一值
      const uniqueWidths = new Set(response.data.map(item => item.width));
      const uniqueHeights = new Set(response.data.map(item => item.height));
      const uniqueFilmsIds = new Set(response.data.map(item => item.filmsId));
      const uniqueThicknesses = new Set(response.data.map(item => item.thickness));
      selectOptions.value = Array.from(uniqueWidths).map(width => ({
        value: width, // 假设这是你想要作为value的属性
        label: width, // 假设这是你想要显示的label
      }));
      selectOptionsa.value = Array.from(uniqueHeights).map(height => ({
        value: height,
        label: height,
      }));
      selectOptionsb.value = Array.from(uniqueFilmsIds).map(filmsId => ({
        value: filmsId,
        label: filmsId,
      }));
      selectOptionsc.value = Array.from(uniqueThicknesses).map(thickness => ({
        value: thickness,
        label: thickness,
      }));
    } else {
      ElMessage.error(response.message);
    }
  } catch (error) {
    // 处理请求失败的情况
    // ElMessage.error('获取表格数据失败,请重试');
  }
};
  const tableDataa = ref([])
  const tableData = reactive([]);
const handlezhiban = () => {
  dialoglea.value = true; // 打开绑定架子对话框
  fetchFlowCardId();
};
const selectproject = () => {
  dialogFormVisible.value = true;
  selectgong();
};
// 值班信息
const fetchFlowCardId = async () => {
  try {
    const response = await request.post('/loadGlass/work_assignment/selectWorkAssignment', {
      line: 2001,
      workingProcedure: '冷加工'
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      tableDatax.value = response.data;
      console.log(tableDatax.value);
      console
    } else {
      ElMessage.error(response.message);
    }
  } catch (error) {
    // 处理错误
    console.error(error);
  }
}
const handleConfirmb = async () => {
  const response = await request.post("/loadGlass/work_assignment/updateWorkAssignment", tableDatax.value)
  if (response.code === 200) {
    ElMessage.success(response.message);
    dialoglea.value = false;
  } else {
    ElMessage.error(response.message);
  }
};
onMounted(() => {
  list('');
  fetchOptions('');
  socket = initializeWebSocket(socketUrl, handleMessage);
  // socket = initializeWebSocket(socketUrl, handleMessage);
});
onUnmounted(() => {
  if (socket) {
  onUnmounted(() => {
    if (socket) {
    closeWebSocket(socket);
  }
});
const list = async () => {
  try {
    const response = await request.get('/loadGlass/LoadGlass/list');
    if (response.code == 200) {
      tableDataa.value = response.data
      if (tableDataa.value.length === 4) {
        if (tableDataa.value[0].patternHeight > 0 && tableDataa.value[0].patternWidth > 0 && tableDataa.value[0].number > 0) {
          flake.value = true;
        }
        if (tableDataa.value[1].patternHeight > 0 && tableDataa.value[1].patternWidth > 0 && tableDataa.value[1].number > 0) {
          flakea.value = true;
        }
        if (tableDataa.value[2].patternHeight > 0 && tableDataa.value[2].patternWidth > 0 && tableDataa.value[2].number > 0) {
          flakeb.value = true;
        }
        if (tableDataa.value[3].patternHeight > 0 && tableDataa.value[3].patternWidth > 0 && tableDataa.value[3].number > 0) {
          flakec.value = true;
        }
      }
    } else {
      ElMessage.warning(response.data);
    }
  } catch (error) {
    console.error('Error fetching options:', error);
  }
};
// 假设这是您的响应处理函数
// request.get("/loadGlass/LoadGlass/list").then((res) => {
//       if (res.code == 200) {
//           tableDataa.value = res.data
//           if (tableDataa.value.length === 4) {
//           if (tableDataa.value[0].patternHeight > 0) {
//           flake.value = true;
//           }
//          if (tableDataa.value[1].patternHeight > 0) {
//           flakea.value = true;
//           }
//          if (tableDataa.value[2].patternHeight > 0) {
//           flakeb.value = true;
//           }
//          if (tableDataa.value[3].patternHeight > 0) {
//           flakec.value = true;
//           }
//            }
//           } else {
//           ElMessage.warning(res.message)
//           // router.push("/login")
//           }
//           });
    });
//定义接收加载表头下拉数据
const titleSelectJson = ref({
  processType: [],
@@ -199,87 +80,12 @@
let socket = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  if (data.prioritylist != null) {
    tableData.splice(0, tableData.length, ...data.prioritylist[0]);
  }
  if (data.list != null) {
    tableDataa.value = data.list[0]
  }
  if (data.engineering) {
    if (Array.isArray(data.engineering) && data.engineering.length !== 0) {
      canSelectProject.value = false;
      canStartLoading.value = true;
    } else {
      canSelectProject.value = true;
      canStartLoading.value = false;
    }
  }
  if (data.InkageStatus) {
    if (data.InkageStatus != null) {
      const status = data.InkageStatus[0];
      cuttingMachine.value = status;
      upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa');
      cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005';
      inKageWord.value = status === '1' ? 0 : 1;
    }
  }
};
const requestData = {
  state: 100
};
const selectgong = async (queryString: string) => {
  try {
    const response = await request.post('/loadGlass/optimizeProject/listByState', {
      ...requestData,
      query: queryString
    })
    if (response.code == 200) {
      titleSelectJson.value.processType = response.data;
    } else {
      ElMessage.error(response.message);
    }
  } catch (error) {
    // 处理错误
    console.error(error);
  }
}
const fetchOptions = async (queryString: string) => {
  try {
    // 发送请求到后端接口
    const response = await request.post('/loadGlass/optimizeProject/listByState', {
      ...requestData,
      query: queryString // 将查询字符串作为参数传递
    });
    if (response.code == 200) {
      // titleSelectJson.value.processType = response.data;
      console.log(response.data);
    } else {
      ElMessage.warning(response.data);
    }
  } catch (error) {
    console.error('Error fetching options:', error);
  }
};
// 处理用户输入变化的方法
const handleInputChange = async (value: string) => {
  if (value) {
    await fetchOptions(value);
  } else {
    options.value = []; // 清空选项列表
  }
};
// 处理用户输入变化的方法
const handleInputChangea = async (value: string) => {
  if (value) {
    await fetchOptionsa(value);
  } else {
    options.value = []; // 清空选项列表
  }
};
const requestData = {
  state: 100
};
onBeforeUnmount(() => {
  closeWebSocket();
});
@@ -289,232 +95,16 @@
  ida.value = row.id;
  add.value = true; // 打开绑定架子对话框
};
// 添加
const handleConfirm = async () => {
  // console.log('id.value:', id.value);
  if ((ida.value === 2 || ida.value === 4) && (parseInt(selectedValuea.value, 10) >= 2700)) {
    try {
      const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
        id: workstationId.value,
        workstationId: workstationId.value,
        patternHeight: selectedValuea.value,
        patternWidth: selectedValue.value,
        filmsId: selectedValueb.value,
        patternThickness: selectedValuec.value,
        number: number.value
      });
      // window.localStorage.setItem('workstationId', workstationId.value)
      // window.localStorage.setItem('patternHeight', selectedValuea.value)
      // window.localStorage.setItem('patternWidth', selectedValue.value)
      // window.localStorage.setItem('number', number.value)
      if (response.code == 200) {
        // 绑定成功,处理逻辑
        ElMessage.success(response.message);
        // window.location.reload()
        add.value = false;
        tableDataa.value = response.data;
        // let workstationId = window.localStorage.getItem('workstationId')
        // let patternHeight = window.localStorage.getItem('patternHeight')
        // let patternWidth = window.localStorage.getItem('patternWidth')
        // let number = window.localStorage.getItem('number')
        if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '1') {
          flake.value = true
        } else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '2') {
          flakea.value = true
        } else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '3') {
          flakeb.value = true
        } else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '4') {
          flakec.value = true
        }
        //   if (patternHeight !== '0' && patternWidth !== '0' && number !== '0' && workstationId === '1') {
        //   flake.value = true
        // } else if (patternHeight !== '0' && patternWidth !== '0' && number !== '0' && workstationId === '2'){
        //   flakea.value = true
        // }else if (patternHeight !== '0' && patternWidth !== '0' && number !== '0' && workstationId === '3'){
        //   flakeb.value = true
        // }else if (patternHeight !== '0' && patternWidth !== '0' && number !== '0' && workstationId === '4'){
        //   flakec.value = true
        // }
        selectedValuea.value = '';
        selectedValue.value = '';
        selectedValueb.value = '';
        selectedValuec.value = '';
        number.value = '';
        list()
      } else {
        // 请求失败,显示错误消息
        ElMessage.error(response.message);
      }
    } catch (error) {
      // 处理请求错误
    }
  } else if (ida.value === 1 || ida.value === 3) {
    try {
      const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
        id: workstationId.value,
        workstationId: workstationId.value,
        patternHeight: selectedValuea.value,
        patternWidth: selectedValue.value,
        filmsId: selectedValueb.value,
        patternThickness: selectedValuec.value,
        number: number.value
      });
      if (response.code == 200) {
        // 绑定成功,处理逻辑
        ElMessage.success(response.message);
        // window.location.reload()
        add.value = false;
        tableDataa.value = response.data;
        if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '1') {
          flake.value = true
        } else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '2') {
          flakea.value = true
        } else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '3') {
          flakeb.value = true
        } else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '4') {
          flakec.value = true
        }
        selectedValuea.value = '';
        selectedValue.value = '';
        selectedValueb.value = '';
        selectedValuec.value = '';
        number.value = '';
        list()
      } else {
        // 请求失败,显示错误消息
        ElMessage.error(response.message);
      }
    } catch (error) {
      // 处理请求错误
    }
  } else {
    ElMessage({
      type: 'info',
      message: t('basicData.pause'),
    })
  }
};
// 删除
const handleConfirma = async () => {
  try {
    const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
      workstationId: workstationId.value,
      patternHeight: 0,
      patternWidth: 0,
      filmsId: "",
      patternThickness: 0,
      number: 0
    });
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      ElMessage.success(response.message);
      adda.value = false;
      tableDataa.value = response.data;
      // window.localStorage.setItem('workstationId', response.data.workstationId)
      // let workstationId = window.localStorage.getItem('workstationId')
      if (workstationId.value == '1') {
        flake.value = false
      } else if (workstationId.value == '2') {
        flakea.value = false
      } else if (workstationId.value == '3') {
        flakeb.value = false
      } else if (workstationId.value == '4') {
        flakec.value = false
      }
      list()
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
    }
  } catch (error) {
    // 处理错误
    console.error(error);
  }
};
// 选择工程确认
const handleup = async () => {
  try {
    const response = await request.post('/loadGlass/up-patten-usage/selectUpPattenUsage', {
      engineerId: selectedProjectNo.value,
    })
    window.localStorage.setItem('engineeringId', selectedProjectNo.value)
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      ElMessage.success(response.message);
      // window.location.reload()
      dialogFormVisible.value = false;
      tableData.splice(0, tableData.length, ...response.data);
      selectedProjectNo.value = ''
      markingMachineStatus.value = '#911005';
      cuttingMachineStatus.value = '#911005';
      const uniqueWidths = new Set(response.data.map(item => item.width));
      const uniqueHeights = new Set(response.data.map(item => item.height));
      const uniqueFilmsIds = new Set(response.data.map(item => item.filmsId));
      const uniqueThicknesses = new Set(response.data.map(item => item.thickness));
      selectOptions.value = Array.from(uniqueWidths).map(width => ({
        value: width,
        label: width,
      }));
      selectOptionsa.value = Array.from(uniqueHeights).map(height => ({
        value: height,
        label: height,
      }));
      selectOptionsb.value = Array.from(uniqueFilmsIds).map(filmsId => ({
        value: filmsId,
        label: filmsId,
      }));
      selectOptionsc.value = Array.from(uniqueThicknesses).map(thickness => ({
        value: thickness,
        label: thickness,
      }));
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
      // ElMessage.error(response.msg);
    }
  } catch (error) {
    // 处理错误
    console.error(error);
  }
}
// 开始上片
const handle = async () => {
  if (markingMachineStatus.value === 'green' && cuttingMachineStatus.value === 'green') {
    try {
      let engineeringId = window.localStorage.getItem('engineeringId')
      const response = await request.post('/loadGlass/engineering/engineering/changeTask', {
        engineerId: engineeringId,
        state: 1,
      })
      if (response.code == 200) {
        // 绑定成功,处理逻辑
        ElMessage.success(response.message);
        // window.location.reload()
        blind.value = false;
        selectedProjectNoa.value = '';
      } else {
        // 请求失败,显示错误消息
        ElMessage.error(response.message);
      }
    } catch (error) {
      // 处理错误
      console.error(error);
    }
  } else if (markingMachineStatus.value === '#911005' || cuttingMachineStatus.value === '#911005') {
    // 提示用户打标机未就绪
    ElMessage.warning(t('basicData.pausea'));
  }
}
// 暂停
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,
      })
  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;
@@ -530,54 +120,22 @@
        message: t('basicData.infonull'),
      })
    }
  } catch (error) {
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
// 停止任务
const handleb = 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);
        // window.location.reload()
        blindb.value = false;
        tableData.splice([]);
        // 请求失败,显示错误消息
        ElMessage.error(response.message);
      }
    } else {
      ElMessage({
        type: 'info',
        message: t('basicData.infonull'),
      })
    }
  } catch (error) {
    // 处理错误
    console.error(error);
  }
}
onMounted(fetchTableData);
function getStatusText(state: number) {
  switch (state) {
    case 0:
    case 0:
      return t('basicData.waiting');
    case 1:
    case 1:
      return t('basicData.up');
    case 2:
      return t('basicData.up');
    case 100:
      return t('basicData.finish');
    case 2:
    return t('basicData.up');
    case 100:
    return t('basicData.finish');
  }  
}  
function getStatusType(state: number) {  
@@ -602,207 +160,133 @@
};
// 停止任务
const handleBindb = (row) => {
  blindb.value = true;
  blindb.value = true;
};
// 删除
const handleBindRacka = (row) => {
  workstationId.value = row.workstationId;
  adda.value = true;
  adda.value = true;
};
// 定义一个响应式引用,用于存储颜色状态
const markingMachineStatus = ref('#911005');
const cuttingMachineStatus = ref('#911005');
// 定义一个方法来改变颜色状态
const confirmMarkingMachine = () => {
  markingMachineStatus.value = 'green';
};
const confirmCuttingMachine = () => {
  cuttingMachineStatus.value = 'green';
};
const toggleEnableState = async (row: any) => {
const toggleEnableState = async (row: any) => {
  // 检查 id 是否为空  
  if (!row.id) {
    ElMessage.error(t('basicData.updatanull'));
  if (!row.id) {
    ElMessage.error(t('basicData.updatanull'));
    return; // 如果 id 为空,则不执行后续操作  
  }
  const newState = row.state === 100 ? 0 : 100;
  try {
  }
  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) {
    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'));
  }
};
// 上片机联机状态
// const wsUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
// const ws = new WebSocket(wsUrl);
// ws.onopen = () => {
//   console.log('WebSocket连接已打开');
// };
// // 监听WebSocket的错误事件
// ws.onerror = (error) => {
//   console.error('WebSocket发生错误:', error);
// };
// // 监听WebSocket的关闭事件
// ws.onclose = (event) => {
//   if (event.wasClean) {
//     console.log('WebSocket连接已正常关闭');
//   } else {
//     console.error('WebSocket连接异常关闭');
//   }
// };
// // 监听WebSocket的消息事件
// ws.onmessage = (event) => {
//   try {
//     const data = JSON.parse(event.data.replace('<END>', '')); // 解析消息为JSON
//     if (data && Array.isArray(data.InkageStatus) && data.InkageStatus.length > 0) {
// if(data.InkageStatus!=null){
//       const status = data.InkageStatus[0];
//       cuttingMachine.value = status;
//             upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa');
//       cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005';
//       inKageWord.value = status === '1' ? 0 : 1;
// }
//     } else {
//       // 处理错误情况或无效数据
//       // console.error('接收到的数据无效', data);
//     }
//   } catch (error) {
//     // console.error('解析WebSocket消息时发生错误', error);
//   }
// };
const confirmCutting = async () => {
  try {
    const response = await request.post('/loadGlass/LoadGlass/updateMesInkageLoad',
        inKageWord.value
    );
    if (response.code == 200) {
      const status = response.data.status;
      upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa');
      cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005';
      // 显示成功消息
      ElMessage.success(response.message);
    } else {
      ElMessage.error(response.message || '请求失败');
    }
  } catch (error) {
    // 处理错误
    console.error('请求时发生错误', error);
    ElMessage.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 :disabled="!canSelectProject" style="margin-top: 5px;margin-left: 15px;" type="primary"
               @click="selectproject">{{ $t('Mounting.previewproject') }}
    </el-button>
    <el-button :disabled="!canSelectProject"
               :style="{ backgroundColor: canStartLoading ? 'green' : 'initial',color: canStartLoading ? 'white' : 'black', }"
               style="margin-top: 5px;margin-left: 20px;" @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[0]" clearable :placeholder="$t('film.taskstatus')"
               style="margin-top: 5px;margin-left: 20px;">
      <el-option :label="$t('film.built')" value="1"></el-option>
      <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-select v-model="selectValuesa[1]" clearable :placeholder="$t('film.tasktype')"
               style="margin-top: 5px;margin-left: 20px;">
      <el-option :label="$t('film.stocke')" value="1"></el-option>
      <el-option :label="$t('film.outbound')" value="2"></el-option>
      <el-option :label="$t('film.dispatch')" value="3"></el-option>
    </el-select>
    <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{
        $t('film.inquire')
      }}
    </el-button>
    <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('basicData.layoutSequence')" width="100" align="center"/>
          <el-table-column prop="engineeringId" :label="$t('basicData.projectnumber')" width="200" align="center"/>
          <el-table-column prop="width" :label="$t('basicData.glasswidth')" align="center"/>
          <el-table-column prop="height" :label="$t('basicData.glassheight')" align="center"/>
          <el-table-column prop="filmsId" :label="$t('basicData.coatingtypes')" align="center"/>
          <el-table-column :label="$t('basicData.quantity')" align="center">
            <template #default="{ row }">
              <!-- 这里总是显示 1 -->
              <span>{{ 1 }}</span>
            </template>
          </el-table-column>
          <el-table-column prop="thickness" :label="$t('basicData.thickness')" align="center"/>
          <!-- <el-table-column
                align="center"
                label="状态"
                min-width="80"
                prop="state"
              >
              <template #default="scope">
            <el-tag :type="getStatusType(scope.row.state)">
              {{ getStatusText(scope.row.state) }}
            </el-tag>
          </template>  -->
          <el-table-column
              align="center"
              :label="$t('basicData.startstatus')"
              min-width="80"
              prop="state"
    <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('basicData.pass') : $t('basicData.waiting') }}
              </el-tag>
          <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">
@@ -839,67 +323,35 @@
      </div>
    </template>
</el-dialog>
    <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('basicData.whetherpause')">
      <template #footer>
        <div id="dialog-footer">
          <el-button type="primary" @click="handlea">
            {{ $t('basicData.confirm') }}
          </el-button>
          <el-button @click="blinda = false">{{ $t('basicData.cancel') }}</el-button>
        </div>
      </template>
    </el-dialog>
    <!-- <el-dialog v-model="blindb" top="30vh" width="25%" title="是否停止任务?" >
      <template #footer>
        <div id="dialog-footer">
          <el-button type="primary" @click="handleb">
            确认
          </el-button>
          <el-button @click="blindb = false">取消</el-button>
        </div>
      </template>
    </el-dialog> -->
    <div id="parent">
      <img src="../../assets/shangpian.png" alt=""
           style="max-width: 40%;max-height: 40%;margin-top: 20px;margin-left: 340px;">
      <div id="overlay" v-show="flake"></div>
      <div id="overlaya" v-show="flakea"></div>
      <div id="overlayb" v-show="flakeb"></div>
      <div id="overlayc" v-show="flakec"></div>
  <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>
    <div style="margin-top: -300px;margin-left: 680px;">
      <el-table :data="tableDataa" border style="width: 85%"
                :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-column fixed="right" :label="$t('basicData.operate')" align="center" width="150">
          <template #default="scope">
            <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{
                $t('basicData.add')
              }}
            </el-button>
            <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">{{
                $t('basicData.delete')
              }}
            </el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <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">
    <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  
@@ -1017,20 +469,26 @@
      </div>
    </template>
  </el-dialog>
  </div>
  <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" :title="$t('basicData.project')">
    <div style="margin-left: 50px;margin-bottom: 10px;">
      <el-form-item :label="$t('basicData.projectnumber')" :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']"
        </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"  
@@ -1050,66 +508,31 @@
</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;
  margin-left: 20px;
  size: 50px;
  margin-top: 20px;
  margin-bottom: 10px;
}
#parent {
  position: relative;
  width: 1500px;
  margin-left: -300px
}
#overlayb {
  position: absolute;
  z-index: 1;
  width: 228px;
  height: 16px;
  background-color: #529b2e;
  margin-top: -303px;
  margin-left: 355px;
}
#overlayc {
  position: absolute;
  z-index: 1;
  width: 228px;
  height: 16px;
  background-color: #529b2e;
  margin-top: -303px;
  margin-left: 703px;
}
#overlay {
  position: absolute;
  z-index: 1;
  width: 228px;
  height: 16px;
  background-color: #529b2e;
  margin-top: -45px;
  margin-left: 355px;
}
#overlaya {
  position: absolute;
  z-index: 1;
  width: 228px;
  height: 16px;
  background-color: #529b2e;
  margin-top: -45px;
  margin-left: 703px;
}
</style>
UI-Project/src/views/Slicecage/slicecage.vue
@@ -1,17 +1,19 @@
<script lang="ts" setup>
import {useI18n} from 'vue-i18n'
import { useI18n } from 'vue-i18n'
  const { t } = useI18n()
  let language = ref(localStorage.getItem('lang') || 'zh')
import {Search} from "@element-plus/icons-vue";
import {useRouter} from "vue-router"
const router = useRouter()
import request from "@/utils/request"
import {host, WebSocketHost} from '@/utils/constants'
import {computed, onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue";
import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
import {ElMessage, ElMessageBox} from 'element-plus'
import PrintLabel from "@/views/UnLoadGlass/PrintCustomLabelSemi1.vue";
const dialogFormVisibleaDownGlasss = ref(false)
const scanGlass = ref([])
const {t} = useI18n()
let language = ref(localStorage.getItem('lang') || 'zh')
const router = useRouter()
import { tr } from "element-plus/es/locale";
const dialogFormVisible = ref(false)
const dialoglea = ref(false)
const dialogFormVisiblea = ref(false)
@@ -418,22 +420,22 @@
  }  
}; 
 // 指定钢化
const brokee = async (row, temperingFeedSequence) => {
 const brokee = async(row,temperingFeedSequence) => {
  try {
    const confirmResult = await ElMessageBox.confirm(
        t('searchOrder.specifytemperinga'),
        t('searchOrder.prompt'),
        {
          confirmButtonText: t('searchOrder.yes'),
          cancelButtonText: t('searchOrder.cancel'),
          type: 'warning',
        }
    const confirmResult = await ElMessageBox.confirm(
      t('searchOrder.specifytemperinga'),
      t('searchOrder.prompt'),
      {
        confirmButtonText: t('searchOrder.yes'),
        cancelButtonText: t('searchOrder.cancel'),
        type: 'warning',
      }
    ); 
    if (confirmResult === 'confirm') {  
      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/TemperingGlass",{
        engineerId: row.engineer_id,
        temperingLayoutId: row.tempering_layout_id,
        temperingFeedSequence: temperingFeedSequence
        temperingFeedSequence:temperingFeedSequence
    });
    if (response.code === 200) {
      ElMessage.success(response.message);
@@ -443,7 +445,7 @@
    }  
  } catch (error) {  
    console.error('发生错误:', error);  
  }
  }
  handleganghua();
}; 
 // 指定工程
@@ -659,7 +661,7 @@
  } catch (error) {  
    // console.error('Error fetching rects :', error);  
  }  
  
}); 
const fetchFlows = async () => {
@@ -675,7 +677,7 @@
  } 
}
 
const fetchFlow = async () => {
  try  {
    const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/selectTemperingGlass')
@@ -693,7 +695,7 @@
      });
      glasstotal.value = totalCount;
      fulltotals.value = fullCount;
    } else {
      ElMessage.error(response.message);
    }
@@ -955,7 +957,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-button style="margin-top: 10px;margin-left: 10px;margin-bottom: 10px;" id="searchButton" type="primary"
      @click="dialogFormVisibleaDownGlasss = true">人工下片
@@ -1605,21 +1607,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>
@@ -1629,23 +1631,15 @@
        :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>
              <el-button size="mini" type="text" plain @click="brokee(scope.row,0)">{{
                  $t('searchOrder.specifyout')
                }}
              </el-button>
              <el-button size="mini" type="text" plain @click="brokek(scope.row)">{{
                  $t('searchOrder.specifyengineerid')
                }}
              </el-button>
              <el-button size="mini" type="text" plain @click="brokee(scope.row,1)">{{ $t('searchOrder.specifytempering') }}</el-button>
              <el-button size="mini" type="text" plain @click="brokee(scope.row,0)">{{ $t('searchOrder.specifyout') }}</el-button>
              <el-button size="mini" type="text" plain @click="brokek(scope.row)">{{ $t('searchOrder.specifyengineerid') }}</el-button>
            </template>
        </el-table-column>
        </el-table>
@@ -1679,7 +1673,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
@@ -14,7 +14,7 @@
  import { useI18n } from 'vue-i18n'
  const { t } = useI18n()
  let language = ref(localStorage.getItem('lang') || 'zh')
const tableData = ref([])
const slot = ref('')
const requestData = {  
@@ -24,7 +24,7 @@
const selectValuesa = reactive([]);
// request.post("/cacheGlass/taskCache/selectEdgTask",{
//   ...requestData,  
// }).then((res) => {
//           if (res.code == 200) {
            
@@ -36,7 +36,7 @@
        
//           }
//           });
// 磨边任务查询
const setEdgGlassInfoRequest = async () => {
  let celllist=[]
@@ -63,9 +63,9 @@
  } else {
    ElMessage.error(response.message);
  }
}
// 破损
 const open = async(row) => { 
  try {
@@ -155,25 +155,25 @@
<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')
      }}</el-button>
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="750" ref="table" 
        @selection-change="handleSelectionChange"
@@ -189,8 +189,8 @@
              {{ scope.row.status==0?"未磨边":scope.row.status==1?"磨边中":"已磨边" }}
            </template>
        </el-table-column>
          <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }}</el-button>
@@ -202,7 +202,7 @@
    </el-card>
  </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%;}
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -10,7 +10,7 @@
import Landingindication from "./Landingindication.vue";
import Landingindicationtwo from "./Landingindicationtwo.vue";
import PrintLabel from "@/views/UnLoadGlass/PrintCustomLabelSemi1.vue";
const router = useRouter()
const { t } = useI18n()
let language = ref(localStorage.getItem('lang') || 'zh')
@@ -19,8 +19,8 @@
const autoPrint = ref(false)
const takeGlass = ref([])
const scanGlass = ref([])
const dialogFormVisiblea = ref(false)
const dialogFormVisiblea2 = ref(false)
const dialogFormVisibleaDownGlass = ref(false)
@@ -37,7 +37,7 @@
const flowCardOptions = ref('[]');
const tableData = reactive([]);
const downGlass = ref([]);
const selectValuesa = reactive({});
const selectOptionsa = ref([]);
const dialogTableVisible = ref(false)
@@ -48,14 +48,14 @@
const now = new Date();
const timeRange = ref([])
const browser = ref(false)
const handleChange = async () => {
  console.log("触发开关")
  try {
    const body = {
      flag: autoPrint.value, // 使用 ganghua.value 获取当前开关的状态
    };
    var url = "/unLoadGlass/downWorkStation/autoPrint?flag=" + autoPrint.value;
    const response = await request.post(url)
    if (response.code == 200) {
@@ -79,7 +79,7 @@
    browser.value = false
  }
}
const handleInputChangea = (value, rowId) => {
  // 更新对应行的 select 值
  selectValuesa[rowId] = value;
@@ -101,7 +101,7 @@
    const response = await request.get('unLoadGlass/downWorkStation/getflowCardId');
    console.log(response)
    if (response.code === 200) {
      flowCardOptions.value = response.data.filter(item => item !== null)
        .map(item => ({ flowcard_id: item.flow_card_id }));
      console.log(flowCardOptions.value);
@@ -126,7 +126,7 @@
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      console.log('绑定成功');
      ElMessage.success(response.message);
      updatePageData();
      dialogFormVisiblea.value = false;
@@ -156,8 +156,8 @@
    const response = await request.post('unLoadGlass/downWorkStation/clear', {
      workstationId: workstationId.value,
    });
    if (response.code === 200) {
      // 清除成功的逻辑
      console.log('清除成功');
@@ -184,7 +184,7 @@
  try {
    // 发送获取表格数据的请求,并等待响应
    const response = await request.get('unLoadGlass/downWorkStation/getone');
    // 检查响应状态
    if (response.code === 200) {
      // 更新表格数据
@@ -203,7 +203,7 @@
const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  if (data.downGlassInfos != null) {
    downGlass.value = data.downGlassInfos[0];
@@ -224,8 +224,8 @@
        takeGlass.value.width = height;
        takeGlass.value.height = width;
      }
  }
  if (data.scanGlass != null) {
    scanGlass.value = data.scanGlass[0];
@@ -239,7 +239,7 @@
      open1(scanGlass);
    }
  }
  //自动打印
  if (fullFlowCard.value == "" && autoPrint.value == true && browser.value == true) {
    for (let i = 0; i < tableData.length; i++) {
@@ -258,7 +258,7 @@
  if (data.params != null) {
    tableData.splice(0, tableData.length, ...data.params[0]);
  }
  //  console.log("更新后数据", data.params[0]);
};
// 初始化 WebSocket,并传递消息处理函数
@@ -277,30 +277,30 @@
  console.log("关闭了")
  closeWebSocket();
});
const getTagType = (status) => {
  return status === 1 ? 'success' : 'danger';
  // 根据状态值决定标签类型,这里假设状态为1时为成功(绿色),否则为失败(红色)
}
const toggleStatus = (row) => {
  // 切换料架状态的逻辑
  row.enableState = 1 - row.enableState; // Toggle between 0 and 1
  // 此处可以添加保存状态的逻辑,比如调用 API 更新数据
  updateRowStatus(row);
};
const updateRowStatus = async (row) => {
  try {
    // 假设你的后端 API 接收 PUT 请求,并且需要传递 row.id 和 row.enableState 参数
    const response = await request.post('unLoadGlass/downWorkStation/updateDownWorkstation', {
      enableState: row.enableState,
      id: row.id
    });
    console.log('Updated row status:', response.data);
    // 可以根据后端返回的数据进行进一步处理,比如更新本地状态等
@@ -309,10 +309,10 @@
    // 处理错误情况,比如提示用户更新失败
  }
};
// 查询数据
const selectDownGlassData = async () => {
  const response = await request.post("/unLoadGlass/downGlassInfo/setDownGlassInfoRequest", {
    workStationId: selectValuesa[0],
    engineerId: selectValuesa[1],
@@ -324,12 +324,12 @@
  } else {
    ElMessage.error(response.message);
  }
}
const open = async (row) => {
  printFlowCardId.value = row.flowCardId;
  printLayer.value = row.layer
  dialogTableVisible.value = true;
@@ -339,7 +339,7 @@
  }, 2000);
}
const open1 = async (row) => {
  printFlowCardId.value = row.flowCardId;
  printLayer.value = row.layer
  printGlassId.value = row.glassId
@@ -349,20 +349,20 @@
    //dialogTableVisible1.value = false;
  }, 1000);
}
const printFlowCard = () => {
  // 需要打印的局部区域赋予"print-wrap"的id
  let el = document.getElementById("child");
  let doc = document;
  let body = doc.body || doc.getElementsByTagName("body")[0];
  let printId = "print-" + Date.now();
  // 创建无副作用的打印容器(因不确定页面的打印元素有无其它样式)
  let content = doc.createElement("div");
  content.id = printId;
  // alert(/Chrome/.test(userAgent) && !/Edge/.test(userAgent));
  // 样式控制与打印无关的元素隐藏
  let style = doc.createElement("style");
  console.log("style1:" + style.innerHTML)
@@ -380,11 +380,11 @@
    "{display:block;}#" +
    printId +
    "{display: block; padding: 0; margin: 0;  width: 100%;  position: absolute; top: 0; left: 0; height: 100vh;  box-sizing: border-box;}} ";
  content.innerHTML = el.outerHTML;
  // // console.log("el.outerHTML", el.outerHTML);
  body.appendChild(style);
  // 与style元素设置的样式相配合
  // 把打印内容的元素添加到body(作为body的子元素,可用body的子选择器 '>' 控制打印样式)
  body.appendChild(content);
@@ -394,18 +394,18 @@
    body.removeChild(style);
  }, 20);
}
const printFlowCard1 = () => {
  // 需要打印的局部区域赋予"print-wrap"的id
  let el = document.getElementById("printFlowCard");
  let doc = document;
  let body = doc.body || doc.getElementsByTagName("body")[0];
  let printId = "print-" + Date.now();
  // 创建无副作用的打印容器(因不确定页面的打印元素有无其它样式)
  let content = doc.createElement("div");
  content.id = printId;
  // 样式控制与打印无关的元素隐藏
  let style = doc.createElement("style");
  style.innerHTML =
@@ -424,7 +424,7 @@
  content.innerHTML = el.outerHTML;
  // // console.log("el.outerHTML", el.outerHTML);
  body.appendChild(style);
  // 与style元素设置的样式相配合
  // 把打印内容的元素添加到body(作为body的子元素,可用body的子选择器 '>' 控制打印样式)
  body.appendChild(content);
@@ -434,10 +434,10 @@
    body.removeChild(style);
  }, 20);
}
// beforeUnmount(() => {
//   closeWebSocket();
// });
@@ -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>
@@ -502,46 +502,46 @@
            <el-option label="6" value="6"></el-option>
            <el-option label="7" value="7"></el-option>
          </el-select>
          <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('basicData.plselectproject')" clearable
            @input="handleInputChangea($event, row.id)">
            <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()">{{
            $t('reportmanage.inquire')
          }}
          </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;">
              <div
                :style="{ width: takeGlass.width + 'px', height: takeGlass.height + 'px', backgroundColor: '#e1f3d8', transform: 'scale(' + 800 / (takeGlass.width > takeGlass.height ? takeGlass.width : takeGlass.height) + ')' }">
              </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>
@@ -553,17 +553,17 @@
              style="display: flex; justify-content: center; align-items: center; width: 800px; height: 800px;position: relative;">
              <div
                :style="{ width: scanGlass.width + 'px', height: scanGlass.height + 'px', backgroundColor: '#e1f3d8', transform: 'scale(' + 800 / (scanGlass.width > scanGlass.height ? scanGlass.width : scanGlass.height) + ')' }">
              </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>
                <div>{{ scanGlass.width }}</div>
                <div>{{ scanGlass.height }}</div>
              </div>
            </el-card>
          </div>
@@ -584,9 +584,9 @@
        </div>
      </div>
    </el-card>
  </div>
  <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')">
    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
      <el-form size="mini" label-width="100px">
@@ -605,7 +605,7 @@
    </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleConfirm">
          {{ $t('reportWork.sure') }}
        </el-button>
@@ -623,7 +623,7 @@
      </div>
    </template>
  </el-dialog>
  <el-dialog id="sizePrintCalrd" v-model="dialogTableVisible" destroy-on-close>
    <print-flow id="child" :printFlowCardId="printFlowCardId" :printLayer="printLayer"
      style="width: 100%;height: 100%" />
@@ -631,7 +631,7 @@
  <el-dialog id="sizePrintCalrd1" v-model="dialogTableVisible1" destroy-on-close>
    <print-label id="printFlowCard" :printFlowCardId="printFlowCardId" :printLayer="printLayer" :printGlassId="printGlassId"  style="" />
  </el-dialog>
</template>
<style scoped>
#dt {
@@ -640,19 +640,19 @@
  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 {
  text-align: center;
  align-items: center;
@@ -662,21 +662,21 @@
  background-color: #337ecc;
  margin-left: 28%;
}
.awatch {
  max-width: 100%;
}
#main-body {
  margin-top: -40px;
  margin-left: 150px;
}
#main-bodya {
  margin-top: -40px;
  margin-left: 100px;
}
:deep(#sizePrintCalrd .el-dialog__body) {
  height: 85%;
  width: 100%;
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -2,12 +2,12 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.yulichang.base.MPJBaseServiceImpl;
import java.util.List;
@@ -29,7 +29,7 @@
    public List<TemperingGlassInfo> selectWaitingGlass() {
        //获取等待进炉中的玻璃信息
        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
        wrapper.select("Top 1 *").in("state", 1, 0, -1);
        wrapper.select("Top 1 *").in("state",1,0);
        TemperingGlassInfo glass=temperingMapper.selectOne(wrapper);
        if(glass!=null) {
            QueryWrapper<TemperingGlassInfo> glassinfo = new QueryWrapper<>();
hangzhoumesParent/common/servicebase/src/main/resources/mapper/FlowCardMapper.xml
@@ -27,7 +27,7 @@
        on pd.prod_id = od.product_id and pd.glass_sort = ogd.technology_number
        where fc.process_id = #{processId}
        <if test="technologyNumber != 0">
            and fc.technology_number = #{technologyNumber}
            and a.layer = #{technologyNumber}
        </if>
        <if test="technologyNumber != 0">
            and position(fc.technology_number in #{technologyNumber})
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -321,12 +321,12 @@
                .eq(OptimizeHeatDetail::getProjectNo, current)
        );
        Map<String, List<Map<String, Object>>> groupBy = resultCutTerritory.stream().collect(Collectors.groupingBy(item -> item.get("layout_id").toString()));
        Map<String, List<Map<String, Object>>> groupBy=resultCutTerritory.stream().collect(Collectors.groupingBy(item->item.get("layout_id").toString()));
//        List<List<Map<String, Object>>> Result=groupBy.values().stream().collect(Collectors.toList());
        List<List<Map<String, Object>>> result = new ArrayList<>();
        for (int i = 1; i <= groupBy.keySet().size(); i++) {
            String key = i + "";
            if (key != null) {
        List<List<Map<String, Object>>> result=new ArrayList<>();
        for (int i=1;i<=groupBy.keySet().size();i++) {
            String key=i+"";
            if(key!=null){
                result.add(groupBy.get(key));
            }
        }
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -80,12 +80,6 @@
    @Value("${mes.max.secondLength}")
    private String secondLength;
    @Value("${mes.cache.cacheWidth}")
    private double cacheWidth;
    @Value("${mes.cache.cacheHeight}")
    private double cacheHeight;
    @Value("${mes.min.one.firstLength}")
    private String minOneFirstLength;
@@ -100,7 +94,7 @@
    public static String engineerId = "";
    @Scheduled(fixedDelay = 1000)
    //@Scheduled(fixedDelay = 1000)
    public void plcHomeEdgTask() {
        Date startDate = new Date();
        log.info("本次任务开始执行时间:{}", startDate);
@@ -113,13 +107,6 @@
        String out10Glassstate = plcParameterObject.getPlcParameter("A10_glass_status").getValue();
        String confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress();
        String currentSlot = plcParameterObject.getPlcParameter("Current_slot").getValue();
//        taskRequestTypeValue = "3";
//        out08Glassstate = "1";
//        out10Glassstate = "1";
//        currentSlot = "2";
//        confirmationWrodValue = "0";
//        glassIdeValue = "P24092706|15|5";
        log.info("1、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态分别为:A09:{}、A10:{},当前格子号为:{}",
                taskRequestTypeValue, glassIdeValue, confirmationWrodValue, out08Glassstate, out10Glassstate, currentSlot);
@@ -145,7 +132,7 @@
            //09空闲 :1      10空闲 :2        都空闲:3    其他0
            log.info("2、出片请求,且确认字为0,执行出片任务");
            outTo(Integer.parseInt(out08Glassstate),
                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", Integer.parseInt(currentSlot));
                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", 0);
        } else if ("3".equals(taskRequestTypeValue)) {
            log.info("2、进片和出片都空闲,执行出片任务");
            //加笼子里面是否有玻璃,有先出,无玻璃先进
@@ -178,9 +165,9 @@
                Damage damage = new Damage();
                damage.setGlassId(e.getGlassId());
                damage.setLine(e.getEndCell());
                damage.setWorkingProcedure("磨边");
                damage.setWorkingProcedure("冷加工");
                damage.setRemark("磨边前卧式理片");
                damage.setStatus(1);
                damage.setStatus(0);
                damage.setType(e.getTaskStatus());
                return damage;
            }).collect(Collectors.toList());
@@ -200,16 +187,6 @@
     */
    public void inTo(String glassId, String confirmationWrodAddress, String currentSlot) {
        log.info("1、按照玻璃id:{}获取玻璃小片信息,当前格子为:{}", glassId, currentSlot);
        GlassInfo feedGlassInfo = glassInfoService.getOne(
                new LambdaQueryWrapper<GlassInfo>()
                        .eq(GlassInfo::getGlassId, glassId)
        );
        if (Math.max(feedGlassInfo.getWidth(), feedGlassInfo.getHeight()) > cacheWidth || Math.min(feedGlassInfo.getWidth(), feedGlassInfo.getHeight()) > cacheHeight) {
            log.info("1.1、玻璃超过卧式理片最大尺寸:{}", feedGlassInfo);
            return;
        }
        //添加进片任务  查找空格
        EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(Integer.parseInt(currentSlot), Boolean.FALSE);
        Assert.isTrue(null != nearestEmpty, "格子已满");
@@ -256,14 +233,11 @@
                .eq(GlassInfo::getHeight, glassInfo.getHeight())
                .eq(GlassInfo::getThickness, glassInfo.getThickness())
                .eq(GlassInfo::getFilmsid, glassInfo.getFilmsid())
                .eq(GlassInfo::getFlowCardId, glassInfo.getFlowCardId())
                .ne(GlassInfo::getGlassId, glassInfo.getGlassId())
                .eq(GlassInfo::getTotalLayer, glassInfo.getTotalLayer())
                .eq(GlassInfo::getLayer, glassInfo.getLayer())
                .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId())
                .notInSql(GlassInfo::getGlassId, "select distinct glass_id from edg_storage_cage_details " +
                        "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()
                        + " and state != 100")
                        "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight())
                .orderByAsc(GlassInfo::getTemperingLayoutId)
                .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)
                .last("Limit 1");
@@ -298,28 +272,17 @@
//        获取待出笼的玻璃需要替换的玻璃信息
        EdgStorageCageDetails swapGlassDetailInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                .eq(EdgStorageCageDetails::getGlassId, swapGlassId).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
//      玻璃小片表中玻璃已经替换,更新卧理笼内现有的准备出笼的玻璃信息,
        if (null == swapGlassDetailInfo) {
            GlassInfo glassInfoBase = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                    .eq(GlassInfo::getGlassId, swapGlassId));
            //需要替换的玻璃为存进卧理,仅需更新当前需要出笼的玻璃信息即可
            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
                    .eq(EdgStorageCageDetails::getGlassId, glassId)
                    .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfoBase.getTemperingLayoutId())
                    .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfoBase.getTemperingFeedSequence()));
                    .eq(EdgStorageCageDetails::getGlassId, glassId).set(EdgStorageCageDetails::getGlassId, swapGlassId));
        } else {
            //需要替换的玻璃都在卧理内,按照玻璃id对调玻璃信息:对调玻璃id即可
            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
                    .eq(EdgStorageCageDetails::getId, glassInfo.getId())
                    .set(EdgStorageCageDetails::getTemperingLayoutId, swapGlassDetailInfo.getTemperingLayoutId())
                    .set(EdgStorageCageDetails::getTemperingFeedSequence, swapGlassDetailInfo.getTemperingFeedSequence())
            );
                    .eq(EdgStorageCageDetails::getId, glassInfo.getId()).set(EdgStorageCageDetails::getGlassId, swapGlassId));
            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
                    .eq(EdgStorageCageDetails::getId, swapGlassDetailInfo.getId())
                    .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
                    .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence())
            );
                    .eq(EdgStorageCageDetails::getId, swapGlassDetailInfo.getId()).set(EdgStorageCageDetails::getGlassId, glassId));
        }
    }
@@ -454,7 +417,7 @@
                }
            }
        }
        return saveOutGlassMessageBySlot(glassInfo, endcell, confirmationWrodAddress, glassId, currentSlot);
        return saveOutGlassMessage(glassInfo, endcell, confirmationWrodAddress, glassId, currentSlot);
    }
    /**
@@ -696,7 +659,6 @@
            log.info("4、添加出片任务,玻璃id:{},任务类型:{},起始位置:{},结束位置:{}", glassInfo.getGlassId(),
                    2, glassInfo.getSlot(), endcell);
            if (glassInfo.getGlassId().equals(glassId)) {
                log.info("5、直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo);
                EdgStorageCageDetails details = new EdgStorageCageDetails();
                BeanUtils.copyProperties(glassInfo, details);
@@ -756,7 +718,7 @@
                    BeanUtils.copyProperties(glassInfo, details);
                } else {
                    GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
                    BeanUtils.copyProperties(one, details);
                    BeanUtils.copyProperties(glassInfo, details);
                }
                EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(currentSlot, Boolean.TRUE);
                Assert.isTrue(null != nearestEmpty, "格子已满,无法执行直通任务");
@@ -768,7 +730,7 @@
                log.info("6、添加出片任务是否完成:{}", taskCacheStatus);
            } else {
                log.info("5、非直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo);
                if (!glassInfo.getSlot().equals(currentSlot)) {
                if (endcell != currentSlot) {
                    EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                            .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
                            .eq(EdgStorageCageDetails::getSlot, currentSlot).eq(EdgStorageCageDetails::getWidth, glassInfo.getWidth())
@@ -776,6 +738,7 @@
                    );
                    if (null != currentGlass) {
                        glassInfo = currentGlass;
                        endcell = currentSlot;
                    }
                }
                //玻璃信息替换
@@ -805,7 +768,6 @@
        }
        return Boolean.FALSE;
    }
    /**
     * 添加理片笼任务
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -15,7 +15,7 @@
mes:
  threshold: 3
  ratio: 10
  cache: # 卧式理片最大尺寸
cache: # 卧式理片最大尺寸
    cacheWidth: 4000
    cacheHeight: 3000
  max: # 第二条线的最大尺寸信息
@@ -30,7 +30,12 @@
      secondLength: 400
  sequence:
    order: false
kangaroohy:
  milo:
    enabled: false
    primary: default
    config:
      default:
        endpoint: opc.tcp://127.0.0.1:49320
        security-policy: basic256sha256
        username: zsh
        password: 1qaz2wsx3edc4rfv
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import com.mes.bigstorage.service.BigStorageCageService;
@@ -91,8 +92,7 @@
    @ApiOperation("指定钢化")
    @PostMapping("/TemperingGlass")
    public Result temperingGlass(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
        boolean result = bigStorageCageDetailsService
                .temperingGlass(bigStorageCageDetails.getTemperingLayoutId().toString(), bigStorageCageDetails.getEngineerId(), bigStorageCageDetails.getTemperingFeedSequence().toString());
        boolean result = bigStorageCageDetailsService.temperingGlass(bigStorageCageDetails.getTemperingLayoutId().toString(), bigStorageCageDetails.getEngineerId());
        if (result == true) {
            return Result.build(200, "指定钢化成功", 1);
        } else {
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -69,7 +69,7 @@
     */
    List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId);
    boolean temperingGlass(String temperingLayoutId, String engineerId, String temperingFeedSequence);
    boolean temperingGlass(String temperingLayoutId, String engineerId);
    List<Map<String, Object>> selectTemperingGlass();
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -2,6 +2,7 @@
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.github.yulichang.toolkit.JoinWrappers;
@@ -26,7 +27,6 @@
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.mapper.GlassInfoMapper;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.job.PlcStorageCageTask;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
import com.mes.temperingglass.service.TemperingGlassInfoService;
@@ -70,9 +70,6 @@
    @Resource
    private TemperingGlassInfoService temperingGlassInfoService;
    @Resource
    private PlcStorageCageTask plcStorageCageTask;
    @Resource
    private DamageService damageService;
@@ -191,7 +188,7 @@
        LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper = new LambdaQueryWrapper<>();
        bigStorageCageDetailsWrapper
                .eq(BigStorageCageDetails::getGlassId, glassId)
                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN);
                .eq(BigStorageCageDetails::getState,Const.GLASS_STATE_IN);
        BigStorageCageDetails bigStorageCageDetails = baseMapper.selectOne(bigStorageCageDetailsWrapper);
        if (temperingGlassInfo != null) {
@@ -224,7 +221,7 @@
    @Override
    public List<BigStorageCageDetails> selectBigStorageCageDetails(String glassId) {
        LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>();
        List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>();
        List<BigStorageCageDetails> bigStorageCageDetailsList=new ArrayList<>();
        glassInfoWrapper.eq(GlassInfo::getGlassId, glassId);
        GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper);
        BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
@@ -279,8 +276,8 @@
                .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight()))
                .last("limit 1");
        if (glassInfo.getTemperingLayoutId() == 0) {
            wrapper.eq(BigStorageCageDetails::getFlowCardId, glassInfo.getFlowCardId())
                    .eq(BigStorageCageDetails::getLayer, glassInfo.getLayer());
            wrapper.eq(BigStorageCageDetails::getFlowCardId,glassInfo.getFlowCardId())
                    .eq(BigStorageCageDetails::getLayer,glassInfo.getLayer());
//            wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight());
        } else {
            wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1);
@@ -366,7 +363,7 @@
    }
    @Override
    public boolean temperingGlass(String temperingLayoutId, String engineerId, String temperingFeedSequence) {
    public boolean temperingGlass(String temperingLayoutId, String engineerId) {
        LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
        temperingGlassInfoLambdaQueryWrapper
                .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW);
@@ -383,13 +380,7 @@
                    .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
                    .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
            if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
                if ("0".equals(temperingFeedSequence)) {
                    if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
                        plcStorageCageTask.computeOutMoreGlassInfo(temperingGlassInfos, Boolean.FALSE, "");
                    }
                } else {
                    temperingGlassInfoService.saveBatch(temperingGlassInfos);
                }
                temperingGlassInfoService.saveBatch(temperingGlassInfos);
                return true;
            }
        }
@@ -415,7 +406,7 @@
    }
    @Override
    public void appointEngineerId(String engineerId) {
    public void appointEngineerId(String engineerId){
        redisUtil.setCacheObject("temperingengineerId", engineerId);
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -2,11 +2,13 @@
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mes.bigstorage.entity.BigStorageCage;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import com.mes.bigstorage.service.BigStorageCageService;
import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
import com.mes.common.config.Const;
import com.mes.damage.entity.Damage;
import com.mes.damage.service.DamageService;
@@ -15,6 +17,7 @@
import com.mes.job.PlcStorageCageTask;
import com.mes.pp.entity.ReportingWork;
import com.mes.pp.entity.ReportingWorkDetail;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -29,9 +32,7 @@
import java.net.URL;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
/**
 * @Author : zhoush
@@ -172,7 +173,7 @@
        Damage damage=new Damage();
        damage.setGlassId("P24060403|3|6");
        damage.setLine(2001);
        damage.setWorkingProcedure("磨边");
        damage.setWorkingProcedure("冷加工");
        damage.setRemark("");
        damage.setStatus(2);
        damageService.insertDamage(damage);
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
@@ -2,11 +2,11 @@
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.kangaroohy.milo.model.ReadWriteEntity;
import com.kangaroohy.milo.service.MiloService;
import com.mes.common.config.Const;
import com.mes.engineering.entity.Engineering;
import com.mes.engineering.mapper.EngineeringMapper;
import com.mes.milo.model.ReadWriteEntity;
import com.mes.milo.service.MiloService;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
import com.mes.rawglassstation.entity.RawGlassStorageStation;
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application.yml
@@ -18,4 +18,3 @@
  milo:
    enabled: false
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
@@ -10,7 +10,6 @@
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
kangaroohy:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImplkangaroohy:
  milo:
    enabled: false
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
@@ -152,7 +152,7 @@
                damage.setLine(Const.TEMPERING_OUT_TARGET_POSITION);
                damage.setWorkingProcedure("钢化");
                damage.setRemark("钢化");
                damage.setStatus(1);
                damage.setStatus(0);
                damage.setType(e.getState());
                return damage;
            }).collect(Collectors.toList());
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
@@ -20,7 +20,7 @@
    primary: default
    config:
      default:
        endpoint: opc.tcp://10.153.19.150:49320
        endpoint: opc.tcp://zidonghua:49320
        security-policy: basic256sha256
        username: admin
        username: zsh
        password: 1qaz2wsx3edc4rfv
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -1,5 +1,6 @@
package com.mes.downglassinfo.service.impl;
import cn.smallbun.screw.core.util.CollectionUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -18,7 +19,6 @@
import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
import com.mes.downworkstation.service.DownWorkstationService;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.job.DownLoadCacheGlassTask;
import com.mes.pp.service.FlowCardService;
import lombok.extern.slf4j.Slf4j;
@@ -31,6 +31,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
@@ -51,9 +52,6 @@
    @Autowired
    FlowCardService flowCardService;
    @Autowired
    GlassInfoService glassInfoService;
    /**
     * 根据流程卡号查询最大序号
@@ -226,15 +224,8 @@
    @Override
    public List<Map<String, Object>> downGlassLabelPrint(DownGlassInfo downGlassInfo) {
        List<Map<String, Object>> resultList = null;
        if (downGlassInfo.getGlassId() != null) {
            resultList = glassInfoService.listMaps(
                    new LambdaQueryWrapper<GlassInfo>()
                            .eq(GlassInfo::getGlassId, downGlassInfo.getGlassId())
            );
        } else {
            resultList = baseMapper.downGlassLabelPrint(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer());
        }
        List<Map<String, Object>> resultList = baseMapper.downGlassLabelPrint(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer());
        log.info("MES落架数据:{}", resultList);
        //获取ERP标签所需的信息
        List<Map<String, Object>> labelInfo;
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -30,6 +30,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -92,6 +93,7 @@
        String confirmationWrodValue = plcParameterObject.getPlcParameter("confirmationWord").getValue();
        String confirmationWrodAddress = plcParameterObject.getPlcParameter("confirmationWord").getAddress();
        String currentSlot = plcParameterObject.getPlcParameter("currentCell").getValue();
        log.info("1、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态分别为:g06:{}、g08:{}、g11:{}、g13:{},当前格子号为:{}",
                requestWord, glassIdeValue, confirmationWrodValue, out06Glassstate, out08Glassstate, out11Glassstate, out13Glassstate, currentSlot);
@@ -167,9 +169,9 @@
                Damage damage = new Damage();
                damage.setGlassId(e.getGlassId());
                damage.setLine(Const.TEMPERING_OUT_TARGET_POSITION);
                damage.setWorkingProcedure("钢化");
                damage.setWorkingProcedure("下片");
                damage.setRemark("下片");
                damage.setStatus(1);
                damage.setStatus(0);
                damage.setType(e.getTaskStatus());
                return damage;
            }).collect(Collectors.toList());
hangzhoumesParent/readMe-OPC.md
File was deleted
pom.xml
New file
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>groupId</groupId>
    <artifactId>HangZhouMes</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>