| New file |
| | |
| | | # 默认忽略的文件 |
| | | /shelf/ |
| | | /workspace.xml |
| | | # 基于编辑器的 HTTP 客户端请求 |
| | | /httpRequests/ |
| | | # Datasource local storage ignored files |
| | | /dataSources/ |
| | | /dataSources.local.xml |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project version="4"> |
| | | <component name="com.codeverse.userSettings.MarscodeWorkspaceAppSettingsState"> |
| | | <option name="ckgOperationStatus" value="SUCCESS" /> |
| | | <option name="progress" value="0.99854225" /> |
| | | </component> |
| | | </project> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project version="4"> |
| | | <component name="CompilerConfiguration"> |
| | | <annotationProcessing> |
| | | <profile name="Maven default annotation processors profile" enabled="true"> |
| | | <sourceOutputDir name="target/generated-sources/annotations" /> |
| | | <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> |
| | | <outputRelativeToContentRoot value="true" /> |
| | | <module name="hollowGlass" /> |
| | | <module name="cacheVerticalGlass" /> |
| | | <module name="servicebase" /> |
| | | <module name="HangZhouMes" /> |
| | | <module name="temperingGlass" /> |
| | | <module name="glassStorage" /> |
| | | <module name="springsecurity" /> |
| | | <module name="loadGlass" /> |
| | | <module name="gateway" /> |
| | | <module name="mesHub" /> |
| | | <module name="unLoadGlass" /> |
| | | <module name="cacheGlass" /> |
| | | </profile> |
| | | </annotationProcessing> |
| | | </component> |
| | | <component name="JavacSettings"> |
| | | <option name="ADDITIONAL_OPTIONS_OVERRIDE"> |
| | | <module name="cacheGlass" options="-parameters" /> |
| | | <module name="cacheVerticalGlass" options="-parameters" /> |
| | | <module name="gateway" options="-parameters" /> |
| | | <module name="glassStorage" options="-parameters" /> |
| | | <module name="hollowGlass" options="-parameters" /> |
| | | <module name="loadGlass" options="-parameters" /> |
| | | <module name="mesHub" options="-parameters" /> |
| | | <module name="servicebase" options="-parameters" /> |
| | | <module name="springsecurity" options="-parameters" /> |
| | | <module name="temperingGlass" options="-parameters" /> |
| | | <module name="unLoadGlass" options="-parameters" /> |
| | | </option> |
| | | </component> |
| | | </project> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project version="4"> |
| | | <component name="Encoding"> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/common/servicebase/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/common/springsecurity/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/common/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/common/src/main/resources" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/gateway/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/mesHub/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/moduleService/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/moduleService/src/main/resources" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/src/main/java" charset="UTF-8" /> |
| | | <file url="file://$PROJECT_DIR$/hangzhoumesParent/src/main/resources" charset="UTF-8" /> |
| | | </component> |
| | | </project> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project version="4"> |
| | | <component name="RemoteRepositoriesConfiguration"> |
| | | <remote-repository> |
| | | <option name="id" value="central" /> |
| | | <option name="name" value="Central Repository" /> |
| | | <option name="url" value="https://repo.maven.apache.org/maven2" /> |
| | | </remote-repository> |
| | | <remote-repository> |
| | | <option name="id" value="central" /> |
| | | <option name="name" value="Maven Central repository" /> |
| | | <option name="url" value="https://repo1.maven.org/maven2" /> |
| | | </remote-repository> |
| | | <remote-repository> |
| | | <option name="id" value="central" /> |
| | | <option name="name" value="Central Repository" /> |
| | | <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" /> |
| | | </remote-repository> |
| | | <remote-repository> |
| | | <option name="id" value="jboss.community" /> |
| | | <option name="name" value="JBoss Community repository" /> |
| | | <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> |
| | | </remote-repository> |
| | | <remote-repository> |
| | | <option name="id" value="nexus-aliyun" /> |
| | | <option name="name" value="Nexus aliyun" /> |
| | | <option name="url" value="https://maven.aliyun.com/repository/public" /> |
| | | </remote-repository> |
| | | <remote-repository> |
| | | <option name="id" value="spring" /> |
| | | <option name="name" value="spring" /> |
| | | <option name="url" value="https://maven.aliyun.com/repository/spring" /> |
| | | </remote-repository> |
| | | </component> |
| | | </project> |
| New file |
| | |
| | | <project version="4"> |
| | | <component name="ExternalStorageConfigurationManager" enabled="true" /> |
| | | <component name="MavenProjectsManager"> |
| | | <option name="originalFiles"> |
| | | <list> |
| | | <option value="$PROJECT_DIR$/pom.xml" /> |
| | | <option value="$PROJECT_DIR$/hangzhoumesParent/gateway/pom.xml" /> |
| | | <option value="$PROJECT_DIR$/hangzhoumesParent/pom.xml" /> |
| | | </list> |
| | | </option> |
| | | </component> |
| | | <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" /> |
| | | </project> |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project version="4"> |
| | | <component name="VcsDirectoryMappings"> |
| | | <mapping directory="" vcs="Git" /> |
| | | </component> |
| | | </project> |
| New file |
| | |
| | | { |
| | | "plcAddressBegin":"DB11.0", |
| | | "plcAddressLenght":"80", |
| | | "dataType":"word", |
| | | "parameteInfor":[ |
| | | { |
| | | "codeId": "A06_request_word", |
| | | "addressIndex":"0", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"m/min" |
| | | }, |
| | | { |
| | | "codeId": "A05_scanning_ID", |
| | | "addressIndex":"2", |
| | | "addressLenght":"30", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "Current_slot", |
| | | "addressIndex":"36", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "MES_confirmation_word", |
| | | "addressIndex":"38", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "A08_glass_status", |
| | | "addressIndex":"68", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "A10_glass_status", |
| | | "addressIndex":"70", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "A09_prohibit_film_production", |
| | | "addressIndex":"72", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | } |
| | | , |
| | | { |
| | | "codeId": "A10_prohibit_film_production", |
| | | "addressIndex":"74", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | } |
| | | ] |
| | | } |
| New file |
| | |
| | | { |
| | | "plcAddressBegin": "DB14.0", |
| | | "plcAddressLenght": "938", |
| | | "dataType": "word", |
| | | "parameteInfor": [{ |
| | | "codeId": "D01ID", |
| | | "addressIndex": "0", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D02ID", |
| | | "addressIndex": "32", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D03ID1", |
| | | "addressIndex": "64", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D03ID2", |
| | | "addressIndex": "96", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D03ID3", |
| | | "addressIndex": "128", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D03ID4", |
| | | "addressIndex": "160", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D03ID5", |
| | | "addressIndex": "192", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D03ID6", |
| | | "addressIndex": "224", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D04ID", |
| | | "addressIndex": "256", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D05ID1", |
| | | "addressIndex": "288", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D05ID2", |
| | | "addressIndex": "328", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D05ID3", |
| | | "addressIndex": "352", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D05ID4", |
| | | "addressIndex": "384", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D05ID5", |
| | | "addressIndex": "416", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D05ID6", |
| | | "addressIndex": "448", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E01ID1", |
| | | "addressIndex": "480", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E01ID2", |
| | | "addressIndex": "512", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E01ID3", |
| | | "addressIndex": "544", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E01ID4", |
| | | "addressIndex": "576", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E01ID5", |
| | | "addressIndex": "608", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E01ID6", |
| | | "addressIndex": "640", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E02ID1", |
| | | "addressIndex": "672", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E02ID2", |
| | | "addressIndex": "704", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E02ID3", |
| | | "addressIndex": "736", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E02ID4", |
| | | "addressIndex": "768", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E02ID5", |
| | | "addressIndex": "800", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E02ID6", |
| | | "addressIndex": "832", |
| | | "addressLenght": "32", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D03ToMES", |
| | | "addressIndex": "874", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D05ToMES", |
| | | "addressIndex": "876", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D01ToMES", |
| | | "addressIndex": "878", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D04ToMES", |
| | | "addressIndex": "880", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "MESToD03", |
| | | "addressIndex": "888", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "MESToD05", |
| | | "addressIndex": "890", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "MESToPLC", |
| | | "addressIndex": "892", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "StartAddToImport1", |
| | | "addressIndex": "914", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "StartAddToImport2", |
| | | "addressIndex": "916", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "StartAddToImport3", |
| | | "addressIndex": "918", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "StartAddToImport4", |
| | | "addressIndex": "920", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "StartAddToImport5", |
| | | "addressIndex": "922", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "StartAddToImport6", |
| | | "addressIndex": "924", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "TargetAddToImport1", |
| | | "addressIndex": "926", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "TargetAddToImport2", |
| | | "addressIndex": "928", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "TargetAddToImport3", |
| | | "addressIndex": "930", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "TargetAddToImport4", |
| | | "addressIndex": "932", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "TargetAddToImport5", |
| | | "addressIndex": "934", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "TargetAddToImport6", |
| | | "addressIndex": "936", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "deviceState", |
| | | "addressIndex": "864", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E01State", |
| | | "addressIndex": "866", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "E02State", |
| | | "addressIndex": "868", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D03State", |
| | | "addressIndex": "870", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "D05State", |
| | | "addressIndex": "872", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "MESToD01", |
| | | "addressIndex": "894", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | }, |
| | | { |
| | | "codeId": "MESToD04", |
| | | "addressIndex": "896", |
| | | "addressLenght": "2", |
| | | "ratio": "1", |
| | | "unit": "" |
| | | } |
| | | ] |
| | | } |
| New file |
| | |
| | | { |
| | | "plcAddressBegin":"DB1.2000", |
| | | "plcAddressLenght":"100", |
| | | "dataType":"word", |
| | | "parameteInfor":[ |
| | | { |
| | | "codeId": "loadRequest", |
| | | "addressIndex":"0", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"m/min" |
| | | }, |
| | | { |
| | | "codeId": "PlcStatus", |
| | | "addressIndex":"10", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "MesToPlc", |
| | | "addressIndex":"20", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "InkageStatus", |
| | | "addressIndex":"22", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "WorkId", |
| | | "addressIndex":"24", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "GlassWidth", |
| | | "addressIndex":"26", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "GlassHeight", |
| | | "addressIndex":"28", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | } |
| | | , |
| | | { |
| | | "codeId": "MesToPlcStatus", |
| | | "addressIndex":"40", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "MesToPlcStatusId", |
| | | "addressIndex":"42", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | }, |
| | | { |
| | | "codeId": "MesTaskStatus", |
| | | "addressIndex":"56", |
| | | "addressLenght":"2", |
| | | "ratio":"1", |
| | | "unit":"" |
| | | } |
| | | ] |
| | | } |
| New file |
| | |
| | | { |
| | | "plcAddressBegin": "DB88.0", |
| | | "plcAddressLenght": "58", |
| | | "dataType": "word", |
| | | "parameteInfor": [ |
| | | { |
| | | "codeId": "confirmationWord", |
| | | "addressIndex": "0", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "temperingLayoutId", |
| | | "addressIndex": "2", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "filmsid", |
| | | "addressIndex": "4", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "temperingType", |
| | | "addressIndex": "6", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "thickness", |
| | | "addressIndex": "8", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "loadingRate", |
| | | "addressIndex": "10", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "areaDifference", |
| | | "addressIndex": "12", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "state", |
| | | "addressIndex": "22", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "deviceState", |
| | | "addressIndex": "24", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "resultState", |
| | | "addressIndex": "26", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "loadSpeed", |
| | | "addressIndex": "28", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "downSpeed", |
| | | "addressIndex": "30", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "load1", |
| | | "addressIndex": "32", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "heat1", |
| | | "addressIndex": "34", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "heat2", |
| | | "addressIndex": "36", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "cool1", |
| | | "addressIndex": "38", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "cool2", |
| | | "addressIndex": "40", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "downId", |
| | | "addressIndex": "42", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "productionTime", |
| | | "addressIndex": "44", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "heatEnergy", |
| | | "addressIndex": "46", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "coolEnergy", |
| | | "addressIndex": "48", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "temperatureUp1", |
| | | "addressIndex": "50", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "temperatureDown1", |
| | | "addressIndex": "52", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "temperatureUp2", |
| | | "addressIndex": "54", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "temperatureDown2", |
| | | "addressIndex": "56", |
| | | "addressLenght": "2" |
| | | } |
| | | ] |
| | | } |
| New file |
| | |
| | | { |
| | | "plcAddressBegin": "DB11.0", |
| | | "plcAddressLenght": "94", |
| | | "dataType": "word", |
| | | "parameteInfor": [ |
| | | |
| | | { |
| | | "codeId": "requestWord", |
| | | "addressIndex": "0", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "requestID", |
| | | "addressIndex": "2", |
| | | "addressLenght": "30" |
| | | }, |
| | | { |
| | | "codeId": "currentCell", |
| | | "addressIndex": "32", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "glassStatus08", |
| | | "addressIndex": "36", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "glassStatus06", |
| | | "addressIndex": "40", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "glassStatus11", |
| | | "addressIndex": "42", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "glassStatus13", |
| | | "addressIndex": "44", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G04_error_status", |
| | | "addressIndex": "48", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G05_error_status", |
| | | "addressIndex": "50", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G06_error_status", |
| | | "addressIndex": "52", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "robot_error_status", |
| | | "addressIndex": "54", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G08_error_status", |
| | | "addressIndex": "56", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G09_error_status", |
| | | "addressIndex": "58", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G10_error_status", |
| | | "addressIndex": "60", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G11_error_status", |
| | | "addressIndex": "62", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "robot_error_status", |
| | | "addressIndex": "64", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G13_error_status", |
| | | "addressIndex": "66", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "confirmationWord", |
| | | "addressIndex": "72", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G06_prohibit_film_production", |
| | | "addressIndex": "74", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G11_prohibit_film_production", |
| | | "addressIndex": "76", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "G13_prohibit_film_production", |
| | | "addressIndex": "78", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "Glass_width", |
| | | "addressIndex": "80", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "Glass_height", |
| | | "addressIndex": "82", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "Glass_thickness", |
| | | "addressIndex": "84", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "Start_cell", |
| | | "addressIndex": "86", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "End_cell", |
| | | "addressIndex": "88", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "task_type", |
| | | "addressIndex": "90", |
| | | "addressLenght": "2" |
| | | }, |
| | | { |
| | | "codeId": "alarm_signal", |
| | | "addressIndex": "92", |
| | | "addressLenght": "2" |
| | | } |
| | | |
| | | ] |
| | | } |
| New file |
| | |
| | | # NorthGlassERP |
| | | |
| | | #### 介绍 |
| | | {**以下是 Gitee 平台说明,您可以替换此简介** |
| | | Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 |
| | | 无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} |
| | | |
| | | #### 软件架构 |
| | | 软件架构说明 |
| | | |
| | | |
| | | #### 安装教程 |
| | | |
| | | 1. xxxx |
| | | 2. xxxx |
| | | 3. xxxx |
| | | |
| | | #### 使用说明 |
| | | |
| | | 1. xxxx |
| | | 2. xxxx |
| | | 3. xxxx |
| | | |
| | | #### 参与贡献 |
| | | |
| | | 1. Fork 本仓库 |
| | | 2. 新建 Feat_xxx 分支 |
| | | 3. 提交代码 |
| | | 4. 新建 Pull Request |
| | | |
| | | |
| | | #### 特技 |
| | | |
| | | 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md |
| | | 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) |
| | | 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 |
| | | 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 |
| | | 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) |
| | | 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) |
| | | |
| New file |
| | |
| | | # Logs |
| | | logs |
| | | *.log |
| | | npm-debug.log* |
| | | yarn-debug.log* |
| | | yarn-error.log* |
| | | pnpm-debug.log* |
| | | lerna-debug.log* |
| | | |
| | | node_modules |
| | | .DS_Store |
| | | dist |
| | | dist-ssr |
| | | coverage |
| | | *.local |
| | | |
| | | /cypress/videos/ |
| | | /cypress/screenshots/ |
| | | |
| | | # Editor directories and files |
| | | .vscode/* |
| | | !.vscode/extensions.json |
| | | .idea |
| | | *.suo |
| | | *.ntvs* |
| | | *.njsproj |
| | | *.sln |
| | | *.sw? |
| New file |
| | |
| | | { |
| | | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] |
| | | } |
| New file |
| | |
| | | # northglass-erp |
| | | |
| | | This template should help get you started developing with Vue 3 in Vite. |
| | | |
| | | ## Recommended IDE Setup |
| | | |
| | | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). |
| | | |
| | | ## Customize configuration |
| | | |
| | | See [Vite Configuration Reference](https://vitejs.dev/config/). |
| | | |
| | | ## Project Setup |
| | | |
| | | ```sh |
| | | npm install |
| | | ``` |
| | | |
| | | ### Compile and Hot-Reload for Development |
| | | |
| | | ```sh |
| | | npm run dev |
| | | ``` |
| | | |
| | | ### Compile and Minify for Production |
| | | |
| | | ```sh |
| | | npm run build |
| | | ``` |
| New file |
| | |
| | | /* eslint-disable */ |
| | | /* prettier-ignore */ |
| | | // @ts-nocheck |
| | | // noinspection JSUnusedGlobalSymbols |
| | | // Generated by unplugin-auto-import |
| | | export {} |
| | | declare global { |
| | | const useI18n: typeof import('vue-i18n')['useI18n'] |
| | | } |
| New file |
| | |
| | | export default { |
| | | // serverUrl: "10.153.19.150:88/api", |
| | | // serverUrl: "192.168.2.100:88/api", |
| | | // serverUrl: "10.153.19.162:88", |
| | | serverUrl: "127.0.0.1:88", |
| | | // serverUrl: "10.153.19.47:88", |
| | | // serverUrl2: "10.153.19.150:88" |
| | | // serverUrl2: "192.168.2.100:88" |
| | | // serverUrl2: "10.153.19.162:88" |
| | | // serverUrl2: "127.0.0.1:88" |
| | | // serverUrl2: "192.168.0.39:88" |
| | | //serverUrl:"res.abeim.cn" |
| | | } |
| New file |
| | |
| | | <!DOCTYPE html> |
| | | <html lang="en"> |
| | | <head> |
| | | <meta charset="UTF-8"> |
| | | <!-- <link rel="icon" href="/favicon.ico"> --> |
| | | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | | <title>北玻</title> |
| | | </head> |
| | | <body> |
| | | <div id="app" style="width: 100vw;height: 100vh;"></div> |
| | | <script type="module" src="/src/main.js"></script> |
| | | </body> |
| | | </html> |
| New file |
| | |
| | | { |
| | | "name": "northglass-mes", |
| | | "version": "0.0.0", |
| | | "private": true, |
| | | "scripts": { |
| | | "dev": "vite", |
| | | "build": "vite build", |
| | | "preview": "vite preview" |
| | | }, |
| | | "dependencies": { |
| | | "@element-plus/icons-vue": "^2.3.1", |
| | | "@vue-macros/reactivity-transform": "^0.3.23", |
| | | "axios": "^1.6.8", |
| | | "chart.js": "^4.4.3", |
| | | "dayjs": "^1.11.13", |
| | | "echarts": "^5.5.1", |
| | | "element-plus": "^2.9.9", |
| | | "moment": "^2.30.1", |
| | | "northglass-mes": "file:", |
| | | "pinia": "^2.1.6", |
| | | "pinia-plugin-persistedstate": "^3.2.0", |
| | | "qrcode": "^1.5.4", |
| | | "sortablejs": "^1.15.1", |
| | | "sweetalert2": "^11.10.7", |
| | | "vue": "^3.3.4", |
| | | "vue-draggable-plus": "^0.5.0", |
| | | "vue-echarts": "^6.7.3", |
| | | "vue-i18n": "^11.0.0-rc.1", |
| | | "vue-print-nb": "^1.7.5", |
| | | "vue-router": "^4.0.13", |
| | | "vue3-print-nb": "^0.1.4", |
| | | "vxe-table": "^4.5.15", |
| | | "xe-utils": "^3.5.14", |
| | | "xlsx": "^0.18.5" |
| | | }, |
| | | "devDependencies": { |
| | | "@types/sortablejs": "^1.15.7", |
| | | "@vitejs/plugin-vue": "^4.6.2", |
| | | "babel-polyfill": "^6.26.0", |
| | | "http-proxy-middleware": "^3.0.0", |
| | | "unplugin-auto-import": "^0.17.6", |
| | | "vite": "^4.4.9" |
| | | } |
| | | } |
| New file |
| | |
| | | <template> |
| | | <router-view></router-view> |
| | | </template> |
| | | <script setup> |
| | | import {onMounted} from 'vue' |
| | | import DevicePixelRatio from '@/utils/evicePixelRatio.js'; |
| | | // 定义一个函数来调整 body 的缩放比例 |
| | | // function bodyScale() { |
| | | // const deviceheight = document.documentElement.clientHeight; |
| | | // const scale = deviceheight / 740; |
| | | // document.body.style.zoom = scale; |
| | | // } |
| | | // 在组件挂载时执行 |
| | | // onMounted(() => { |
| | | // new DevicePixelRatio().init(); |
| | | // bodyScale(); |
| | | // }); |
| | | </script> |
| | | <style scoped> |
| | | /* 你的样式内容 */ |
| | | </style> |
| New file |
| | |
| | | /* color palette from <https://github.com/vuejs/theme> */ |
| | | :root { |
| | | --vt-c-white: #ffffff; |
| | | --vt-c-white-soft: #f8f8f8; |
| | | --vt-c-white-mute: #f2f2f2; |
| | | |
| | | --vt-c-black: #181818; |
| | | --vt-c-black-soft: #222222; |
| | | --vt-c-black-mute: #282828; |
| | | |
| | | --vt-c-indigo: #2c3e50; |
| | | |
| | | --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); |
| | | --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); |
| | | --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); |
| | | --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); |
| | | |
| | | --vt-c-text-light-1: var(--vt-c-indigo); |
| | | --vt-c-text-light-2: rgba(60, 60, 60, 0.66); |
| | | --vt-c-text-dark-1: var(--vt-c-white); |
| | | --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); |
| | | } |
| | | |
| | | /* semantic color variables for this project */ |
| | | :root { |
| | | --color-background: var(--vt-c-white); |
| | | --color-background-soft: var(--vt-c-white-soft); |
| | | --color-background-mute: var(--vt-c-white-mute); |
| | | |
| | | --color-border: var(--vt-c-divider-light-2); |
| | | --color-border-hover: var(--vt-c-divider-light-1); |
| | | |
| | | --color-heading: var(--vt-c-text-light-1); |
| | | --color-text: var(--vt-c-text-light-1); |
| | | |
| | | --section-gap: 160px; |
| | | } |
| | | |
| | | @media (prefers-color-scheme: dark) { |
| | | :root { |
| | | --color-background: var(--vt-c-black); |
| | | --color-background-soft: var(--vt-c-black-soft); |
| | | --color-background-mute: var(--vt-c-black-mute); |
| | | |
| | | --color-border: var(--vt-c-divider-dark-2); |
| | | --color-border-hover: var(--vt-c-divider-dark-1); |
| | | |
| | | --color-heading: var(--vt-c-text-dark-1); |
| | | --color-text: var(--vt-c-text-dark-2); |
| | | } |
| | | } |
| | | |
| | | *, |
| | | *::before, |
| | | *::after { |
| | | box-sizing: border-box; |
| | | margin: 0; |
| | | font-weight: normal; |
| | | } |
| | | |
| | | body { |
| | | min-height: 100vh; |
| | | color: var(--color-text); |
| | | background: var(--color-background); |
| | | transition: |
| | | color 0.5s, |
| | | background-color 0.5s; |
| | | line-height: 1.6; |
| | | font-family: |
| | | Inter, |
| | | -apple-system, |
| | | BlinkMacSystemFont, |
| | | 'Segoe UI', |
| | | Roboto, |
| | | Oxygen, |
| | | Ubuntu, |
| | | Cantarell, |
| | | 'Fira Sans', |
| | | 'Droid Sans', |
| | | 'Helvetica Neue', |
| | | sans-serif; |
| | | font-size: 15px; |
| | | text-rendering: optimizeLegibility; |
| | | -webkit-font-smoothing: antialiased; |
| | | -moz-osx-font-smoothing: grayscale; |
| | | } |
| | | /*滚动条整体部分*/ |
| | | .mytable-scrollbar ::-webkit-scrollbar { |
| | | width: 10px; |
| | | height: 10px; |
| | | } |
| | | /*滚动条的轨道*/ |
| | | .mytable-scrollbar ::-webkit-scrollbar-track { |
| | | background-color: #FFFFFF; |
| | | } |
| | | /*滚动条里面的小方块,能向上向下移动*/ |
| | | .mytable-scrollbar ::-webkit-scrollbar-thumb { |
| | | background-color: transparent; |
| | | border-radius: 5px; |
| | | border: 0 solid #F1F1F1; |
| | | /*box-shadow: inset 0 0 6px rgba(0,0,0,.3);*/ |
| | | } |
| | | .mytable-scrollbar ::-webkit-scrollbar-thumb:hover { |
| | | background-color: #ffffff; |
| | | box-shadow: inset 0 0 6px rgba(0,0,0,.3); |
| | | } |
| | | .mytable-scrollbar ::-webkit-scrollbar-thumb:active { |
| | | background-color: white; |
| | | } |
| | | /*边角,即两个滚动条的交汇处*/ |
| | | .mytable-scrollbar ::-webkit-scrollbar-corner { |
| | | background-color: #FFFFFF; |
| | | } |
| | | .vxe-grid{ |
| | | background-color: white; |
| | | } |
| | | |
| | | |
| | | |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg> |
| New file |
| | |
| | | @import './base.css'; |
| | | |
| | | #app { |
| | | margin: 0 auto; |
| | | padding: 0; |
| | | /* background-color: #D5EAFF; */ |
| | | font-weight: normal; |
| | | height: 100%; |
| | | width: 100%; |
| | | /* min-width: 1536px; */ |
| | | /* min-height: 730px; */ |
| | | /* background-image: url("../../src/assets/background.jpg"); */ |
| | | } |
| | | |
| | | a, |
| | | .green { |
| | | text-decoration: none; |
| | | color: hsla(160, 100%, 37%, 1); |
| | | transition: 0.4s; |
| | | } |
| | | |
| | | @media (hover: hover) { |
| | | a:hover { |
| | | background-color: hsla(160, 100%, 37%, 0.2); |
| | | } |
| | | } |
| | | |
| | | @media (min-width: 1024px) { |
| | | body { |
| | | display: flex; |
| | | place-items: center; |
| | | } |
| | | |
| | | #app { |
| | | display: grid; |
| | | grid-template-columns: 1fr 1fr; |
| | | |
| | | } |
| | | } |
| | | *{ |
| | | margin: 0; |
| | | padding: 0; |
| | | |
| | | } |
| | | .mainDiv{ |
| | | height: 100vh; |
| | | width: 100vw; |
| | | } |
| | | html,body{ |
| | | height: 100%; |
| | | width: 100%; |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| New file |
| | |
| | | import {defineStore} from "pinia"; |
| | | |
| | | export default defineStore('companyInfo', { |
| | | |
| | | state: () => ({ |
| | | companyName: '常州市吉利玻璃有限公司', |
| | | address:'常州市天宁区郑陆镇大明南路8号', |
| | | telephone:'022-59280088', |
| | | fax:'022-59280066', |
| | | widHeiLength:{//订单宽高长度 |
| | | regexp:/^(\d{1,4})$/,//正则四位整数 |
| | | //regexp:/^(0|[1-9][0-9]{0,3}([.][0-9]{1,2})?)$/,//正则0.00-9999.99 |
| | | msg:'basicData.msg.range9999Dec' |
| | | }, |
| | | orderIdType:'month',//后端生成订单号类型,day:每天生成,month:每月生成 |
| | | deliveryIdType:'month',//后端生成发货单号类型,day:每天生成,month:每月生成 |
| | | columnName:'异形参数', |
| | | selectOrderReviewShow:false, //订单首页加工单审核按钮是否显示 |
| | | productName:"product_abbreviation", //产品创建查重字段 |
| | | decValue:2,//订单保存面积位数 |
| | | label:2,//标签类型 |
| | | calculateType:2,//订单计算方式 |
| | | |
| | | //天津 |
| | | printLabel: { |
| | | custom: (item1) => { |
| | | return `<div class="row3" style="text-align: center;font-weight: bolder;"> |
| | | <label style="font-weight: bolder;font-size: 22px;margin-top: 28px;">W:${item1.width}</label> |
| | | |
| | | <label style="font-weight: bolder;font-size: 22px;margin-top: 28px;">H:${item1.height}</label> |
| | | </div>` |
| | | }, |
| | | customSemi: (item1) => { |
| | | return `<div class="row3" style="text-align: center;font-weight: bolder;"> |
| | | <label style="font-weight: bolder;font-size: 10px;margin-top: 28px;">W:${item1.width}</label> |
| | | |
| | | <label style="font-weight: bolder;font-size: 10px;margin-top: 28px;">H:${item1.height}</label> |
| | | </div>` |
| | | }, |
| | | labelType: '成品标签2', |
| | | labelValue:2, |
| | | labelType3: '成品标签3', |
| | | labelValue3:3, |
| | | printFlowCard: { |
| | | patch:'正', |
| | | lackOf:'次', |
| | | processingNote: (itemtextarea) => { |
| | | return `${itemtextarea.processing_note}` |
| | | }, |
| | | }, |
| | | hideButton:'false', |
| | | getSelectFlowCard:2,//打印流程卡查询状态 |
| | | className:{ |
| | | custom:{ |
| | | printFlowCardName: () => { |
| | | return `printFlowCard_finished` |
| | | }, |
| | | entiretyName: () => { |
| | | return `entirety_finished` |
| | | }, |
| | | contentRowName: () => { |
| | | return `contentRow` |
| | | } |
| | | }, |
| | | semi:{ |
| | | printFlowCardName: () => { |
| | | return `printFlowCard_semi` |
| | | }, |
| | | entiretyName: () => { |
| | | return `entirety_semi` |
| | | }, |
| | | contentRowName: () => { |
| | | return `contentRow` |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | }), |
| | | actions: { |
| | | // |
| | | } |
| | | }) |
| New file |
| | |
| | | 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: { |
| | | untask: 'No task', |
| | | tonumber: 'Total number of films uploaded', |
| | | finishnumber: 'Completed quantity', |
| | | rackreset: 'Rack reset', |
| | | prackreset: 'Is the rack reset?', |
| | | printing: 'automatic printing', |
| | | 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: { |
| | | onesort: 'Line breaking pieces', |
| | | twosort: 'Second line breaking piece', |
| | | inPlace: 'In place', |
| | | ninPlace: 'Not in place', |
| | | emptymissions: 'Empty task', |
| | | advancetask: 'Film entry task', |
| | | outputtasks: 'Production task', |
| | | schedulingtasks: 'Scheduling tasks', |
| | | advancerequests: 'Film entry request', |
| | | releaserequest: 'Production request', |
| | | straighttasks: 'Direct Task', |
| | | endingtask: 'end', |
| | | another: 'other', |
| | | taskRunning: 'task request', |
| | | updateTime: 'update time', |
| | | id: 'Edge grinding pre conditioning cage table ID', |
| | | remainWidth: 'remaining', |
| | | place: 'Is it in place', |
| | | layernow: 'Current floor number', |
| | | 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: { |
| | | projectnumber: 'Please enter the project number', |
| | | dilapidation: 'Breakage', |
| | | takeaway: 'Manual removal', |
| | | takeawaya: 'Should the information be manually taken away?', |
| | | takeon: 'The arrangement is complete', |
| | | }, |
| | | searchOrder: { |
| | | furnaces:'Number of full furnaces', |
| | | furnfullTemp: 'Total amount of glass', |
| | | startCell: 'Target layer number', |
| | | endCell: 'Reserved layer number', |
| | | begin: 'start', |
| | | finish: 'complete', |
| | | uncar: 'Not getting on the car yet', |
| | | inkage: 'Enter the film', |
| | | successfullyprocessed: 'Task successfully processed', |
| | | psuccessfullyprocessed: 'Whether the task has been successfully processed?', |
| | | taskfailure: 'Task failure handling', |
| | | ptaskfailure: 'Should task failure be handled?', |
| | | totallogarithms: 'Total logarithm', |
| | | numberpairs: 'pairing number', |
| | | numberoccupied: 'Number of occupied cells', |
| | | totalfurnaces: 'Total number of furnaces', |
| | | cagesnumber: 'Quantity inside the cage', |
| | | slotnumber: 'Number of occupied cells', |
| | | progress: 'progress%', |
| | | whethersame: 'Are they the same', |
| | | same: 'the same', |
| | | notsame: 'different', |
| | | partask: 'Task reset', |
| | | partasks: 'Do you want to reset the task?', |
| | | empty: 'Default empty task', |
| | | historicaltasks: 'historical tasks', |
| | | cagedetails: 'Cage Details', |
| | | inkageEntity: 'Online status of film entry:', |
| | | requestEntity: 'Entry request status:', |
| | | mesReplyEntity: 'start command:', |
| | | outInkageEntity: 'Online status of film release:', |
| | | outRequestEntity: 'Production request status:', |
| | | breakagn: 'unbroken', |
| | | lacknumber: 'Number of missing pieces', |
| | | processcard: 'Specify process card', |
| | | filminformation: 'Manually downloading information', |
| | | currentglassinformation: 'Scan the current glass information of the barcode scanner', |
| | | printlabels: 'print label', |
| | | deleteTask: 'End of project', |
| | | pdeleteTask: 'Whether to end the project?', |
| | | searchlayout: 'Non-tempered process card inquiry', |
| | | fullfurnaces: 'Number of full furnaces', |
| | | specifiedproject: 'The currently specified project', |
| | | undesignate: 'Cancel tempered steel', |
| | | 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', |
| | | specifyout: 'Designate manual film production', |
| | | specifyengineerid: 'Specify the project', |
| | | projectnumber: 'Project number', |
| | | layoutnumber: 'Drawing number of loading for tempering furnace', |
| | | numberglasses: 'Number of glasses', |
| | | specifytemperinga: 'Please confirm if the device has turned off MES online connection?', |
| | | temperedswitch: 'Tempered switch', |
| | | dutyinformation: 'Duty information', |
| | | process: 'Process', |
| | | team: 'Team', |
| | | basic: 'equipment', |
| | | makesure: 'Confirm the save', |
| | | temperingtotal: 'Number of tempering furnaces:', |
| | | glasstotal: 'Total number of glasses:', |
| | | Labelprinting: 'label printing', |
| | | Schedulingswitch: 'Dispatch switch', |
| | | }, |
| | | workOrder: { |
| | | upnumber: 'Upper position number', |
| | | coatingtypesbe: 'Original film system', |
| | | 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: { |
| | | configName: 'configure name', |
| | | configNamea:'configure name:', |
| | | configCode: 'Configuration Code', |
| | | configValue: 'Configuration value', |
| | | 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: { |
| | | slice:'slice', |
| | | load: 'load', |
| | | edg: 'edg', |
| | | temp: 'temp', |
| | | hollow: 'hollow', |
| | | oneFinish: 'oneFinish', |
| | | twoFinish: 'twoFinish', |
| | | oneunFinish: 'oneunFinish', |
| | | twounFinish: 'twounFinish', |
| | | ondDamage: 'ondDamage', |
| | | percent: 'Percent', |
| | | time: 'The time of the break', |
| | | tionnumber: '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', |
| | | order: 'Order details', |
| | | 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', |
| | | number: '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:', |
| | | brokenNum: 'brokenNum', |
| | | inventory: 'inventory', |
| | | inventoryarea: 'inventoryarea', |
| | | shippedQuantity: 'shippedQuantity', |
| | | reportWorkQuantity: 'reportWorkQuantity', |
| | | reportWorkQuantityCount: 'reporting_work_num_count', |
| | | processId: 'processId', |
| | | historicaltasks1: 'historicaltasks1', |
| | | historicaltasks2: 'historicaltasks2', |
| | | historicaltasks3: 'historicaltasks3', |
| | | historicaltasks4: 'historicaltasks4', |
| | | historicaltasks5: 'historicaltasks5', |
| | | historicaltasks6: 'historicaltasks6', |
| | | historicaltasks7: 'historicaltasks7', |
| | | order: 'order', |
| | | date: 'date', |
| | | countOutOne: 'countOutOne', |
| | | totalAreaOutOne: 'totalAreaOutOne', |
| | | countOutTwo: 'countOutTwo', |
| | | totalAreaOutTwo: 'totalAreaOutTwo', |
| | | countIn: 'countIn', |
| | | totalAreaIn: 'totalAreaIn', |
| | | countOut: 'countOut', |
| | | totalAreaOut: 'totalAreaOut', |
| | | hollowCountOutOne: 'hollowCountOutOne', |
| | | hollowTotalAreaOutOne: 'hollowTotalAreaOutOne', |
| | | countOut: 'countOut', |
| | | hollowCountOutTwo: 'hollowCountOutTwo', |
| | | }, |
| | | 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', |
| | | reportworked: 'Reported worked', |
| | | 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: { |
| | | resetnumber: 'Shelf number', |
| | | fail: 'fail', |
| | | mes: 'Original film storage details', |
| | | warehousing: 'store', |
| | | pwarehousing: 'Inventory request', |
| | | wareout: 'Original film outbound', |
| | | information: 'Whether to release this information from the warehouse?', |
| | | pwareout: 'Outbound request', |
| | | position: 'Lifting position:', |
| | | cposition: 'Please select the lifting position', |
| | | position1: 'Lifting position 1', |
| | | position2: 'Lifting position 2', |
| | | addglass: 'Original film information', |
| | | operate: 'Operate', |
| | | exit: 'Edit', |
| | | delete: 'Delete', |
| | | outbound: 'Outbound', |
| | | deviceid: 'device ID', |
| | | enablestatea: 'Enable tagging', |
| | | disable: 'Disable', |
| | | start: 'Enable', |
| | | startslot: 'Start workstation', |
| | | endslot: 'Target workstation', |
| | | slotid: 'Grid ID', |
| | | slot: 'Grid number', |
| | | 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', |
| | | thickremainquant: 'Remaining quantity of original film (sheets)', |
| | | thickremainquantity: 'Remaining quantity of original film (sheets):', |
| | | inquantity: 'Please enter the quantity', |
| | | quantitya: 'Number:', |
| | | enableid: 'Task ID', |
| | | originateslot: 'Starting grid', |
| | | endoriginateslot: 'Target 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', |
| | | pass: 'Pass', |
| | | 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', |
| | | removalmethod: 'Please choose the membrane removal method', |
| | | removalmethodp: 'Membrane removal method', |
| | | removalmethoda: 'Membrane removal method:', |
| | | noremoval: 'The film is not removed', |
| | | removal: 'Membrane removal', |
| | | coarselyground: 'Rough grinding', |
| | | finegrinding: 'Fine grinding', |
| | | }, |
| | | hellow: { |
| | | clickmakesure: 'Whether or not to confirm the click?', |
| | | logarithm: 'logarithm:', |
| | | totalPairQuantitya: 'Total number of task allocation pairs', |
| | | pairQuantitya: 'Number of deployed pairs', |
| | | waitingout: 'Waiting for the release of the film', |
| | | finishout: 'Film release completed', |
| | | hollowSequence: 'Hollow sequence', |
| | | isPair: 'Whether to pair or not', |
| | | no: 'deny', |
| | | listFormula: 'Formula information', |
| | | HollowGlass: 'Queue information', |
| | | totalLayer: 'Total number of floors', |
| | | totalPairQuantity: 'Total number of pairs', |
| | | pairQuantity: 'Completed pairing quantity', |
| | | isForceList: 'Is it mandatory', |
| | | yesisForceList: 'force', |
| | | noisForceList: 'optional', |
| | | hollowCountOutOne: 'Quantity of insulated first-line glass', |
| | | hollowCountOutTwo: 'Quantity of hollow second-line glass', |
| | | hollowTotalAreaOutOne: 'Hollow first-line glass area', |
| | | hollowTotalAreaOutTwo: 'Hollow second-line glass area', |
| | | countIn: 'Quantity of large cage glass before tempering', |
| | | countOut: 'Quantity of tempered glass', |
| | | countOutOne: 'Quantity of glass cut along the cutting line', |
| | | countOutTwo: 'Quantity of cutting second-line glass', |
| | | totalAreaIn: 'Area of large cage glass before tempering', |
| | | totalAreaOut: 'Tempered glass area', |
| | | totalAreaOutOne: 'Cut the area of glass along the cutting line', |
| | | totalAreaOutTwo: 'Cut the area of second-line glass', |
| | | freeone: 'First line idle state:', |
| | | freetwo: 'Second line idle state:', |
| | | freethree: 'Third line idle state:', |
| | | casFour: 'Gas 4', |
| | | casFourb: 'Gas 4:', |
| | | casFoura: 'Please select gas 4', |
| | | casOne: 'Gas 1', |
| | | casOneb: 'Gas 1:', |
| | | casOnea: 'Please select gas 1', |
| | | casThree: 'Gas 3', |
| | | casThreeb: 'Gas 3:', |
| | | casThreea: 'Please select gas 3', |
| | | casTwo: 'Gas 2', |
| | | casTwob: 'Gas 2:', |
| | | casTwoa: 'Please select gas 2', |
| | | Y: 'have', |
| | | F: 'not have', |
| | | frameFour: 'Spacer board 4', |
| | | frameFourb: 'Spacer board 4:', |
| | | frameFoura: 'Please enter the spacing board 4', |
| | | frameOne: 'Spacer board 1', |
| | | frameOneb: 'Spacer board 1:', |
| | | frameOnea: 'Please enter the spacing board 1', |
| | | frameThree: 'Spacer board 3', |
| | | frameThreeb: 'Spacer board 3:', |
| | | frameThreea: 'Please enter the spacing board 3', |
| | | frameTwo: 'Spacer board 2', |
| | | frameTwob: 'Spacer board 2:', |
| | | frameTwoa: 'Please enter the spacing board 2', |
| | | intervalFrameHeightOne: 'Interval frame height 1', |
| | | intervalFrameHeightTwo: 'Interval frame height 2', |
| | | intervalFrameHeightThree: 'Interval frame height 3', |
| | | intervalFrameHeightFour: 'Interval frame height 4', |
| | | intervalFrameHeightaOne: 'Please enter the interval box height 1', |
| | | intervalFrameHeightaTwo: 'Please enter the interval box height 2', |
| | | intervalFrameHeightaThree: 'Please enter the interval box height 3', |
| | | intervalFrameHeightaFour: 'Please enter the interval box height 4', |
| | | intervalFrameHeightbOne: 'Interval frame height 1:', |
| | | intervalFrameHeightbTwo: 'Interval frame height 2:', |
| | | intervalFrameHeightbThree: 'Interval frame height 3:', |
| | | intervalFrameHeightbFour: 'Interval frame height 4:', |
| | | intervalFrameTypeOne: 'Interval box type 1', |
| | | intervalFrameTypeTwo: 'Interval box type 2', |
| | | intervalFrameTypeThree: 'Interval box type 3', |
| | | intervalFrameTypeFour: 'Interval box type 4', |
| | | intervalFrameTypecOne: 'Please select interval box type 1', |
| | | intervalFrameTypecTwo: 'Please select interval box type 2', |
| | | intervalFrameTypecThree: 'Please select interval box type 3', |
| | | intervalFrameTypecFour: 'Please select interval box type 4', |
| | | intervalFrameTypedOne: 'Interval box type 1:', |
| | | intervalFrameTypedTwo: 'Interval box type 2:', |
| | | intervalFrameTypedThree: 'Interval box type 3:', |
| | | intervalFrameTypedFour: 'Interval box type 4:', |
| | | intervalFrameTypea: 'TPS adhesive', |
| | | intervalFrameTypeb: 'Aluminum spacer strip', |
| | | intervalFrameWidthOne: 'Interval frame width 1', |
| | | intervalFrameWidthTwo: 'Interval frame width 2', |
| | | intervalFrameWidthThree: 'Interval frame width 3', |
| | | intervalFrameWidthFour: 'Interval frame width 4', |
| | | intervalFrameWidthaOne: 'Please enter the width of the interval box as 1', |
| | | intervalFrameWidthaTwo: 'Please enter the width of the interval box as 2', |
| | | intervalFrameWidthaThree: 'Please enter the width of the interval box as 3', |
| | | intervalFrameWidthaFour: 'Please enter the width of the interval box as 4', |
| | | intervalFrameWidthbOne: 'Interval frame width 1:', |
| | | intervalFrameWidthbTwo: 'Interval frame width 2:', |
| | | intervalFrameWidthbThree: 'Interval frame width 3:', |
| | | intervalFrameWidthbFour: 'Interval frame width 4:', |
| | | sealInsert: 'Sealed embedding', |
| | | sealInsertb: 'Sealed embedding:', |
| | | sealInserta: 'Please enter sealed embedding', |
| | | hollowformula: 'Hollow formula', |
| | | hollowformuldet: 'Do you want to delete this hollow formula?', |
| | | hollowtaskdet: 'Do you want to delete this task?', |
| | | taskdet: 'Delete Task', |
| | | edithollowformula: 'Modify the hollow formula', |
| | | phollowformula: 'Please choose a hollow formula', |
| | | hollowformulp: 'Hollow formula:', |
| | | bottomRemove: 'Lower side film removal amount:', |
| | | bottomRemovep: 'Lower side film removal amount', |
| | | bottomRemovea: 'Please enter the amount of film removal on the lower side', |
| | | topRemove: 'Upper side membrane removal amount:', |
| | | topRemovep: 'Upper side membrane removal amount', |
| | | topRemovea: 'Please enter the amount of film removal on the upper side', |
| | | leftRemove: 'Left side membrane removal amount:', |
| | | leftRemovep: 'Left side membrane removal amount', |
| | | leftRemovea: 'Please enter the amount of membrane removal on the left side', |
| | | rightRemove: 'Right side membrane removal amount:', |
| | | rightRemovep: 'Right side membrane removal amount', |
| | | rightRemovea: 'Please enter the amount of membrane removal on the right side', |
| | | formulaNamep: 'Recipe Name', |
| | | formulaName: 'Recipe Name:', |
| | | formulaNamea: 'Please enter the formula name', |
| | | stopproject: 'Pause Task', |
| | | pstopproject: 'Do you want to pause the task?', |
| | | reviewproject: 'Preview project', |
| | | line: 'line', |
| | | linea: 'line:', |
| | | line1: 'Line 1', |
| | | line2: 'Line 2', |
| | | line3: 'Line 3', |
| | | createtask: 'Create task', |
| | | starttask: 'Start Task', |
| | | pstarttask: 'Do you want to start the task?', |
| | | stoptask: 'stop task', |
| | | pstoptask: 'Do you want to stop the task?', |
| | | currenttask: 'Current task:', |
| | | claimednumber: 'Received pairing quantity:', |
| | | linenumber: 'Number of lines entering the airspace:', |
| | | order: 'Production order', |
| | | flowCardId: 'Flow Card', |
| | | thickness: 'thickness', |
| | | coatingtypes: 'films', |
| | | layer: 'Number of layers', |
| | | height: 'long', |
| | | width: 'width', |
| | | state: 'state', |
| | | cardnumber: 'Process card number', |
| | | cardnumbera: 'Process card number:', |
| | | layernumber: 'Layer number', |
| | | totalnumber: 'Total number of films', |
| | | pairsnumber: 'Matched quantity', |
| | | missingnumber: 'Number of missing pieces', |
| | | damagenumber: 'A quantity broken.', |
| | | operate: 'operate', |
| | | claimquest: 'Collecting tasks', |
| | | pclaimquest: 'Do you want to receive the task?', |
| | | missingfilms: 'Missing chip details', |
| | | forcedfilming: 'Compulsory film release', |
| | | pforcedfilming: 'Is it mandatory to release the film?', |
| | | brokenpieces: 'Number of damaged pieces', |
| | | realpieces: 'Actual number of films', |
| | | route: 'route:', |
| | | croute: 'Please choose a route', |
| | | ptotalpairQuantity: 'Total number of pairs:', |
| | | cpairQuantity: 'Please enter the total number of pairs', |
| | | schedulingswitch: 'Dispatch switch', |
| | | }, |
| | | screendisplay: { |
| | | pchoice: 'Please select', |
| | | pwidth: 'Please enter the width', |
| | | pheight: 'Please enter the height', |
| | | upnumber: 'Number of films uploaded', |
| | | } |
| | | } |
| New file |
| | |
| | | |
| | | import { createI18n} from 'vue-i18n' |
| | | import zh from "./zh" |
| | | import py from "./py" |
| | | import en from "./en" |
| | | |
| | | let messages = { |
| | | zh:zh, |
| | | py:py, |
| | | en: en |
| | | } |
| | | |
| | | const i18n = createI18n({ |
| | | locale: localStorage.getItem('lang') || 'zh', // 设置当前语言类型 |
| | | legacy: false, // 如果要支持compositionAPI,此项必须设置为false; |
| | | globalInjection: true, // 全局注册$t方法 |
| | | messages |
| | | }) |
| | | |
| | | export default i18n |
| New file |
| | |
| | | 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: { |
| | | untask:'无任务', |
| | | tonumber:'上片总数量', |
| | | finishnumber:'已完成数量', |
| | | rackreset:'架子复位', |
| | | prackreset:'是否架子复位?', |
| | | 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: { |
| | | onesort:'一线掰片', |
| | | twosort:'二线掰片', |
| | | inPlace:'到位', |
| | | ninPlace:'未到位', |
| | | emptymissions:'空任务', |
| | | advancetask:'进片任务', |
| | | outputtasks:'出片任务', |
| | | schedulingtasks:'调度任务', |
| | | advancerequests:'进片请求', |
| | | releaserequest:'出片请求', |
| | | straighttasks:'直通任务', |
| | | endingtask:'结束', |
| | | another:'其他', |
| | | taskRunning:'任务请求', |
| | | remainWidth:'剩余', |
| | | id:'磨边前理片笼表ID', |
| | | updateTime:'更新时间', |
| | | place:'是否到位', |
| | | layernow:'当前层号', |
| | | gridnumber: 'Ячеек сеткла', |
| | | glassnumber: 'Номер стакла', |
| | | width: 'Ширина', |
| | | height: 'Высота', |
| | | startstatus: 'Статус начала операции', |
| | | disable: 'Отключ', |
| | | start: 'Начало', |
| | | deficiencieste: 'Недостатки в отчетности', |
| | | updown:'人工下片', |
| | | operate: 'Операция', |
| | | prompt: 'Подсказк', |
| | | information: 'Следует ли сообщать недостающую информацию?', |
| | | infor:'是否人工下片该条信息?', |
| | | yes: 'Да', |
| | | cancel: 'Отмена', |
| | | }, |
| | | order: { |
| | | projectnumber:'请输入工程号', |
| | | takeon:'摆片完成', |
| | | dilapidation: 'Повреждение', |
| | | takeawaya:'是否人工拿走该条信息?', |
| | | takeaway: 'Взять вручную', |
| | | }, |
| | | searchOrder: { |
| | | furnaces:'满炉炉数', |
| | | furnfullTemp:'玻璃总量', |
| | | startCell:'目标层号', |
| | | endCell:'预留层号', |
| | | begin:'开始', |
| | | finish:'完成', |
| | | uncar:'未上车', |
| | | inkage:'进片', |
| | | successfullyprocessed:'任务成功处理', |
| | | psuccessfullyprocessed:'是否进行任务成功处理?', |
| | | taskfailure:'任务失败处理', |
| | | ptaskfailure:'是否进行任务失败处理?', |
| | | totallogarithms:'总对数', |
| | | numberpairs:'配对数', |
| | | numberoccupied:'占用格子数', |
| | | totalfurnaces:'总炉数', |
| | | cagesnumber:'笼内数量', |
| | | slotnumber:'占有格子数', |
| | | progress:'进度%', |
| | | whethersame:'是否相同', |
| | | same:'相同', |
| | | notsame:'不相同', |
| | | partasks:'是否任务重置?', |
| | | empty:'默认空任务', |
| | | partask:'任务重置', |
| | | historicaltasks:'历史任务', |
| | | cagedetails:'笼内详情', |
| | | inkageEntity:'进片联机状态:', |
| | | requestEntity:'进片请求状态:', |
| | | mesReplyEntity:'启动命令:', |
| | | outInkageEntity:'出片联机状态:', |
| | | outRequestEntity:'出片请求状态:', |
| | | breakagn:'未破损', |
| | | lacknumber:'缺片数量', |
| | | processcard:'指定流程卡', |
| | | filminformation:'人工下片信息', |
| | | currentglassinformation:'扫码枪当前玻璃信息', |
| | | printlabels:'打印标签', |
| | | deleteTask:'结束工程', |
| | | pdeleteTask:'是否结束工程?', |
| | | 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: 'Ячеек сеткла', |
| | | 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:'请确认设备是否已关闭MES联机?', |
| | | temperedswitch:'钢化开关', |
| | | dutyinformation:'值班信息', |
| | | process:'工序', |
| | | team:'班组', |
| | | basic:'设备', |
| | | makesure:'确认保存', |
| | | temperingtotal:'钢化炉数:', |
| | | glasstotal:'玻璃总数:', |
| | | Labelprinting:'标签打印', |
| | | Schedulingswitch:'调度开关', |
| | | }, |
| | | workOrder: { |
| | | upnumber:'上片位编号', |
| | | coatingtypesbe:'原片膜系', |
| | | 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: { |
| | | configName:'配置名', |
| | | configNamea:'配置名:', |
| | | configCode:'配置代码', |
| | | configValue:'配置值', |
| | | 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: 'Ссылк', |
| | | linka: 'Ссылк:', |
| | | inlink: 'Введите ссылку', |
| | | sort: 'Сортировк', |
| | | sorta: 'Сортировк:', |
| | | insort: 'Введите сортировку', |
| | | operate: 'Операция', |
| | | exit: 'Редактор', |
| | | delete:'Удал', |
| | | semenu:'Таблица меню второй степени', |
| | | semenuname:'二级菜单名称:', |
| | | inmenu: 'Введите меню', |
| | | delete: 'Удал', |
| | | menu: 'Меню.:', |
| | | sure: 'подтверд', |
| | | cancel: 'Отмена', |
| | | exmene: 'Изменение меню.', |
| | | yes: 'Да', |
| | | demenu: 'Удалить меню или нет?', |
| | | prompt: 'Подсказк', |
| | | }, |
| | | delivery: { |
| | | addrole: 'Добавьте роли.', |
| | | editrole: 'Изменение роли.', |
| | | role: 'Роль', |
| | | rolea: 'Роль:', |
| | | inrole: 'Введите роли.', |
| | | operate: 'Операция', |
| | | edit: 'Редактор', |
| | | delete: 'Удал', |
| | | sure: 'подтверд', |
| | | cancel: 'Отмена', |
| | | yes: 'Да', |
| | | 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:{ |
| | | slice:'片', |
| | | time: '次破时间', |
| | | tionnumber: '订单号', |
| | | 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', |
| | | order: '订单详情', |
| | | customerName: '客户名称', |
| | | project: '项目名称', |
| | | are: '面积', |
| | | quantity: 'Количество', |
| | | warehousing: 'Состояние', |
| | | deliveryDate: '送货时间', |
| | | notstocked: '未入库', |
| | | inboundstatus: '部分入库状态', |
| | | allstatus: '全部入库状态', |
| | | completedquantity: '完成数量', |
| | | scrapquantity: '报废数量', |
| | | number: 'Количество', |
| | | method: '加工方式', |
| | | innumber: '已入数量', |
| | | productstatus: '生产状态', |
| | | right: '正常', |
| | | stop: '终止', |
| | | inquire: '查询', |
| | | starttime :'开始时间', |
| | | endtime :'结束时间', |
| | | loading :'正在上片:', |
| | | }, |
| | | reportmanage:{ |
| | | productiontime :'生产时间', |
| | | starttime :'开始时间', |
| | | endtime :'结束时间', |
| | | ctype :'请选择类型', |
| | | cstate :'请选择状态', |
| | | cprocess :'请选择工序', |
| | | all :'全部', |
| | | completed :'完工', |
| | | broke :'Повреждение', |
| | | takeout :'Взять', |
| | | dreportwork :'未报工', |
| | | pendingwork :'已现补', |
| | | reportwork :'已报工', |
| | | reportworked :'已同步', |
| | | 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:{ |
| | | resetnumber:'架子号', |
| | | fail:'失败', |
| | | mes:'原片仓储详情', |
| | | warehousing:'原片入库', |
| | | pwarehousing:'入库请求', |
| | | wareout:'原片出库', |
| | | information:'是否出库该条信息?', |
| | | pwareout:'出库请求', |
| | | position:'吊装位:', |
| | | cposition:'请选择吊装位', |
| | | position1:'吊装位1', |
| | | position2:'吊装位2', |
| | | addglass:'原片信息', |
| | | operate: 'Операция', |
| | | exit:'Редактор', |
| | | delete:'Удал', |
| | | outbound:'出库', |
| | | deviceid:'设备ID', |
| | | enablestatea:'启用标记', |
| | | disable:'Отключ', |
| | | start:'Начало', |
| | | startslot:'开始工位', |
| | | endslot:'目标工位', |
| | | slotid:'格子ID', |
| | | slot:'格子号', |
| | | width:'Ширина стекла', |
| | | widtha:'Ширина стекла:', |
| | | inwidth:'请输入原片宽', |
| | | height:'Высота стекла', |
| | | inheight:'请输入原片高', |
| | | heighta:'Высота стекла:', |
| | | thickness:'原片厚度', |
| | | inthickness:'请输入原片厚度', |
| | | thicknessa:'原片厚度:', |
| | | films:'Типы покрытий', |
| | | infilms:'请输入膜系', |
| | | filmsa:'Типы покрытий:', |
| | | createtime:'创建时间', |
| | | remainquantity:'剩余数量', |
| | | thickremainquant:'原片剩余数量(张)', |
| | | thickremainquantity:'原片剩余数量(张):', |
| | | inquantity:'Введите кольчество.', |
| | | quantitya:'Количество:', |
| | | enableid:'任务ID', |
| | | originateslot:'起始格子', |
| | | endoriginateslot:'目标格子', |
| | | 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: 'Ждем.', |
| | | pass: 'Через', |
| | | setparameters: '设置参数', |
| | | project: 'Номер проекта', |
| | | projecta: 'Номер проекта:', |
| | | width: 'Ширина стекла', |
| | | height: 'Высота стекла', |
| | | thickness: '原片厚', |
| | | projectnumber: '工程原片序号', |
| | | state: 'Состояние', |
| | | createtime: '创建时间', |
| | | all: '全选', |
| | | removalmethod: '请选择除膜方式', |
| | | removalmethodp: '除膜方式', |
| | | removalmethoda: '除膜方式:', |
| | | noremoval: '不除膜', |
| | | removal: '除膜', |
| | | coarselyground: '粗磨', |
| | | finegrinding: '精磨', |
| | | }, |
| | | hellow: { |
| | | clickmakesure: '是否确认点击?', |
| | | logarithm: '对数:', |
| | | totalPairQuantitya: '任务总配对数', |
| | | pairQuantitya: '已出配对数', |
| | | waitingout: '等待出片', |
| | | finishout: '出片完成', |
| | | hollowSequence: '中空顺序', |
| | | isPair: '是否配对', |
| | | no: '否', |
| | | listFormula: '配方信息', |
| | | HollowGlass: '队列信息', |
| | | totalLayer: '总层数', |
| | | totalPairQuantity: '总配对数量', |
| | | pairQuantity: '已完成配对数量', |
| | | isForceList: '是否强制', |
| | | yesisForceList: '强制', |
| | | noisForceList: '非强制', |
| | | hollowCountOutOne: '中空一线玻璃数量', |
| | | hollowCountOutTwo: '中空二线玻璃数量', |
| | | hollowTotalAreaOutOne: '中空一线玻璃面积', |
| | | hollowTotalAreaOutTwo: '中空二线玻璃面积', |
| | | countIn: '钢化前大理片笼玻璃数量', |
| | | countOut: '钢化玻璃数量', |
| | | countOutOne: '切割一线玻璃数量', |
| | | countOutTwo: '切割二线玻璃数量', |
| | | totalAreaIn: '钢化前大理片笼玻璃面积', |
| | | totalAreaOut: '钢化玻璃面积', |
| | | totalAreaOutOne: '切割一线玻璃面积', |
| | | totalAreaOutTwo: '切割二线玻璃面积', |
| | | freeone: '一线空闲状态:', |
| | | freetwo: '二线空闲状态:', |
| | | freethree: '三线空闲状态:', |
| | | casFour: '气体4', |
| | | casFourb: '气体4:', |
| | | casFoura: '请选择气体4', |
| | | casOne: '气体1', |
| | | casOneb: '气体1:', |
| | | casOnea: '请选择气体1', |
| | | casThree: '气体3', |
| | | casThreeb: '气体3:', |
| | | casThreea: '请选择气体3', |
| | | casTwo: '气体2', |
| | | casTwob: '气体2:', |
| | | casTwoa: '请选择气体2', |
| | | Y: '有', |
| | | F: '无', |
| | | frameFour: '间隔板4', |
| | | frameFourb: '间隔板4:', |
| | | frameFoura: '请输入间隔板4', |
| | | frameOne: '间隔板1', |
| | | frameOneb: '间隔板1:', |
| | | frameOnea: '请输入间隔板1', |
| | | frameThree: '间隔板3', |
| | | frameThreeb: '间隔板3:', |
| | | frameThreea: '请输入间隔板3', |
| | | frameTwo: '间隔板2', |
| | | frameTwob: '间隔板2:', |
| | | frameTwoa: '请输入间隔板2', |
| | | intervalFrameHeightOne: '间隔框高度1', |
| | | intervalFrameHeightTwo: '间隔框高度2', |
| | | intervalFrameHeightThree: '间隔框高度3', |
| | | intervalFrameHeightFour: '间隔框高度4', |
| | | intervalFrameHeightaOne: '请输入间隔框高度1', |
| | | intervalFrameHeightaTwo: '请输入间隔框高度2', |
| | | intervalFrameHeightaThree: '请输入间隔框高度3', |
| | | intervalFrameHeightaFour: '请输入间隔框高度4', |
| | | intervalFrameHeightbOne: '间隔框高度1:', |
| | | intervalFrameHeightbTwo: '间隔框高度2:', |
| | | intervalFrameHeightbThree: '间隔框高度3:', |
| | | intervalFrameHeightbFour: '间隔框高度4:', |
| | | intervalFrameTypeOne: '间隔框类型1', |
| | | intervalFrameTypeTwo: '间隔框类型2', |
| | | intervalFrameTypeThree: '间隔框类型3', |
| | | intervalFrameTypeFour: '间隔框类型4', |
| | | intervalFrameTypecOne: '请选择间隔框类型1', |
| | | intervalFrameTypecTwo: '请选择间隔框类型2', |
| | | intervalFrameTypecThree: '请选择间隔框类型3', |
| | | intervalFrameTypecFour: '请选择间隔框类型4', |
| | | intervalFrameTypedOne: '间隔框类型1:', |
| | | intervalFrameTypedTwo: '间隔框类型2:', |
| | | intervalFrameTypedThree: '间隔框类型3:', |
| | | intervalFrameTypedFour: '间隔框类型4:', |
| | | intervalFrameTypea: 'tps胶', |
| | | intervalFrameTypeb: '铝间隔条', |
| | | intervalFrameWidthOne: '间隔框宽度1', |
| | | intervalFrameWidthTwo: '间隔框宽度2', |
| | | intervalFrameWidthThree: '间隔框宽度3', |
| | | intervalFrameWidthFour: '间隔框宽度4', |
| | | intervalFrameWidthaOne: '请输入间隔框宽度1', |
| | | intervalFrameWidthaTwo: '请输入间隔框宽度2', |
| | | intervalFrameWidthaThree: '请输入间隔框宽度3', |
| | | intervalFrameWidthaFour: '请输入间隔框宽度4', |
| | | intervalFrameWidthbOne: '间隔框宽度1:', |
| | | intervalFrameWidthbTwo: '间隔框宽度2:', |
| | | intervalFrameWidthbThree: '间隔框宽度3:', |
| | | intervalFrameWidthbFour: '间隔框宽度4:', |
| | | sealInsert: '密封嵌入', |
| | | sealInsertb: '密封嵌入:', |
| | | sealInserta: '请输入密封嵌入', |
| | | hollowformula: '中空配方', |
| | | hollowformuldet: '是否删除该中空配方?', |
| | | hollowtaskdet: '是否删除该任务?', |
| | | taskdet: '删除任务', |
| | | edithollowformula: '修改中空配方', |
| | | phollowformula: '请选择中空配方', |
| | | hollowformulp: '中空配方:', |
| | | bottomRemove: '下侧除膜量:', |
| | | bottomRemovep: '下侧除膜量', |
| | | bottomRemovea: '请输入下侧除膜量', |
| | | topRemove: '上侧除膜量:', |
| | | topRemovep: '上侧除膜量', |
| | | topRemovea: '请输入上侧除膜量', |
| | | leftRemove: '左侧除膜量:', |
| | | leftRemovep: '左侧除膜量', |
| | | leftRemovea: '请输入左侧除膜量', |
| | | rightRemove: '右侧除膜量:', |
| | | rightRemovep: '右侧除膜量', |
| | | rightRemovea: '请输入右侧除膜量', |
| | | formulaNamep: '配方名', |
| | | formulaName: '配方名:', |
| | | formulaNamea: '请输入配方名', |
| | | stopproject: '暂停任务', |
| | | pstopproject: '是否暂停任务?', |
| | | reviewproject: '预览工程', |
| | | line: '线路', |
| | | linea: '线路:', |
| | | line1: '线路一', |
| | | line2: '线路二', |
| | | line3: '线路三', |
| | | createtask: '创建任务', |
| | | starttask: '开始任务', |
| | | pstarttask: '是否开始任务?', |
| | | stoptask: '停止任务', |
| | | pstoptask: '是否停止任务?', |
| | | currenttask: '当前任务:', |
| | | claimednumber: '已领取配对数量:', |
| | | linenumber: '进入中空线数量:', |
| | | order: '出片顺序', |
| | | flowCardId: '流程卡', |
| | | thickness: '厚度', |
| | | coatingtypes: '膜系', |
| | | layer: '层数', |
| | | height: '长', |
| | | width: '宽', |
| | | state: '状态', |
| | | cardnumber: '流程卡号', |
| | | cardnumbera: '流程卡号:', |
| | | layernumber: '层号', |
| | | totalnumber: '总片数', |
| | | pairsnumber: '已配对数量', |
| | | missingnumber: '缺片数量', |
| | | damagenumber: '破损数量', |
| | | operate: '操作', |
| | | claimquest: '领取任务', |
| | | pclaimquest: '是否领取任务?', |
| | | missingfilms: '缺片详情', |
| | | forcedfilming: '强制出片', |
| | | pforcedfilming: '是否强制出片?', |
| | | brokenpieces: '破损片数', |
| | | realpieces: '实际片数', |
| | | route: '路线:', |
| | | croute: '请选择路线', |
| | | ptotalpairQuantity: '总配对数量:', |
| | | cpairQuantity: '请输入总配对数量', |
| | | schedulingswitch: '调度开关', |
| | | }, |
| | | screendisplay:{ |
| | | pchoice: '请选择', |
| | | pwidth: '请输入宽度', |
| | | pheight: '请输入高度', |
| | | upnumber: '上片数量', |
| | | } |
| | | } |
| New file |
| | |
| | | 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:{ |
| | | untask:'无任务', |
| | | tonumber:'上片总数量', |
| | | finishnumber:'已完成数量', |
| | | rackreset:'架子复位', |
| | | prackreset:'是否架子复位?', |
| | | 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:{ |
| | | onesort:'一线掰片', |
| | | twosort:'二线掰片', |
| | | inPlace:'到位', |
| | | ninPlace:'未到位', |
| | | emptymissions:'空任务', |
| | | advancetask:'进片任务', |
| | | outputtasks:'出片任务', |
| | | schedulingtasks:'调度任务', |
| | | advancerequests:'进片请求', |
| | | releaserequest:'出片请求', |
| | | straighttasks:'直通任务', |
| | | endingtask:'结束', |
| | | another:'其他', |
| | | id:'磨边前理片笼表ID', |
| | | remainWidth:'剩余', |
| | | taskRunning:'任务请求', |
| | | updateTime:'更新时间', |
| | | place:'是否到位', |
| | | layernow:'当前层号', |
| | | gridnumber:'栅格号', |
| | | glassnumber:'玻璃编号', |
| | | width:'宽', |
| | | height:'高', |
| | | startstatus:'启用状态', |
| | | disable:'已禁用', |
| | | start:'已启用', |
| | | deficiencieste:'报缺', |
| | | updown:'人工下片', |
| | | operate:'操作', |
| | | prompt:'提示', |
| | | information:'是否报缺该条信息?', |
| | | infor:'是否人工下片该条信息?', |
| | | yes:'是', |
| | | cancel:'取消', |
| | | }, |
| | | order:{ |
| | | projectnumber:'请输入工程号', |
| | | dilapidation:'破损', |
| | | takeaway:'人工拿走', |
| | | takeawaya:'是否人工拿走该条信息?', |
| | | takeon:'摆片完成', |
| | | }, |
| | | searchOrder:{ |
| | | furnaces:'满炉炉数', |
| | | furnfullTemp:'玻璃总量', |
| | | startCell:'目标层号', |
| | | endCell:'预留层号', |
| | | begin:'开始', |
| | | finish:'完成', |
| | | uncar:'未上车', |
| | | inkage:'进片', |
| | | successfullyprocessed:'任务成功处理', |
| | | psuccessfullyprocessed:'是否进行任务成功处理?', |
| | | taskfailure:'任务失败处理', |
| | | ptaskfailure:'是否进行任务失败处理?', |
| | | totallogarithms:'总对数', |
| | | numberpairs:'配对数', |
| | | numberoccupied:'占用格子数', |
| | | totalfurnaces:'总炉数', |
| | | cagesnumber:'笼内数量', |
| | | slotnumber:'占有格子数', |
| | | progress:'进度%', |
| | | whethersame:'是否相同', |
| | | same:'相同', |
| | | notsame:'不相同', |
| | | partask:'任务重置', |
| | | partasks:'是否任务重置?', |
| | | empty:'默认空任务', |
| | | historicaltasks:'历史任务', |
| | | cagedetails:'笼内详情', |
| | | inkageEntity:'进片联机状态:', |
| | | requestEntity:'进片请求状态:', |
| | | mesReplyEntity:'启动命令:', |
| | | outInkageEntity:'出片联机状态:', |
| | | outRequestEntity:'出片请求状态:', |
| | | breakagn:'未破损', |
| | | lacknumber:'缺片数量', |
| | | processcard:'指定流程卡', |
| | | filminformation:'人工下片信息', |
| | | currentglassinformation:'扫码枪当前玻璃信息', |
| | | printlabels:'打印标签', |
| | | deleteTask:'结束工程', |
| | | pdeleteTask:'是否结束工程?', |
| | | 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:'请确认设备是否已关闭MES联机?', |
| | | temperedswitch:'钢化开关', |
| | | dutyinformation:'值班信息', |
| | | process:'工序', |
| | | team:'班组', |
| | | basic:'设备', |
| | | makesure:'确认保存', |
| | | temperingtotal:'钢化炉数:', |
| | | glasstotal:'玻璃总数:', |
| | | Labelprinting:'标签打印', |
| | | Schedulingswitch:'调度开关', |
| | | }, |
| | | workOrder:{ |
| | | upnumber:'上片位编号', |
| | | glassID:'玻璃ID', |
| | | height:'高', |
| | | width:'宽', |
| | | thickness:'厚度', |
| | | coatingtypes:'膜系', |
| | | coatingtypesbe:'原片膜系', |
| | | 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:{ |
| | | addconfigName:'添加配置', |
| | | editconfigName:'修改配置', |
| | | configName:'配置名', |
| | | configNamea:'配置名:', |
| | | configCode:'配置代码', |
| | | configValue:'配置值', |
| | | configValuea:'配置值:', |
| | | 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:{ |
| | | slice:'片', |
| | | load:'切割', |
| | | edg:'磨边', |
| | | temp:'钢化', |
| | | hollow:'中空', |
| | | oneFinish:'一线完成', |
| | | twoFinish:'二线完成', |
| | | oneunFinish:'一线未完成', |
| | | twounFinish:'二线未完成', |
| | | ondDamage:'一线破损', |
| | | percent:'进度百分比', |
| | | time: '次破时间', |
| | | tionnumber: '订单号', |
| | | 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', |
| | | order: '订单详情', |
| | | customerName: '客户名称', |
| | | project: '项目名称', |
| | | are: '面积', |
| | | quantity: '数量', |
| | | warehousing: '状态', |
| | | deliveryDate: '送货时间', |
| | | notstocked: '未入库', |
| | | inboundstatus: '部分入库状态', |
| | | allstatus: '全部入库状态', |
| | | completedquantity: '完成数量', |
| | | scrapquantity: '报废数量', |
| | | number: '数量', |
| | | method: '加工方式', |
| | | innumber: '已入数量', |
| | | productstatus: '生产状态', |
| | | right: '正常', |
| | | stop: '终止', |
| | | inquire: '查询', |
| | | starttime :'开始时间', |
| | | endtime :'结束时间', |
| | | loading :'正在上片:', |
| | | brokenNum:'破损数量', |
| | | inventory:'库存', |
| | | inventoryarea:'库存面积', |
| | | shippedQuantity:'已发货数量', |
| | | reportWorkQuantity:'完工数量', |
| | | reportWorkQuantityCount:'破损数量', |
| | | processId:'流程卡号', |
| | | historicaltasks1:'原片仓储', |
| | | historicaltasks2:'上片一线', |
| | | historicaltasks3:'上片二线', |
| | | historicaltasks4:'卧式一线', |
| | | historicaltasks5:'卧式二线', |
| | | historicaltasks6:'钢化大理片', |
| | | historicaltasks7:'中空一线', |
| | | historicaltasks8:'中空二线', |
| | | historicaltasks9:'中空大理片', |
| | | historicaltasks10:'生产统计', |
| | | date:'日期', |
| | | countOutOne: '切割一线数量', |
| | | totalAreaOutOne: '切割一线面积', |
| | | countOutTwo: '切割二线数量', |
| | | totalAreaOutTwo: '切割二线面积', |
| | | countIn: '钢化前大理片数量', |
| | | totalAreaIn: '钢化前大理片面积', |
| | | countOut: '钢化数量', |
| | | totalAreaOut: '钢化面积', |
| | | hollowCountOutOne: '中空一线数量', |
| | | hollowTotalAreaOutOne: '中空一线面积', |
| | | hollowCountOutTwo: '中空二线数量', |
| | | hollowTotalAreaOutTwo: '中空二线面积', |
| | | }, |
| | | reportmanage:{ |
| | | productiontime :'生产时间', |
| | | starttime :'开始时间', |
| | | endtime :'结束时间', |
| | | ctype :'请选择类型', |
| | | cstate :'请选择状态', |
| | | cprocess :'请选择工序', |
| | | all :'全部', |
| | | completed :'完工', |
| | | broke :'破损', |
| | | takeout :'拿走', |
| | | dreportwork :'未报工', |
| | | pendingwork :'已现补', |
| | | reportwork :'已报工', |
| | | reportworked :'已同步', |
| | | 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:{ |
| | | resetnumber:'架子号', |
| | | fail:'失败', |
| | | mes:'原片仓储详情', |
| | | warehousing:'原片入库', |
| | | pwarehousing:'入库请求', |
| | | wareout:'原片出库', |
| | | information:'是否出库该条信息?', |
| | | pwareout:'出库请求', |
| | | position:'吊装位:', |
| | | cposition:'请选择吊装位', |
| | | position1:'吊装位1', |
| | | position2:'吊装位2', |
| | | addglass:'原片信息', |
| | | operate: '操作', |
| | | exit:'编辑', |
| | | delete:'删除', |
| | | outbound:'出库', |
| | | deviceid:'设备ID', |
| | | enablestatea:'启用标记', |
| | | disable:'禁用', |
| | | start:'启用', |
| | | startslot:'开始工位', |
| | | endslot:'目标工位', |
| | | slotid:'格子ID', |
| | | slot:'格子号', |
| | | width:'原片宽', |
| | | widtha:'原片宽:', |
| | | inwidth:'请输入原片宽', |
| | | height:'原片高', |
| | | inheight:'请输入原片高', |
| | | heighta:'原片高:', |
| | | thickness:'原片厚度', |
| | | inthickness:'请输入原片厚度', |
| | | thicknessa:'原片厚度:', |
| | | films:'膜系', |
| | | infilms:'请输入膜系', |
| | | filmsa:'膜系:', |
| | | createtime:'创建时间', |
| | | remainquantity:'剩余数量', |
| | | thickremainquantity:'原片剩余数量(张):', |
| | | thickremainquant:'原片剩余数量(张)', |
| | | inquantity:'请输入数量', |
| | | quantitya:'数量:', |
| | | enableid:'任务ID', |
| | | originateslot:'起始格子', |
| | | endoriginateslot:'目标格子', |
| | | 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: '等待中', |
| | | pass: '通过', |
| | | setparameters: '设置参数', |
| | | project: '工程号', |
| | | projecta: '工程号:', |
| | | width: '原片宽', |
| | | height: '原片高', |
| | | thickness: '原片厚', |
| | | projectnumber: '工程原片序号', |
| | | state: '状态', |
| | | createtime: '创建时间', |
| | | all: '全选', |
| | | removalmethod: '请选择除膜方式', |
| | | removalmethodp: '除膜方式', |
| | | removalmethoda: '除膜方式:', |
| | | noremoval: '不除膜', |
| | | removal: '除膜', |
| | | coarselyground: '粗磨', |
| | | finegrinding: '精磨', |
| | | }, |
| | | hellow: { |
| | | clickmakesure: '是否确认点击?', |
| | | logarithm: '对数:', |
| | | totalPairQuantitya: '任务总配对数', |
| | | pairQuantitya: '已出配对数', |
| | | waitingout: '等待出片', |
| | | finishout: '出片完成', |
| | | hollowSequence: '中空顺序', |
| | | isPair: '是否配对', |
| | | no: '否', |
| | | listFormula: '配方信息', |
| | | HollowGlass: '队列信息', |
| | | totalLayer: '总层数', |
| | | totalPairQuantity: '总配对数量', |
| | | pairQuantity: '已完成配对数量', |
| | | isForceList: '是否强制', |
| | | yesisForceList: '强制', |
| | | noisForceList: '非强制', |
| | | hollowCountOutOne: '中空一线玻璃数量', |
| | | hollowCountOutTwo: '中空二线玻璃数量', |
| | | hollowTotalAreaOutOne: '中空一线玻璃面积', |
| | | hollowTotalAreaOutTwo: '中空二线玻璃面积', |
| | | countIn: '钢化前大理片笼玻璃数量', |
| | | countOut: '钢化玻璃数量', |
| | | countOutOne: '切割一线玻璃数量', |
| | | countOutTwo: '切割二线玻璃数量', |
| | | totalAreaIn: '钢化前大理片笼玻璃面积', |
| | | totalAreaOut: '钢化玻璃面积', |
| | | totalAreaOutOne: '切割一线玻璃面积', |
| | | totalAreaOutTwo: '切割二线玻璃面积', |
| | | freeone: '一线空闲状态:', |
| | | freetwo: '二线空闲状态:', |
| | | freethree: '三线空闲状态:', |
| | | casFour: '气体4', |
| | | casFourb: '气体4:', |
| | | casFoura: '请选择气体4', |
| | | casOne: '气体1', |
| | | casOneb: '气体1:', |
| | | casOnea: '请选择气体1', |
| | | casThree: '气体3', |
| | | casThreeb: '气体3:', |
| | | casThreea: '请选择气体3', |
| | | casTwo: '气体2', |
| | | casTwob: '气体2:', |
| | | casTwoa: '请选择气体2', |
| | | Y: '有', |
| | | F: '无', |
| | | frameFour: '间隔板4', |
| | | frameFourb: '间隔板4:', |
| | | frameFoura: '请输入间隔板4', |
| | | frameOne: '间隔板1', |
| | | frameOneb: '间隔板1:', |
| | | frameOnea: '请输入间隔板1', |
| | | frameThree: '间隔板3', |
| | | frameThreeb: '间隔板3:', |
| | | frameThreea: '请输入间隔板3', |
| | | frameTwo: '间隔板2', |
| | | frameTwob: '间隔板2:', |
| | | frameTwoa: '请输入间隔板2', |
| | | intervalFrameHeightOne: '间隔框高度1', |
| | | intervalFrameHeightTwo: '间隔框高度2', |
| | | intervalFrameHeightThree: '间隔框高度3', |
| | | intervalFrameHeightFour: '间隔框高度4', |
| | | intervalFrameHeightaOne: '请输入间隔框高度1', |
| | | intervalFrameHeightaTwo: '请输入间隔框高度2', |
| | | intervalFrameHeightaThree: '请输入间隔框高度3', |
| | | intervalFrameHeightaFour: '请输入间隔框高度4', |
| | | intervalFrameHeightbOne: '间隔框高度1:', |
| | | intervalFrameHeightbTwo: '间隔框高度2:', |
| | | intervalFrameHeightbThree: '间隔框高度3:', |
| | | intervalFrameHeightbFour: '间隔框高度4:', |
| | | intervalFrameTypeOne: '间隔框类型1', |
| | | intervalFrameTypeTwo: '间隔框类型2', |
| | | intervalFrameTypeThree: '间隔框类型3', |
| | | intervalFrameTypeFour: '间隔框类型4', |
| | | intervalFrameTypecOne: '请选择间隔框类型1', |
| | | intervalFrameTypecTwo: '请选择间隔框类型2', |
| | | intervalFrameTypecThree: '请选择间隔框类型3', |
| | | intervalFrameTypecFour: '请选择间隔框类型4', |
| | | intervalFrameTypedOne: '间隔框类型1:', |
| | | intervalFrameTypedTwo: '间隔框类型2:', |
| | | intervalFrameTypedThree: '间隔框类型3:', |
| | | intervalFrameTypedFour: '间隔框类型4:', |
| | | intervalFrameTypea: 'tps胶', |
| | | intervalFrameTypeb: '铝间隔条', |
| | | intervalFrameWidthOne: '间隔框宽度1', |
| | | intervalFrameWidthTwo: '间隔框宽度2', |
| | | intervalFrameWidthThree: '间隔框宽度3', |
| | | intervalFrameWidthFour: '间隔框宽度4', |
| | | intervalFrameWidthaOne: '请输入间隔框宽度1', |
| | | intervalFrameWidthaTwo: '请输入间隔框宽度2', |
| | | intervalFrameWidthaThree: '请输入间隔框宽度3', |
| | | intervalFrameWidthaFour: '请输入间隔框宽度4', |
| | | intervalFrameWidthbOne: '间隔框宽度1:', |
| | | intervalFrameWidthbTwo: '间隔框宽度2:', |
| | | intervalFrameWidthbThree: '间隔框宽度3:', |
| | | intervalFrameWidthbFour: '间隔框宽度4:', |
| | | sealInsert: '密封嵌入', |
| | | sealInsertb: '密封嵌入:', |
| | | sealInserta: '请输入密封嵌入', |
| | | hollowformula: '中空配方', |
| | | hollowformuldet: '是否删除该中空配方?', |
| | | hollowtaskdet: '是否删除该任务?', |
| | | taskdet: '删除任务', |
| | | edithollowformula: '修改中空配方', |
| | | phollowformula: '请选择中空配方', |
| | | hollowformulp: '中空配方:', |
| | | bottomRemove: '下侧除膜量:', |
| | | bottomRemovep: '下侧除膜量', |
| | | bottomRemovea: '请输入下侧除膜量', |
| | | topRemove: '上侧除膜量:', |
| | | topRemovep: '上侧除膜量', |
| | | topRemovea: '请输入上侧除膜量', |
| | | leftRemove: '左侧除膜量:', |
| | | leftRemovep: '左侧除膜量', |
| | | leftRemovea: '请输入左侧除膜量', |
| | | rightRemove: '右侧除膜量:', |
| | | rightRemovep: '右侧除膜量', |
| | | rightRemovea: '请输入右侧除膜量', |
| | | formulaNamep: '配方名', |
| | | formulaName: '配方名:', |
| | | formulaNamea: '请输入配方名', |
| | | stopproject: '暂停任务', |
| | | pstopproject: '是否暂停任务?', |
| | | reviewproject: '预览工程', |
| | | line: '线路', |
| | | linea: '线路:', |
| | | line1: '线路一', |
| | | line2: '线路二', |
| | | line3: '线路三', |
| | | createtask: '创建任务', |
| | | starttask: '开始任务', |
| | | pstarttask: '是否开始任务?', |
| | | stoptask: '停止任务', |
| | | pstoptask: '是否停止任务?', |
| | | currenttask: '当前任务:', |
| | | claimednumber: '已领取配对数量:', |
| | | linenumber: '进入中空线数量:', |
| | | order: '出片顺序', |
| | | flowCardId: '流程卡', |
| | | thickness: '厚度', |
| | | coatingtypes: '膜系', |
| | | layer: '层数', |
| | | height: '长', |
| | | width: '宽', |
| | | state: '状态', |
| | | cardnumber: '流程卡号', |
| | | cardnumbera: '流程卡号:', |
| | | layernumber: '层号', |
| | | totalnumber: '总片数', |
| | | pairsnumber: '已配对数量', |
| | | missingnumber: '缺片数量', |
| | | damagenumber: '破损数量', |
| | | operate: '操作', |
| | | claimquest: '领取任务', |
| | | pclaimquest: '是否领取任务?', |
| | | missingfilms: '缺片详情', |
| | | forcedfilming: '强制出片', |
| | | pforcedfilming: '是否强制出片?', |
| | | brokenpieces: '破损片数', |
| | | realpieces: '实际片数', |
| | | route: '路线:', |
| | | croute: '请选择路线', |
| | | ptotalpairQuantity: '总配对数量:', |
| | | cpairQuantity: '请输入总配对数量', |
| | | schedulingswitch: '调度开关', |
| | | }, |
| | | screendisplay:{ |
| | | pchoice: '请选择', |
| | | pwidth: '请输入宽度', |
| | | pheight: '请输入高度', |
| | | upnumber: '上片数量', |
| | | } |
| | | } |
| New file |
| | |
| | | <script setup> |
| | | import useUserInfoStore from '@/stores/userInfo' |
| | | import userInfo from '@/stores/userInfo' |
| | | import request from '@/utils/request' |
| | | import {ElMessage} from 'element-plus' |
| | | import {ref, watch, onMounted, onUnmounted } from 'vue' |
| | | import deepClone from '@/utils/deepClone' |
| | | import { useRouter } from 'vue-router'; |
| | | import { useI18n } from 'vue-i18n' |
| | | import { provide } from 'vue'; |
| | | // import {host, WebSocketHost} from '@/utils/constants' |
| | | // import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | const globalDate = ref(''); |
| | | const { t } = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const store = userInfo() |
| | | const isCollapse = ref(false); |
| | | // const { $i18n } = useI18n(); // 获取 i18n 实例 |
| | | const router = useRouter() |
| | | const userStore = useUserInfoStore() |
| | | // const user = userStore.user.userName |
| | | let userInfoStr = window.localStorage.getItem('userInfo') |
| | | // const userInfoStr = localStorage.getItem('userInfo'); |
| | | // let userInfo = userInfoStr.user.token; |
| | | let token = userInfo; // 提取 token |
| | | // 退出登录方法 |
| | | function quit() { |
| | | // localStorage.removeItem('token'); |
| | | store.$patch({ |
| | | user: null, |
| | | }) |
| | | router.push('/login') |
| | | } |
| | | // let socket = null; |
| | | // const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/mainMes`; |
| | | // const handleMessage = (data) => { |
| | | // if(data.globalDate!=null){ |
| | | // window.localStorage.setItem('getglobalDate', data.globalDate[0]) |
| | | // }else{ |
| | | // globalDate.value = '' |
| | | // } |
| | | // } |
| | | function replaceChineseWithEnglish(menuData) { |
| | | // 定义中俄文对照关系对象 |
| | | const translation = { |
| | | '上片机': 'Стол загрузки', |
| | | '上片': 'Верхняя часть', |
| | | '掰片/识别': 'Разлом/идентификация', |
| | | '卧式缓存': ' Горизонтальный буфер', |
| | | '磨边前卧式缓存': 'Горизонтальный буфер перед шлифовкой', |
| | | '下片卧式缓存': 'Горизонтальный буфер стекла разгрузки', |
| | | '磨边(冷加工)': 'Шлифовать края (холодная обработка)', |
| | | '1线磨边(冷加工)': 'Шлифовать края 1 линии (холодная обработка)', |
| | | '2线磨边(冷加工)': 'Шлифовать края 2 линии (холодная обработка)', |
| | | '大理片笼': 'Буферная система', |
| | | '钢化': 'Закалка', |
| | | '钢化前': 'Перед закалки', |
| | | '钢化后': 'После закалки', |
| | | '下片台': 'Стол разгрузки', |
| | | '系统管理': 'Управление системой', |
| | | '用户管理': 'Управление пользователем', |
| | | '权限管理': 'Управление полномочиями', |
| | | '角色管理': 'Управление ролью', |
| | | '可视化系统': 'Визуальная система', |
| | | '报工管理': 'Управление отчетностью', |
| | | '仓储中心': 'Складской центр', |
| | | '原片仓储': 'Склад сырья', |
| | | }; |
| | | menuData.forEach(menu => { |
| | | menu.menuName = translation[menu.menuName] || menu.menuName; |
| | | // if (menu.children) { |
| | | menu.children && menu.children.forEach(submenu => { |
| | | submenu.menuName = translation[submenu.menuName] || submenu.menuName; |
| | | }); |
| | | // } |
| | | }); |
| | | } |
| | | function replaceChineseWithRussian(menuData) { |
| | | // 定义中英文对照关系对象 |
| | | const translation = { |
| | | '上片机': 'Loading Machine', |
| | | '上片一线': 'First line on film', |
| | | '上片二线': 'Second line on film', |
| | | '掰片/识别': 'Breaking /Identification', |
| | | '掰片一线': 'Broken piece line', |
| | | '掰片二线': 'Broken pieces with two lines', |
| | | '卧式缓存': 'Horizontal cache', |
| | | '卧式缓存一号线': 'Horizontal Cache 1', |
| | | '卧式缓存二号线': 'Horizontal Cache 2', |
| | | '磨边前卧式缓存': 'Horizontal buffer before edge grinding', |
| | | '下片卧式缓存': 'Offline horizontal cache', |
| | | '磨边(冷加工)': 'Grinding edge (cold processing)', |
| | | '磨边(冷加工)': 'Grinding edge (cold processing)', |
| | | '1线磨边(冷加工)': '1-line edge grinding (cold processing)', |
| | | '2线磨边(冷加工)': '2-line edge grinding (cold processing)', |
| | | '大理片笼': 'Dali slice cage', |
| | | '钢化': 'Toughened', |
| | | '钢化查询': 'Tempered steel inquiry', |
| | | '钢化前': 'Before Tempering', |
| | | '钢化后': 'After Tempering', |
| | | '下片台': 'Next Stage', |
| | | '系统管理': 'System Management', |
| | | '用户管理': 'User Management', |
| | | '权限管理': 'Rights Management', |
| | | '角色管理': 'Roles', |
| | | '系统配置': 'system configuration', |
| | | '可视化系统': 'visualization system', |
| | | '报工管理': 'Job reporting management', |
| | | '仓储中心': 'Storage Center', |
| | | '原片仓储': 'Original film storage', |
| | | '中空': 'Hollow', |
| | | '中空一线': 'Hollow Line', |
| | | '中空二线': 'Hollow Second Line', |
| | | '中空三线': 'Hollow three line', |
| | | '中空理片笼': 'Hollow Film processing cage', |
| | | '折铝框一线': '1 Fold aluminum frame', |
| | | '折铝框二线': '2 Fold aluminum frame', |
| | | '折铝框三线': '3 Fold aluminum frame', |
| | | '大屏显示': 'Large Screen Display', |
| | | }; |
| | | menuData.forEach(menu => { |
| | | menu.menuName = translation[menu.menuName] || menu.menuName; |
| | | // if (menu.children) { |
| | | menu.children && menu.children.forEach(submenu => { |
| | | submenu.menuName = translation[submenu.menuName] || submenu.menuName; |
| | | }); |
| | | // } |
| | | }); |
| | | } |
| | | //提取菜单模块列表 |
| | | let menuList = $ref([]) |
| | | request.get('/loadGlass/sys/menu/getMenuTree').then((res) => { |
| | | if (res.code == 200) { |
| | | menuList = res.data |
| | | // translateMenu(menuList.value, language.value); |
| | | if (language.value === 'en') { |
| | | replaceChineseWithRussian(menuList); |
| | | } |
| | | if (language.value === 'py') { |
| | | replaceChineseWithEnglish(menuList); |
| | | } |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | router.push('/login') |
| | | } |
| | | }) |
| | | request.post('/loadGlass/sys/menu/getNowDate').then((res) => { |
| | | if (res.code == 200) { |
| | | window.localStorage.setItem('getglobalDate', res.data) |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | }) |
| | | const menu = ref(null) |
| | | let indexKey = ref(null) |
| | | function handleOpen(key) { |
| | | indexKey.value = key |
| | | } |
| | | watch( |
| | | indexKey, |
| | | (newVal, oldVal) => { |
| | | if (oldVal !== newVal && oldVal !== null) { |
| | | menu.value.close(oldVal) |
| | | } |
| | | }, |
| | | {deep: true} |
| | | ) |
| | | router.beforeEach((to, from) => { |
| | | //return false |
| | | }) |
| | | let openFlag = $ref(null) |
| | | //原始菜单打开 |
| | | const openMenu = (menuID) => { |
| | | if (menuID === openFlag) { |
| | | openFlag = null |
| | | } else { |
| | | openFlag = menuID |
| | | } |
| | | } |
| | | function toggleCollapse() { |
| | | isCollapse.value = !isCollapse.value; |
| | | } |
| | | onMounted(() => { |
| | | // fetchlack() |
| | | // socket = initializeWebSocket(socketUrl, handleMessage); |
| | | }); |
| | | // const fetchlack = async () => { |
| | | // try { |
| | | // console.log(33333); |
| | | // const response = await request.post('/loadGlass/sys/menu/getNowDate') |
| | | // console.log(response.code); |
| | | // if (response.code == 200) { |
| | | // console.log(11111); |
| | | // console.log(response.data); |
| | | // console.log(2222); |
| | | // // window.localStorage.setItem('getglobalDate', response.data) |
| | | // } else { |
| | | // ElMessage.error(response.message); |
| | | // } |
| | | // } |
| | | // catch (error) { |
| | | // // 处理错误 |
| | | // } |
| | | // } |
| | | let getglobalDate = window.localStorage.getItem('getglobalDate') |
| | | provide('globalDate', getglobalDate); |
| | | // onUnmounted(() => { |
| | | // if (socket) { |
| | | // closeWebSocket(socket); |
| | | // } |
| | | // }); |
| | | </script> |
| | | <template> |
| | | <div id="all"> |
| | | <el-container> |
| | | <el-header> |
| | | <div style="height: 100%;width: 100%;display: flex;background-color: #fff;"> |
| | | <img src="../assets/northGlass.ico" |
| | | alt="" @click="toggleCollapse" |
| | | style="max-width: 100%;max-height: 100%"> |
| | | <h3 style="margin: 1rem;font-weight: bold;width: 33vw;"> {{ $t('main.titleFirst') }}{{ userName }}{{ $t('main.titleLast') }}</h3> |
| | | <span style="height: 70%;width: 78vw;margin-top: 1rem;"> |
| | | <!-- <el-button class="sys-quit" |
| | | @click="quit" |
| | | round> |
| | | <el-icon size="large"> |
| | | <SwitchButton size=""/>{{ $t('main.quit') }} |
| | | </el-icon> |
| | | </el-button> --> |
| | | <el-button class="sys-quit" |
| | | @click="quit" |
| | | round> |
| | | <el-icon size="large"> |
| | | <SwitchButton size=""/>{{ $t('main.quit') }} |
| | | </el-icon> |
| | | </el-button> |
| | | <!-- <div class="header-left"> |
| | | <el-button @click="toggleCollapse" style="height: 30px;"> |
| | | <el-icon><Expand /></el-icon> |
| | | </el-button> |
| | | </div> --> |
| | | </span> |
| | | </div> |
| | | </el-header> |
| | | <div id="line"></div> |
| | | <el-container> |
| | | <el-aside :width="isCollapse ? '0px' : '200px'" style="background-color: #fff;"> |
| | | <el-row :span="20"> |
| | | <el-menu :default-active="activePath" class="el-menu-vertical-demo" > |
| | | <div class="menu"> |
| | | <div v-for="items in menuList"> |
| | | <div class='menu_title' v-show="!isCollapse" |
| | | @click="openMenu(items.id)"> |
| | | <span>☰</span> |
| | | {{ items.menuName }} |
| | | </div> |
| | | <ul class='enter-x-left' |
| | | v-show="openFlag==items.id"> |
| | | <li v-for="menuItem in items.children" |
| | | style="margin-bottom:2px"> |
| | | <router-link :to="{path:menuItem.url}"> |
| | | {{ menuItem.menuName }} |
| | | </router-link> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </el-menu> |
| | | </el-row> |
| | | </el-aside> |
| | | <el-main> |
| | | <div id="main"> |
| | | <router-view></router-view> |
| | | </div> |
| | | </el-main> |
| | | </el-container> |
| | | </el-container> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | .el-menu-vertical-demo:not(.el-menu--collapse) { |
| | | width: 200px; |
| | | min-height: 400px; |
| | | text-align: left; |
| | | } |
| | | #all { |
| | | background-color: #eee; |
| | | height: 100%; |
| | | } |
| | | .el-container { |
| | | height: 100vh; |
| | | width: 99vw; |
| | | } |
| | | * { |
| | | padding: 0; |
| | | margin: 0; |
| | | } |
| | | :deep(.sys-quit) { |
| | | float: right; |
| | | margin-right: 1rem; |
| | | width: 5rem; |
| | | } |
| | | /* 横线 */ |
| | | #line { |
| | | float: right; |
| | | width: 100%; |
| | | height: 1px; |
| | | /* margin-top: 0.5em; */ |
| | | margin-bottom: 0.5em; |
| | | background: #d4c4c4; |
| | | position: relative; |
| | | text-align: center; |
| | | } |
| | | :deep(span) { |
| | | margin-right: 0; |
| | | } |
| | | .el-collapse { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | } |
| | | #main { |
| | | width: 99%; |
| | | float: right; |
| | | height: 99%; |
| | | background-color: #fff; |
| | | } |
| | | /*------------*/ |
| | | /* .menu div div{ |
| | | width: 138px; |
| | | height: 35px; |
| | | line-height: 35px; |
| | | background: #C6E2FF; |
| | | color: #000000; |
| | | font-size: 16px; |
| | | padding-left: 15px; |
| | | transition: all 0.3s ease; |
| | | cursor: pointer; |
| | | position: relative; |
| | | font-weight: bold; |
| | | overflow: hidden; |
| | | border-bottom: 12px ; |
| | | margin-bottom:4px; |
| | | text-align: left; |
| | | cursor: pointer; */ |
| | | /* border-radius:8px; */ |
| | | /* outline: none; */ |
| | | /* background-color:#5CADFE; */ |
| | | /* box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19); */ |
| | | /* } */ |
| | | .menu { |
| | | width: 138px; |
| | | height: 33px; |
| | | line-height: 25px; |
| | | color: #000000; |
| | | font-size: 16px; |
| | | padding-left: 15px; |
| | | padding-right: 2px; |
| | | } |
| | | ul { |
| | | height: auto; |
| | | margin: 1px auto; |
| | | text-align: center; |
| | | } |
| | | ul li { |
| | | height: 28px; |
| | | width: 180px; |
| | | line-height: 30px; |
| | | /* background: rgb(128, 128, 128); */ |
| | | color: #000000; |
| | | padding-left: 36px; |
| | | cursor: pointer; |
| | | overflow: hidden; |
| | | text-align: left; |
| | | /* border-radius:8px; */ |
| | | /* outline: none; */ |
| | | /* background: #5CADFE; */ |
| | | /* box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19); */ |
| | | } |
| | | ul li:hover { |
| | | /* background:#5CADFE ; */ |
| | | color: #ffffff; |
| | | } |
| | | ul li a { |
| | | text-decoration: none; |
| | | color: #000000; |
| | | font-size: 14px; |
| | | } |
| | | ul li a:hover { |
| | | color: #1087ff; |
| | | } |
| | | .item_divider { |
| | | width: 118px; |
| | | height: 0px; |
| | | /* background-color: white; |
| | | opacity: 0.8; */ |
| | | margin-bottom: 2px; |
| | | } |
| | | .item a { |
| | | width: 138px; |
| | | height: 35px; |
| | | display: block; |
| | | /* text-align: justify; */ |
| | | text-decoration: none; |
| | | color: white; |
| | | font-size: 14px; |
| | | text-decoration: none; |
| | | } |
| | | .menu_title { |
| | | width: 180px; |
| | | /* white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; */ |
| | | height: 45px; |
| | | line-height: 55px; |
| | | /* background: #fafafa; */ |
| | | color: rgb(43, 42, 42); |
| | | font-size: 17px; |
| | | padding-left: 15px; |
| | | transition: all 0.3s ease; |
| | | cursor: pointer; |
| | | position: relative; |
| | | font-weight: bold; |
| | | overflow: hidden; |
| | | } |
| | | .menu_title:hover { |
| | | /* background: #dedede; */ |
| | | color: #3b9af9; |
| | | } |
| | | .indicator { |
| | | display: block; |
| | | width: 40px; |
| | | height: 35px; |
| | | font-weight: bold; |
| | | position: absolute; |
| | | right: 0px; |
| | | top: 0px; |
| | | transition: all 0.3s ease; |
| | | text-align: center; |
| | | } |
| | | /* 动画效果 */ |
| | | .enter-x-left { |
| | | z-index: 9; |
| | | opacity: 0; |
| | | animation: enter-x-left 0.4s ease-in-out 0.3s; |
| | | animation-fill-mode: forwards; |
| | | transform: translateX(-50px); |
| | | transition: all 0.3s ease; |
| | | } |
| | | .enter-x-left:nth-child(1) { |
| | | animation-delay: 0.1s; |
| | | } |
| | | .enter-x-left:nth-child(2) { |
| | | animation-delay: 0.2s; |
| | | } |
| | | .enter-x-left:nth-child(3) { |
| | | animation-delay: 0.3s; |
| | | } |
| | | .enter-x-left:nth-child(4) { |
| | | animation-delay: 0.4s; |
| | | } |
| | | @keyframes enter-x-left { |
| | | to { |
| | | opacity: 1; |
| | | transform: translateX(0); |
| | | } |
| | | } |
| | | .header-left{ |
| | | margin-left: -350px; |
| | | } |
| | | </style> |
| New file |
| | |
| | | import './assets/main.css' |
| | | import {createApp} from 'vue' |
| | | import {createPinia} from 'pinia' |
| | | import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' |
| | | import App from './App.vue' |
| | | import router from './router' |
| | | import ElementPlus from 'element-plus' |
| | | import 'element-plus/dist/index.css' |
| | | import zhCn from 'element-plus/dist/locale/zh-cn.mjs' |
| | | import VXETable from 'vxe-table' |
| | | import 'vxe-table/lib/style.css' |
| | | import i18n from '@/lang' |
| | | // import Echarts from "vue-echarts" |
| | | // echarts.registerMap('china', china) |
| | | // Vue.prototype.$echarts = echarts |
| | | // app.component("v-chart", Echarts) |
| | | // app.config.globalProperties.$echarts = echarts |
| | | import * as ElementPlusIconsVue from '@element-plus/icons-vue' |
| | | import 'babel-polyfill' |
| | | const app = createApp(App) |
| | | for (const [key, component] of Object.entries(ElementPlusIconsVue)) { |
| | | app.component(key, component) |
| | | } |
| | | const pinia = createPinia() |
| | | pinia.use(piniaPluginPersistedstate ) |
| | | app.use(VXETable) |
| | | app.use(pinia) |
| | | app.use(router) |
| | | // app.use(ElementPlus) |
| | | app.use(ElementPlus,{ |
| | | locale: zhCn, |
| | | }) |
| | | app.use(i18n) |
| | | app.mount('#app') |
| New file |
| | |
| | | import {createRouter, createWebHashHistory} from 'vue-router' |
| | | // import i18n from '@/utils/lang' |
| | | // import User from '../views/sys/User.vue' |
| | | // import Role from '../views/sys/Role.vue' |
| | | // import Menu from '../views/sys/Menu.vue' |
| | | const router = createRouter({ |
| | | history: createWebHashHistory(), |
| | | routes: [ |
| | | { |
| | | path: '/', |
| | | name: 'home', |
| | | //component: HomeView |
| | | component: () => import('../views/LoginView.vue') |
| | | }, |
| | | { |
| | | path: '/login', |
| | | name: 'login', |
| | | component: () => import('../views/LoginView.vue') |
| | | }, |
| | | { |
| | | path: '/new-page', // 新增的无需登录的页面 |
| | | name: 'newPage', |
| | | component: () => import('../views/NewPage.vue') |
| | | }, |
| | | { |
| | | path: '/main', |
| | | name: 'main', |
| | | component: () => import('../layout/MainErpView.vue'), |
| | | children:[ |
| | | { |
| | | path: 'Temperedlayout', |
| | | name: 'Temperedlayout', |
| | | component: () => import('../views/TL/Temperedlayout/Temperedlayout.vue'), |
| | | children:[ |
| | | { |
| | | path: 'selectLayout', |
| | | name: 'selectLayout', |
| | | component: () => import('../views/TL/Temperedlayout/Temperedlayout.vue'), |
| | | } |
| | | ] |
| | | }, |
| | | /*----------- 上片机 ----------------*/ |
| | | { |
| | | path: 'Returns', |
| | | name: 'return', |
| | | component: () => import('../views/Returns/return.vue'), |
| | | children:[ |
| | | { |
| | | path: '/Returns/upreturns', |
| | | name: 'upreturns', |
| | | component: () => import('../views/Returns/upreturns.vue') |
| | | }, |
| | | { |
| | | path: '/Returns/upreturns2', |
| | | name: 'upreturns2', |
| | | component: () => import('../views/Returns/upreturns2.vue') |
| | | }, |
| | | { |
| | | path: '/Returns/upreturns3', |
| | | name: 'upreturns3', |
| | | component: () => import('../views/Returns/upreturns3.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | /*----------- 掰片/识别 ----------------*/ |
| | | { |
| | | path: 'Identify', |
| | | name: 'ident', |
| | | component: () => import('../views/Identify/ident.vue'), |
| | | children: [ |
| | | { |
| | | path: '/Identify/identify', |
| | | name: 'identify', |
| | | component: () => import('../views/Identify/identify.vue') |
| | | }, |
| | | { |
| | | path: '/Identify/identifwu', |
| | | name: 'identifwu', |
| | | component: () => import('../views/Identify/identifwu.vue') |
| | | }, |
| | | { |
| | | path: '/Identify/identifwutwo', |
| | | name: 'identifwutwo', |
| | | component: () => import('../views/Identify/identifwutwo.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | /*----------- 卧式缓存 ----------------*/ |
| | | { |
| | | path: 'Caching', |
| | | name: 'Caching', |
| | | component: () => import('../views/Caching/caching.vue'), |
| | | children:[ |
| | | { |
| | | path: '/Caching/cachingbefore', |
| | | name: 'cachingbefore', |
| | | component: () => import('../views/Caching/cachingbefore.vue') |
| | | }, |
| | | { |
| | | path: '/Caching/cachingun', |
| | | name: 'cachingun', |
| | | component: () => import('../views/Caching/cachingun.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | /*----------- 磨边(冷加工) ----------------*/ |
| | | { |
| | | path: 'StockBasicData', |
| | | name: 'Select', |
| | | component: () => import('../views/StockBasicData/Select.vue'), |
| | | children:[ |
| | | { |
| | | path: '/StockBasicData/stockBasicData', |
| | | name: 'stockBasicData', |
| | | component: () => import('../views/StockBasicData/stockBasicData.vue') |
| | | }, |
| | | { |
| | | path: '/StockBasicData/stockBasicDatatwo', |
| | | name: 'stockBasicDatatwo', |
| | | component: () => import('../views/StockBasicData/stockBasicDatatwo.vue') |
| | | }, |
| | | { |
| | | path: '/StockBasicData/stockBasicyiwu', |
| | | name: 'stockBasicyiwu', |
| | | component: () => import('../views/StockBasicData/stockBasicyiwu.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | /*----------- 大理片笼 ----------------*/ |
| | | { |
| | | path: 'Slicecage', |
| | | name: 'Slicecage', |
| | | component: () => import('../views/Slicecage/slicecage.vue'), |
| | | children:[ |
| | | { |
| | | path: '/Slicecage/slicecage', |
| | | name: 'slicecage', |
| | | component: () => import('../views/Slicecage/slicecage.vue') |
| | | }, |
| | | |
| | | ] |
| | | |
| | | // { |
| | | // path: '/slicecagehistory', |
| | | // name: 'slicecagehistory', |
| | | // component: () => import('../views/slicecagehistory.vue') |
| | | // }, |
| | | }, |
| | | /*----------- 钢化 ----------------*/ |
| | | { |
| | | path: 'PurchaseReturn', |
| | | name: 'purchase', |
| | | component: () => import('../views/PurchaseReturn/purchase.vue'), |
| | | children:[ |
| | | { |
| | | path: '/PurchaseReturn/purchaseReturn', |
| | | name: 'purchaseReturn', |
| | | component: () => import('../views/PurchaseReturn/purchaseReturn.vue') |
| | | }, |
| | | { |
| | | path: '/PurchaseReturn/purchaseStorage', |
| | | name: 'purchaseStorage', |
| | | component: () => import('../views/PurchaseReturn/purchaseStorage.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | /*----------- 仓储中心 ----------------*/ |
| | | { |
| | | path: 'GlassStorage', |
| | | name: 'GlassStorage', |
| | | component: () => import('../views/GlassStorage/GlassStorage.vue'), |
| | | children:[ |
| | | { |
| | | path: '/GlassStorage/MaterialRackManagement', |
| | | name: 'MaterialRackManagement', |
| | | component: () => import('../views/GlassStorage/MaterialRackManagement.vue') |
| | | }, |
| | | { |
| | | path: '/GlassStorage/rawfilmstorage', |
| | | name: 'rawfilmstorage', |
| | | component: () => import('../views/GlassStorage/rawfilmstorage.vue') |
| | | }, |
| | | { |
| | | path: '/GlassStorage/rawfilmstorage2', |
| | | name: 'rawfilmstorage2', |
| | | component: () => import('../views/GlassStorage/rawfilmstorage2.vue') |
| | | } |
| | | ] |
| | | }, |
| | | |
| | | /*----------- 可视化系统 ----------------*/ |
| | | { |
| | | path: 'Visualization', |
| | | name: 'screen', |
| | | component: () => import('../views/Visualization/screen.vue'), |
| | | children:[ |
| | | { |
| | | path: '/Visualization/screenone', |
| | | name: 'screenone', |
| | | component: () => import('../views/Visualization/screenone.vue') |
| | | }, |
| | | { |
| | | path: '/Visualization/screentwo', |
| | | name: 'screentwo', |
| | | component: () => import('../views/Visualization/screentwo.vue') |
| | | }, |
| | | { |
| | | path: '/Visualization/screenthree', |
| | | name: 'screenthree', |
| | | component: () => import('../views/Visualization/screenthree.vue') |
| | | } |
| | | ] |
| | | }, |
| | | /*----------- 系统管理 ----------------*/ |
| | | { |
| | | path: 'User', |
| | | name: 'user', |
| | | component: () => import('../views/User/user.vue'), |
| | | children:[ |
| | | { |
| | | path: '/User/userlist', |
| | | name: 'userlist', |
| | | component: () => import('../views/User/userlist.vue') |
| | | }, |
| | | { |
| | | path: '/User/rolelist', |
| | | name: 'rolelist', |
| | | component: () => import('../views/User/rolelist.vue') |
| | | }, |
| | | { |
| | | path: '/User/permissions', |
| | | name: 'permissions', |
| | | component: () => import('../views/User/permissions.vue') |
| | | }, |
| | | { |
| | | path: '/User/userpageNo', |
| | | name: 'userpageNo', |
| | | component: () => import('../views/User/userpageNo.vue') |
| | | } |
| | | ] |
| | | }, |
| | | /*----------- 显示 ----------------*/ |
| | | { |
| | | path: 'largescreen', |
| | | name: 'largescreen', |
| | | component: () => import('../views/largescreen/largescreen.vue'), |
| | | children:[ |
| | | { |
| | | path: '/largescreen/largescreen', |
| | | name: 'largescreen', |
| | | component: () => import('../views/largescreen/largescreen.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | /*----------- 报工管理 ----------------*/ |
| | | { |
| | | path: 'reportWork', |
| | | name: 'reportWork', |
| | | component: () => import('../views/ReportWork/reportWork.vue'), |
| | | children: [ |
| | | { |
| | | path: '/ReportWork/reportWork', |
| | | name: 'reportWork', |
| | | component: () => import('../views/ReportWork/reportWork.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | |
| | | /*----------- 大屏显示 ----------------*/ |
| | | { |
| | | path: 'largescreendisplay', |
| | | name: 'screendisplay', |
| | | component: () => import('../views/largescreendisplay/screendisplay.vue'), |
| | | children: [ |
| | | { |
| | | path: '/largescreendisplay/screendisplay', |
| | | name: 'screendisplay', |
| | | component: () => import('../views/largescreendisplay/screendisplay.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | /*----------- 中空 ----------------*/ |
| | | { |
| | | path: 'hollow', |
| | | name: 'hol', |
| | | component: () => import('../views/hollow/hol.vue'), |
| | | children: [ |
| | | { |
| | | path: '/hollow/hollowequipment', |
| | | name: 'hollowequipment', |
| | | component: () => import('../views/hollow/hollowequipment.vue') |
| | | }, |
| | | { |
| | | path: '/hollow/hollowequipmenttwo', |
| | | name: 'hollowequipmenttwo', |
| | | component: () => import('../views/hollow/hollowequipmenttwo.vue') |
| | | }, |
| | | { |
| | | path: '/hollow/hollowequipmenthree', |
| | | name: 'hollowequipmenthree', |
| | | component: () => import('../views/hollow/hollowequipmenthree.vue') |
| | | }, |
| | | { |
| | | path: '/hollow/hollowslicecage', |
| | | name: 'hollowslicecage', |
| | | component: () => import('../views/hollow/hollowslicecage.vue') |
| | | }, |
| | | { |
| | | path: '/hollow/hollowaluminum', |
| | | name: 'hollowaluminum', |
| | | component: () => import('../views/hollow/hollowaluminum.vue') |
| | | }, |
| | | { |
| | | path: '/hollow/hollowaluminumtwo', |
| | | name: 'hollowaluminumtwo', |
| | | component: () => import('../views/hollow/hollowaluminumtwo.vue') |
| | | }, |
| | | { |
| | | path: '/hollow/hollowaluminumthree', |
| | | name: 'hollowaluminumthree', |
| | | component: () => import('../views/hollow/hollowaluminumthree.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | /*----------- 管理系统 ----------------*/ |
| | | { |
| | | path: 'sys', |
| | | name: 'screen', |
| | | component: () => import('../views/Visualization/screen.vue'), |
| | | children: [ |
| | | // { |
| | | // path: '/sys/users', |
| | | // name: 'SysUser', |
| | | // component: User |
| | | // }, |
| | | // { |
| | | // path: '/sys/roles', |
| | | // name: 'SysRole', |
| | | // component: Role |
| | | // }, |
| | | // { |
| | | // path: '/sys/menus', |
| | | // name: 'SysMenu', |
| | | // component: Menu |
| | | // }, |
| | | ] |
| | | }, |
| | | // { |
| | | // path: '', |
| | | // redirect: '/hollow/hollowslicecage' |
| | | // } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/register', |
| | | name: 'register', |
| | | component: () => import('../views/RegisterView.vue') |
| | | }, |
| | | { |
| | | path: '/slicecagehistory', |
| | | name: 'slicecagehistory', |
| | | component: () => import('../views/Slicecage/slicecagehistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/Slicecage/slicecagehistory', |
| | | name: 'slicecagehistory', |
| | | component: () => import('../views/Slicecage/slicecagehistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/hellowslicecagehistory', |
| | | name: 'hellowslicecagehistory', |
| | | component: () => import('../views/hollow/hellowslicecagehistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/hollow/hellowslicecagehistory', |
| | | name: 'hellowslicecagehistory', |
| | | component: () => import('../views/hollow/hellowslicecagehistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/hellowquiphistory', |
| | | name: 'hellowquiphistory', |
| | | component: () => import('../views/hollow/hellowquiphistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/hollow/hellowquiphistory', |
| | | name: 'hellowquiphistory', |
| | | component: () => import('../views/hollow/hellowquiphistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/hellowquiptwohistory', |
| | | name: 'hellowquiptwohistory', |
| | | component: () => import('../views/hollow/hellowquiptwohistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/hollow/hellowquiptwohistory', |
| | | name: 'hellowquiptwohistory', |
| | | component: () => import('../views/hollow/hellowquiptwohistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/hellowquipthreehistory', |
| | | name: 'hellowquipthreehistory', |
| | | component: () => import('../views/hollow/hellowquipthreehistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/hollow/hellowquipthreehistory', |
| | | name: 'hellowquipthreehistory', |
| | | component: () => import('../views/hollow/hellowquipthreehistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/cachingbeforehistory', |
| | | name: 'cachingbeforehistory', |
| | | component: () => import('../views/Caching/cachingbeforehistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/Caching/cachingbeforehistory', |
| | | name: 'cachingbeforehistory', |
| | | component: () => import('../views/Caching/cachingbeforehistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/cachingunhistory', |
| | | name: 'cachingunhistory', |
| | | component: () => import('../views/Caching/cachingunhistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/Caching/cachingunhistory', |
| | | name: 'cachingunhistory', |
| | | component: () => import('../views/Caching/cachingunhistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/rawhistory', |
| | | name: 'rawhistory', |
| | | component: () => import('../views/GlassStorage/rawhistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/GlassStorage/rawhistory', |
| | | name: 'rawhistory', |
| | | component: () => import('../views/GlassStorage/rawhistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/stockhistory', |
| | | name: 'stockhistory', |
| | | component: () => import('../views/StockBasicData/stockhistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/StockBasicData/stockhistory', |
| | | name: 'stockhistory', |
| | | component: () => import('../views/StockBasicData/stockhistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/upreturnhistory', |
| | | name: 'upreturnhistory', |
| | | component: () => import('../views/Returns/upreturnhistory.vue'), |
| | | children: [ |
| | | { |
| | | path: '/Returns/upreturnhistory', |
| | | name: 'upreturnhistory', |
| | | component: () => import('../views/Returns/upreturnhistory.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/upreturnhistory2', |
| | | name: 'upreturnhistory2', |
| | | component: () => import('../views/Returns/upreturnhistory2.vue'), |
| | | children: [ |
| | | { |
| | | path: '/Returns/upreturnhistory2', |
| | | name: 'upreturnhistory2', |
| | | component: () => import('../views/Returns/upreturnhistory2.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/statistics', |
| | | name: 'statistics', |
| | | component: () => import('../views/largescreendisplay/statistics.vue'), |
| | | children: [ |
| | | { |
| | | path: '/largescreendisplay/statistics', |
| | | name: 'statistics', |
| | | component: () => import('../views/largescreendisplay/statistics.vue') |
| | | }, |
| | | ] |
| | | }, |
| | | ] |
| | | }) |
| | | // 导航守卫 |
| | | router.beforeEach((to, from, next) => { |
| | | const isAuthenticated = !!localStorage.getItem('authToken'); // 假设这是你的登录状态检查逻辑 |
| | | if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) { |
| | | next({ name: 'login' }); // 如果需要登录但未登录,则重定向到登录页面 |
| | | } else { |
| | | next(); // 否则继续导航 |
| | | } |
| | | }); |
| | | export default router |
| New file |
| | |
| | | import { ref, computed } from 'vue' |
| | | import { defineStore } from 'pinia' |
| | | |
| | | export const useCounterStore = defineStore('counter', () => { |
| | | const count = ref(0) |
| | | const doubleCount = computed(() => count.value * 2) |
| | | function increment() { |
| | | count.value++ |
| | | } |
| | | |
| | | return { count, doubleCount, increment } |
| | | }) |
| New file |
| | |
| | | import {defineStore} from 'pinia' |
| | | import {ref} from "vue"; |
| | | |
| | | export default defineStore("productGlassType",{ |
| | | state: () =>{ |
| | | let GlassType=$ref(['','']) |
| | | return { |
| | | GlassType |
| | | } |
| | | } |
| | | }) |
| New file |
| | |
| | | // tableData.js |
| | | |
| | | import { ref } from 'vue'; |
| | | |
| | | export const tableData = ref([ |
| | | { |
| | | location: '1', |
| | | type: 'Type A', |
| | | length: '100', |
| | | height: '50', |
| | | thickness: '10', |
| | | quantity: '5', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '2', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 0 |
| | | }, |
| | | { |
| | | location: '3', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '4', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '5', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '1', |
| | | type: 'Type A', |
| | | length: '100', |
| | | height: '50', |
| | | thickness: '10', |
| | | quantity: '5', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '2', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 0 |
| | | }, |
| | | { |
| | | location: '3', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '4', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '5', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | },{ |
| | | location: '1', |
| | | type: 'Type A', |
| | | length: '100', |
| | | height: '50', |
| | | thickness: '10', |
| | | quantity: '5', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '2', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 0 |
| | | }, |
| | | { |
| | | location: '3', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '4', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '5', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | },{ |
| | | location: '1', |
| | | type: 'Type A', |
| | | length: '100', |
| | | height: '50', |
| | | thickness: '10', |
| | | quantity: '5', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '2', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 0 |
| | | }, |
| | | { |
| | | location: '3', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '4', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | }, |
| | | { |
| | | location: '5', |
| | | type: 'Type B', |
| | | length: '120', |
| | | height: '60', |
| | | thickness: '12', |
| | | quantity: '10', |
| | | entry_time: '2024-06-19 10:00:00', |
| | | batchnumber: '444', |
| | | shelf_status: 1 |
| | | } |
| | | // Add more data as needed |
| | | ]); |
| New file |
| | |
| | | import {defineStore} from 'pinia' |
| | | import {ref} from "vue"; |
| | | // import {createWebSocket, global_callback1} from "@/utils/webSocket"; |
| | | |
| | | export default defineStore("userInfo",{ |
| | | state: () =>{ |
| | | let user=ref(null) |
| | | return { |
| | | user |
| | | } |
| | | }, |
| | | actions:{ |
| | | // createWebSocket(){ |
| | | // createWebSocket(global_callback1) |
| | | // } |
| | | |
| | | }, |
| | | persist: true//数据持久化,防止刷新数据消失 |
| | | }) |
| New file |
| | |
| | | // WebSocketService.js |
| | | let socket = null; |
| | | export const initializeWebSocket = (socketUrl, messageHandler) => { |
| | | let messages='' ; |
| | | if (typeof WebSocket === "undefined") { |
| | | return null; |
| | | } |
| | | const socket = new WebSocket(socketUrl); |
| | | socket.onopen = function () { |
| | | }; |
| | | socket.onmessage = (msg) => { |
| | | if (!msg.data) { |
| | | return; |
| | | } |
| | | const isLastChunk = msg.data.endsWith('<END>'); |
| | | //是否为最后一块消息 |
| | | messages += msg.data; |
| | | if(isLastChunk||msg.data.length<50000) { |
| | | messages= messages.replace('<END>', ''); |
| | | const obj = JSON.parse(messages); |
| | | messages=''; |
| | | // 调用消息处理函数,将数据传递给 Vue 组件 |
| | | if (messageHandler) { |
| | | messageHandler(obj); |
| | | } |
| | | } |
| | | }; |
| | | return socket; |
| | | }; |
| | | export const closeWebSocket = (socket) => { |
| | | if (socket && socket.readyState === WebSocket.OPEN) { |
| | | socket.close(); |
| | | } |
| | | }; |
| New file |
| | |
| | | // src/services/api.js |
| | | import request from '../utils/request'; |
| | | import { ElMessage } from 'element-plus'; |
| | | |
| | | // Replace with your actual backend base URL |
| | | |
| | | // Function to find list of raw usages |
| | | const BASE_URL = 'glassStorage/api/rawUsage'; |
| | | const taskBASE_URL = 'glassStorage/api/storageTask'; |
| | | |
| | | export const findTasks = () => { |
| | | const url = `glassStorage/api/storageTask/findTasks`; |
| | | const options = { |
| | | method: 'get', |
| | | url, |
| | | json: true, |
| | | |
| | | }; |
| | | |
| | | return new Promise((resolve, reject) => { |
| | | request(options, (error, response, body) => { |
| | | if (error) { |
| | | reject(new Error(error.message)); |
| | | } else { |
| | | resolve(body); |
| | | } |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | |
| | | |
| | | export const findList = (params) => { |
| | | const url = `${BASE_URL}/findList`; |
| | | const options = { |
| | | method: 'post', |
| | | url, |
| | | json: true, |
| | | body: params |
| | | }; |
| | | |
| | | return new Promise((resolve, reject) => { |
| | | request(options, (error, response, body) => { |
| | | if (error) { |
| | | reject(new Error(error.message)); |
| | | } else { |
| | | resolve(body); |
| | | } |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | // Function to find raw usage by ID |
| | | export const findById = (id) => { |
| | | const url = `${BASE_URL}/${id}`; |
| | | const options = { |
| | | method: 'get', |
| | | url, |
| | | json: true |
| | | }; |
| | | |
| | | return new Promise((resolve, reject) => { |
| | | request(options, (error, response, body) => { |
| | | if (error) { |
| | | reject(new Error(error.message)); |
| | | } else { |
| | | resolve(body); |
| | | } |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | // Function to insert a new raw usage |
| | | export const insertRawUsage = (rawUsage) => { |
| | | const url = `${BASE_URL}`; |
| | | const options = { |
| | | method: 'post', |
| | | url, |
| | | json: true, |
| | | body: rawUsage |
| | | }; |
| | | |
| | | return new Promise((resolve, reject) => { |
| | | request(options, (error, response, body) => { |
| | | if (error) { |
| | | reject(new Error(error.message)); |
| | | } else { |
| | | resolve(body); |
| | | } |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | |
| | | export const updateRawUsage = async (rawUsage) => { |
| | | try { |
| | | const response = await request.post(`${BASE_URL}/updaterawUsage`, rawUsage); |
| | | ElMessage.success('修改成功'); |
| | | return response.data; |
| | | } catch (error) { |
| | | ElMessage.error('修改失败'); |
| | | throw error; |
| | | } |
| | | }; |
| | | |
| | | export const deleteRawUsage = async (id) => { |
| | | try { |
| | | const response = await request.post(`${BASE_URL}/id`, id); |
| | | ElMessage.success('删除原始使用数据成功'); |
| | | return response.data; |
| | | } catch (error) { |
| | | ElMessage.error('删除原始使用数据失败'); |
| | | throw error; |
| | | } |
| | | }; |
| | | |
| | | export const inStorage = async (RawUsageAndShelfRack) => { |
| | | try { |
| | | const response = await request.post(`${BASE_URL}/inStorage`, RawUsageAndShelfRack); |
| | | ElMessage.success('入库操作成功'); |
| | | return response.data; |
| | | } catch (error) { |
| | | ElMessage.error('入库操作失败'); |
| | | throw error; |
| | | } |
| | | }; |
| | | |
| | | export const outStorage = async (RawUsageAndShelfRack) => { |
| | | try { |
| | | const response = await request.post(`${BASE_URL}/outStorage`, RawUsageAndShelfRack); |
| | | ElMessage.success('出库操作成功'); |
| | | return response.data; |
| | | } catch (error) { |
| | | ElMessage.error('出库操作失败'); |
| | | throw error; |
| | | } |
| | | }; |
| | | |
| | | |
| | | |
| | | export const taskUpdate = async (task) => { |
| | | try { |
| | | const response = await request.post(`${taskBASE_URL}/taskUpdate`, task); |
| | | |
| | | return response.data; |
| | | } catch (error) { |
| | | |
| | | throw error; |
| | | } |
| | | }; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | const API_URL = 'glassStorage/api/shelfRack'; // Adjust this based on your actual API URL |
| | | |
| | | export const shelfRackfindList = (params) => { |
| | | return request.post(`${API_URL}/findList`, params) |
| | | .then(response => response.data) |
| | | .catch(error => { |
| | | throw error; // Handle errors appropriately in your frontend |
| | | }); |
| | | }; |
| | | |
| | | export const shelfRackfindById = (id) => { |
| | | return request.get(`${API_URL}/${id}`) |
| | | .then(response => response.data) |
| | | .catch(error => { |
| | | throw error; |
| | | }); |
| | | }; |
| | | |
| | | export const insertShelfRack = (shelfRack) => { |
| | | return request.post(`${API_URL}`, shelfRack) |
| | | .then(response => response.data) |
| | | .catch(error => { |
| | | throw error; |
| | | }); |
| | | }; |
| | | |
| | | export const updateShelfRack = (shelfRack) => { |
| | | return request.put(`${API_URL}`, shelfRack) |
| | | .then(response => response.data) |
| | | .catch(error => { |
| | | throw error; |
| | | }); |
| | | }; |
| | | |
| | | export const shelfRackdeleteById = (id) => { |
| | | return request.delete(`${API_URL}/${id}`) |
| | | .then(response => response.data) |
| | | .catch(error => { |
| | | throw error; |
| | | }); |
| | | }; |
| | | |
| | | export const findShelfRack = () => { |
| | | return request.get(`${API_URL}/findshelfrack`) |
| | | .then(response => response.data) |
| | | .catch(error => { |
| | | throw error; |
| | | }); |
| | | }; |
| New file |
| | |
| | | // export const WebSocketHost = "192.168.2.100"; |
| | | // export const WebSocketHost = "192.168.0.39"; |
| | | // export const WebSocketHost = "10.153.19.150"; |
| | | // export const WebSocketHost = "10.153.19.47"; |
| | | // export const WebSocketHost = "10.153.19.162"; |
| | | export const WebSocketHost = "127.0.0.1"; |
| | | export const host = "88"; |
| New file |
| | |
| | | //深度拷贝,使数据进行绑定显示 |
| | | export default function deepClone(obj){ |
| | | // 对常见的“非”值,直接返回原来值 |
| | | if([null, undefined, NaN, false].includes(obj)) return obj; |
| | | if(typeof obj !== "object" && typeof obj !== 'function') { |
| | | //原始类型直接返回 |
| | | return obj; |
| | | } |
| | | var o = Array.isArray(obj) ? [] : {}; |
| | | for(let i in obj) { |
| | | if(obj.hasOwnProperty(i)){ |
| | | o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i]; |
| | | } |
| | | } |
| | | return o; |
| | | } |
| New file |
| | |
| | | class DevicePixelRatio { |
| | | constructor() { |
| | | this.bodyElement = document.getElementsByTagName('body')[0]; // 缓存 body 元素 |
| | | } |
| | | |
| | | // 判断是否为 Windows 系统 |
| | | isWindowsSystem() { |
| | | const agent = navigator.userAgent.toLowerCase(); |
| | | return agent.indexOf("windows") >= 0; |
| | | } |
| | | |
| | | // 通用事件绑定工具 |
| | | addHandler(element, type, handler) { |
| | | if (element.addEventListener) { |
| | | element.addEventListener(type, handler, false); |
| | | } else if (element.attachEvent) { |
| | | element.attachEvent("on" + type, handler); |
| | | } else { |
| | | element["on" + type] = handler; |
| | | } |
| | | } |
| | | |
| | | // 校正浏览器缩放比例 |
| | | correctZoom() { |
| | | if (this.bodyElement) { |
| | | // 使用 1 / window.devicePixelRatio 来调整 zoom |
| | | this.bodyElement.style.zoom = 1 / window.devicePixelRatio; |
| | | } |
| | | } |
| | | |
| | | // 监听页面缩放(使用防抖优化) |
| | | watchResize() { |
| | | let timer = null; |
| | | this.addHandler(window, 'resize', () => { |
| | | if (timer) clearTimeout(timer); |
| | | timer = setTimeout(() => { |
| | | this.correctZoom(); |
| | | }, 200); // 延迟 200ms 执行,避免频繁触发 |
| | | }); |
| | | } |
| | | |
| | | // 初始化页面比例校正 |
| | | init() { |
| | | if (this.isWindowsSystem()) { |
| | | // 初始化校正 |
| | | this.correctZoom(); |
| | | // 开启监听 |
| | | this.watchResize(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | export default DevicePixelRatio; |
| New file |
| | |
| | | import axios from 'axios' |
| | | import useUserInfoStore from '@/stores/userInfo' |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | const userStore=useUserInfoStore() |
| | | const request = axios.create({ |
| | | baseURL: `http://${WebSocketHost}:${host}/api`, // 注意!! 这里是全局统一加上了 后端接口前缀 前缀,后端必须进行跨域配置! |
| | | timeout: 30000 |
| | | }) |
| | | // |
| | | // request 拦截器 |
| | | // 可以自请求发送前对请求做一些处理 |
| | | // 比如统一加token,对请求参数统一加密 |
| | | request.interceptors.request.use(config => { |
| | | config.headers['Content-Type'] = 'application/json;charset=utf-8'; |
| | | if(userStore.user){ |
| | | config.headers['token'] = userStore.user.token; |
| | | } |
| | | // 设置请求头 |
| | | return config |
| | | }, error => { |
| | | return Promise.reject(error) |
| | | }); |
| | | // response 拦截器 |
| | | // 可以在接口响应后统一处理结果 |
| | | request.interceptors.response.use( |
| | | response => { |
| | | let res = response.data; |
| | | // 如果是返回的文件 |
| | | if (response.config.responseType === 'blob') { |
| | | return res |
| | | } |
| | | // 兼容服务端返回的字符串数据 |
| | | if (typeof res === 'string') { |
| | | res = res ? JSON.parse(res) : res |
| | | } |
| | | return res; |
| | | }, |
| | | error => { |
| | | return Promise.reject(error) |
| | | } |
| | | ) |
| | | export default request |
| New file |
| | |
| | | import axios from 'axios' |
| | | import config from '../../config'; |
| | | import useUserInfoStore from '@/stores/userInfo' |
| | | const userStore=useUserInfoStore() |
| | | const unloadrequest = axios.create({ |
| | | baseURL: `http://${config.serverUrl2}`, // 注意!! 这里是全局统一加上了 后端接口前缀 前缀,后端必须进行跨域配置! |
| | | timeout: 5000 |
| | | }) |
| | | |
| | | // |
| | | |
| | | // request 拦截器 |
| | | // 可以自请求发送前对请求做一些处理 |
| | | // 比如统一加token,对请求参数统一加密 |
| | | unloadrequest.interceptors.request.use(config => { |
| | | config.headers['Content-Type'] = 'application/json;charset=utf-8'; |
| | | if(userStore.user){ |
| | | config.headers['token'] = userStore.user.token; |
| | | } |
| | | // 设置请求头 |
| | | return config |
| | | }, error => { |
| | | return Promise.reject(error) |
| | | }); |
| | | |
| | | // response 拦截器 |
| | | // 可以在接口响应后统一处理结果 |
| | | unloadrequest.interceptors.response.use( |
| | | response => { |
| | | let res = response.data; |
| | | // 如果是返回的文件 |
| | | if (response.config.responseType === 'blob') { |
| | | return res |
| | | } |
| | | // 兼容服务端返回的字符串数据 |
| | | if (typeof res === 'string') { |
| | | res = res ? JSON.parse(res) : res |
| | | } |
| | | return res; |
| | | }, |
| | | error => { |
| | | return Promise.reject(error) |
| | | } |
| | | ) |
| | | |
| | | |
| | | export default unloadrequest |
| | | |
| New file |
| | |
| | | <script setup> |
| | | import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue" |
| | | import {useRouter} from "vue-router"; |
| | | let indexFlag=$ref(1) |
| | | function changeRouter(index){ |
| | | indexFlag=index |
| | | } |
| | | </script> |
| | | <template> |
| | | <!-- <div id="main-div"> --> |
| | | <div id="main-body"> |
| | | <router-view /> |
| | | </div> |
| | | <!-- </div> --> |
| | | </template> |
| | | <style scoped> |
| | | #main-div{ |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | #div-title{ |
| | | height: 2%; |
| | | width: 100%; |
| | | } |
| | | #searchButton{ |
| | | margin-top: -5px; |
| | | margin-left: 1rem; |
| | | } |
| | | /* #searchButton1{ |
| | | //margin-left: 10rem; |
| | | } */ |
| | | /*main-body样式*/ |
| | | #main-body{ |
| | | width: 100%; |
| | | height: 95%; |
| | | /* margin-top: 1%; */ |
| | | } |
| | | #select{ |
| | | margin-left:0.5rem; |
| | | } |
| | | :deep(.indexTag .el-breadcrumb__inner){ |
| | | color: #5CADFE !important; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script setup> |
| | | import {onBeforeUnmount, onMounted, onUnmounted, ref, reactive} from "vue"; |
| | | import {useRouter} from "vue-router" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import dayjs from 'dayjs'; |
| | | import request from "@/utils/request" |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {ElMessage, ElMessageBox} from 'element-plus' |
| | | import {useI18n} from 'vue-i18n' |
| | | import { inject } from 'vue'; |
| | | const globalDate = inject('globalDate'); |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const tableDataa = ref([]) |
| | | const tableDatab = ref([]) |
| | | const tableDatad = ref([]) |
| | | const adjustedRects = ref([]); |
| | | const selectValuesa = reactive([]); |
| | | const timeRange = ref([]) |
| | | const taskState = ref('') |
| | | const taskStat = ref('') |
| | | const taskType = ref('') |
| | | const glassId = ref('') |
| | | const blindb = ref(false) |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassOne`; |
| | | const handleMessage = (data) => { |
| | | const cageInfo = data.taskMessage[0]; |
| | | if (cageInfo && cageInfo.createTime) { |
| | | cageInfo.formattedCreateTime = formatTimestamp(cageInfo.createTime); |
| | | } |
| | | if (cageInfo && cageInfo.updateTime) { |
| | | cageInfo.formattedupdateTime = formatTimestamp(cageInfo.updateTime); |
| | | } |
| | | tableDataa.value = data.EdgStorageCageinfos[0] |
| | | tableDatab.value = data.taskMessage |
| | | adjustedRects.value = data.EdgStorageCageinfos[0].map((rect, index) => ({ |
| | | ...rect, |
| | | id: rect.id * 9, |
| | | showRect: !!data.EdgStorageCageinfos[0][index]?.details[0] |
| | | })); |
| | | }; |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(globalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | parseAndSetTime(); |
| | | }); |
| | | // 历史任务 |
| | | const iframeUrl = ref(''); |
| | | const handlehistorical = (row) => { |
| | | blindb.value = true; |
| | | iframeUrl.value = `${window.location.origin}/#/Caching/cachingbeforehistory`; |
| | | }; |
| | | // 历史任务 |
| | | // const historical = async () => { |
| | | // try { |
| | | // let startTime = window.localStorage.getItem('startTime') |
| | | // var url="/cacheGlass/edgStorageDeviceTaskHistory?deviceId="+1 + "&startTime=" + startTime + "&endTime=" + globalDate + "&glassId=" + '' + "&taskState=" + '' + "&taskType=" + ''; |
| | | // const response = await request.get(url) |
| | | // if (response.code == 200) { |
| | | // ElMessage.success(response.message); |
| | | // tableDatad.value = response.data; |
| | | // } else { |
| | | // ElMessage.error(response.message); |
| | | // } |
| | | // } |
| | | // catch (error) { |
| | | // console.error(error); |
| | | // } |
| | | // } |
| | | const sethistorical = async () => { |
| | | try { |
| | | const params = { |
| | | deviceId: 1, |
| | | startTime: (timeRange.value && timeRange.value[0]) || '', |
| | | endTime: (timeRange.value && timeRange.value[1]) || '', |
| | | glassId: glassId.value || '', |
| | | taskState: taskStat.value, |
| | | taskType: taskType.value || '' |
| | | }; |
| | | // 构建查询字符串 |
| | | const queryString = new URLSearchParams(params).toString(); |
| | | const url = `/cacheGlass/edgStorageDeviceTaskHistory?${queryString}`; |
| | | const response = await request.get(url) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatad.value = response.data; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 破损 |
| | | const handletake = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('workOrder.messagedamaged'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheGlass/edgStorageCageDetails/edgDetailsOperate", { |
| | | glassId: row.glassId, |
| | | state: 8, |
| | | line: 1, |
| | | workingProcedure: '理片笼', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 拿走 |
| | | const handleBindRack = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('workOrder.takemessage'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheGlass/edgStorageCageDetails/edgDetailsOperate", { |
| | | glassId: row.glassId, |
| | | state: 9, |
| | | line: 1, |
| | | workingProcedure: '理片笼', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 任务重置 |
| | | const handleptask = async() => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.partasks'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url="/cacheGlass/edgStorageDeviceTask/resetTask?deviceId="+ 1; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 任务成功处理 |
| | | const successfull = async() => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.psuccessfullyprocessed'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url="/cacheGlass/edgStorageDeviceTask/taskSuccess?deviceId="+ 1; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 删除 |
| | | const handledelete = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.deletemessage'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheGlass/edgStorageCageDetails/removeEdgDetails?glassId="+encodeURIComponent(row.glassId)) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | const rowClassName = ({ row }) => { |
| | | // 根据 enableState 设置行的 CSS 类 |
| | | return row.slot % 2 === 0 ? 'success-row' : ''; |
| | | }; |
| | | // 样式部分 |
| | | const styles = ` |
| | | .success-row { |
| | | --el-table-tr-bg-color: var(--el-color-info-light-9); |
| | | } |
| | | `; |
| | | // 动态添加样式到组件 |
| | | const styleElement = document.createElement('style'); |
| | | styleElement.textContent = styles; |
| | | document.head.appendChild(styleElement); |
| | | |
| | | const optionsa = [ |
| | | { |
| | | value: 0, |
| | | label: t('hellow.starttask'), |
| | | }, |
| | | { |
| | | value: 1, |
| | | label: t('searchOrder.endtask'), |
| | | } |
| | | ] |
| | | const optionsb = [ |
| | | { |
| | | value: 1, |
| | | label: t('sorter.advancetask'), |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: t('sorter.outputtasks'), |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: t('sorter.straighttasks'), |
| | | } |
| | | ] |
| | | function getStatusTypea(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return 'info'; |
| | | case 2: |
| | | return 'success'; |
| | | case 3: |
| | | return 'danger'; |
| | | } |
| | | } |
| | | function getStatusTexta(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return t('sorter.advancetask'); |
| | | case 2: |
| | | return t('sorter.outputtasks'); |
| | | case 3: |
| | | return t('sorter.straighttasks'); |
| | | } |
| | | } |
| | | function getStatusTypeb(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'info'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | function getStatusTextb(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('hellow.starttask'); |
| | | case 1: |
| | | return t('searchOrder.endtask'); |
| | | } |
| | | } |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | onUnmounted(() => { |
| | | if (socket) { |
| | | closeWebSocket(socket); |
| | | } |
| | | }); |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;"> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="handlehistorical" type="primary">{{ $t('searchOrder.historicaltasks') }}</el-button> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="handleptask()" type="warning">{{ $t('searchOrder.partask') }}</el-button> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="successfull()" type="success">{{ $t('searchOrder.successfullyprocessed') }}</el-button> |
| | | <div style="position: relative; width: 100%; height: 100%;"> <!-- 添加相对定位 --> |
| | | <div style="position: absolute; margin-top: 28px; left: 430px; display: flex; z-index: 10;"> <!-- 添加绝对定位 --> |
| | | <div>{{ $t('searchOrder.projectnumber') }}</div> |
| | | <div style="margin-left: 155px;">{{ $t('hellow.flowCardId') }}</div> |
| | | <div style="margin-left: 152px;">{{ $t('searchOrder.glassID') }}</div> |
| | | <div style="margin-left: 165px;">{{ $t('searchOrder.width') }}</div> |
| | | <div style="margin-left: 185px;">{{ $t('searchOrder.height') }}</div> |
| | | <div style="margin-left: 172px;">{{ $t('searchOrder.thickness') }}</div> |
| | | <div style="margin-left: 145px;">{{ $t('hellow.operate') }}</div> |
| | | </div> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> |
| | | <el-table |
| | | ref="table" |
| | | style="margin-top: 20px; height: 360px;" |
| | | :data="tableDataa" |
| | | :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }" |
| | | row-key="id" |
| | | > |
| | | <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="10" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('sorter.startstatus')" |
| | | min-width="10" |
| | | prop="enableState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag |
| | | :type="scope.row.enableState === 1 ? 'success' : 'warning'" |
| | | > |
| | | {{ scope.row.enableState === 1 ? $t('sorter.start') : $t('sorter.disable') }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column> |
| | | <template #default="props"> |
| | | <el-table |
| | | :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }" |
| | | :data="props.row.details" style="width: 100%;height: 70px;"> |
| | | <el-table-column prop="engineerId" align="center" min-width="80" /> |
| | | <el-table-column prop="flowCardId" align="center" min-width="80" /> |
| | | <el-table-column prop="glassId" align="center" min-width="80" /> |
| | | <el-table-column prop="width" align="center" min-width="80" /> |
| | | <el-table-column prop="height" align="center" min-width="80" /> |
| | | <el-table-column prop="thickness" align="center" min-width="80" /> |
| | | <el-table-column fixed="right" align="center" width="150"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="handletake(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> |
| | | <el-button type="text" plain @click="handleBindRack(scope.row)">{{ $t('searchOrder.takeout')}} </el-button> |
| | | <el-button type="text" plain @click="handledelete(scope.row)">{{ $t('searchOrder.delete')}} </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;margin-top: 15px;"> |
| | | <el-table height="90" ref="table" |
| | | @selection-change="handleSelectionChange" |
| | | :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="glassIdIn" align="center" :label="$t('searchOrder.intoglassid')" min-width="80" /> |
| | | <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> |
| | | <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" /> |
| | | <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.taskstatus')" |
| | | min-width="80" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypeb(scope.row.taskState)"> |
| | | {{ getStatusTextb(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.enabletype')" |
| | | min-width="80" |
| | | prop="taskType" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypea(scope.row.taskType)"> |
| | | {{ getStatusTexta(scope.row.taskType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="120" /> |
| | | <el-table-column prop="formattedupdateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" /> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | <div class="awatch"> |
| | | <img src="../../assets/woshihuancun.png" alt="" style="width: 50%;height: 70%;margin-left: 30%;margin-top: 20px;position: relative;"> |
| | | <div style="position: relative; width: 500px;height: 95px;margin-top: -142px;margin-left: 600px;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRects" |
| | | v-show="rect.showRect" |
| | | :key="rect" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.id}px`, left: `10px`, width: `422px`, height: `3px`, |
| | | backgroundColor: '#409EFF' |
| | | }" |
| | | > |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- 历史任务 --> |
| | | <el-dialog v-model="blindb" top="5vh" width="95%" @close="iframeUrl=''"> |
| | | <iframe |
| | | :src="iframeUrl" |
| | | marginwidth="2000px" |
| | | marginheight="2000px" |
| | | width="100%" |
| | | height="750px" |
| | | frameborder="0" |
| | | ></iframe> |
| | | </el-dialog> |
| | | <!-- <el-dialog v-model="blindb" top="10vh" width="90%"> |
| | | <div style="display: flex;"> |
| | | <el-input v-model="glassId" style="margin-left: 10px;margin-bottom: 10px;width: 270px;" :placeholder="$t('searchOrder.inglassID')" /> |
| | | <el-select |
| | | :placeholder="$t('searchOrder.taskstatus')" |
| | | clearable |
| | | style="width: 270px;margin-left: 10px;" |
| | | v-model="taskStat"> |
| | | <el-option |
| | | v-for="item in optionsa" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-select |
| | | :placeholder="$t('film.enabletype')" |
| | | clearable |
| | | style="width: 270px;margin-left: 10px;" |
| | | v-model="taskType"> |
| | | <el-option |
| | | v-for="item in optionsb" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <span class="demonstration" style="margin-left: 20px;margin-top: 3px;">{{ $t('workOrder.time') }}</span> |
| | | <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" :start-placeholder="$t('reportmanage.starttime')" |
| | | style="margin-left: 15px;" value-format = "YYYY-MM-DD hh:mm:ss" |
| | | :end-placeholder="$t('reportmanage.endtime')"> |
| | | </el-date-picker> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{ |
| | | $t('reportmanage.inquire') |
| | | }}</el-button> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 650px;" :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="glassIdIn" align="center" :label="$t('searchOrder.intoglassid')" min-width="80" /> |
| | | <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> |
| | | <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" /> |
| | | <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.taskstatus')" |
| | | min-width="80" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypeb(scope.row.taskState)"> |
| | | {{ getStatusTextb(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.enabletype')" |
| | | min-width="80" |
| | | prop="taskType" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypea(scope.row.taskType)"> |
| | | {{ getStatusTexta(scope.row.taskType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" align="center" :label="$t('film.createtime')" min-width="120" /> |
| | | <el-table-column prop="updateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" /> |
| | | </el-table> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button @click="blindb = false">{{ $t('large.close') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> --> |
| | | </template> |
| | | <style scoped> |
| | | #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} |
| | | #dta { display:block; float:left;line-height: 20px;margin-left: 80%;} |
| | | #dialog-footer{ |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | #message{ |
| | | text-align: center; |
| | | align-items: center; |
| | | color: black; |
| | | width: 200px; |
| | | height: 100px; |
| | | background-color: #337ecc; |
| | | margin-left: 28%; |
| | | } |
| | | .awatch{ |
| | | height: 460px; |
| | | width: 1500px; |
| | | max-width: 100%; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div> |
| | | <div style="display: flex;width: 1770px;"> |
| | | <el-input v-model="glassId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('searchOrder.inglassID')" /> |
| | | <el-select |
| | | :placeholder="$t('searchOrder.taskstatus')" |
| | | clearable |
| | | style="width: 270px;margin-left: 10px;" |
| | | v-model="taskState"> |
| | | <el-option |
| | | v-for="item in optionsa" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-select |
| | | :placeholder="$t('film.enabletype')" |
| | | clearable |
| | | style="width: 270px;margin-left: 10px;" |
| | | v-model="taskType"> |
| | | <el-option |
| | | v-for="item in optionsb" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-date-picker |
| | | style="margin-left: 15px;" |
| | | v-model="timeRange" |
| | | type="datetimerange" |
| | | :shortcuts="shortcuts" |
| | | range-separator="至" |
| | | :start-placeholder="$t('reportmanage.starttime')" |
| | | :end-placeholder="$t('reportmanage.endtime')" |
| | | /> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="handleClick()">{{$t('reportmanage.inquire')}}</el-button> |
| | | </div> |
| | | <div style="margin-bottom: 10px;margin-top: 20px;margin-left: 20px;"> |
| | | <el-form> |
| | | <el-row style="margin-top: -15px;margin-bottom: -2px;"> |
| | | <el-col :span="4"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('hellow.countOutOne')" style="width: 14vw"> |
| | | {{ countOutOne }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('hellow.totalAreaOutOne')" style="width: 14vw"> |
| | | {{ totalAreaOutOne }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 580px;width: 1770px;" :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="glassIdIn" align="center" :label="$t('searchOrder.intoglassid')" min-width="80" /> |
| | | <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> |
| | | <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" /> |
| | | <el-table-column prop="startCell" align="center" :label="$t('searchOrder.startCell')" min-width="80" /> |
| | | <!-- <el-table-column prop="endCell" align="center" :label="$t('searchOrder.endCell')" min-width="80" /> --> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.taskstatus')" |
| | | min-width="80" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypeb(scope.row.taskState)"> |
| | | {{ getStatusTextb(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.enabletype')" |
| | | min-width="80" |
| | | prop="taskType" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypea(scope.row.taskType)"> |
| | | {{ getStatusTexta(scope.row.taskType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" align="center" :label="$t('film.createtime')" min-width="100" /> |
| | | <el-table-column prop="updateTime" align="center" :label="$t('sorter.updateTime')" min-width="100" /> |
| | | </el-table> |
| | | <div style="margin-top: 20px;margin-left: 40%;"> |
| | | <el-pagination |
| | | v-model:current-page="currentPage2" |
| | | :page-size="pageSize" |
| | | :size="large" |
| | | :disabled="disabled" |
| | | layout="prev, pager, next, jumper" |
| | | :total="totalRecords" |
| | | @current-change="handlePageChange2" |
| | | style="margin-top: 10px;" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import {useI18n} from 'vue-i18n' |
| | | import {useRouter} from "vue-router" |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {ElMessage, ElMessageBox} from 'element-plus' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | import { inject } from 'vue'; |
| | | const globalDate = inject('globalDate'); |
| | | const router = useRouter() |
| | | const timeRange = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const tableDatax = ref([]) |
| | | const currentPage2 = ref(1) |
| | | const totalRecords = ref(0) |
| | | const totalAreaOutOne = ref(0) |
| | | const countOutOne = ref(0) |
| | | const glassId = ref(''); |
| | | const startSlot = ref(''); |
| | | const targetSlot = ref(''); |
| | | const taskState = ref(''); |
| | | const taskType = ref(''); |
| | | let getglobalDate = window.localStorage.getItem('getglobalDate') |
| | | const historical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory", { |
| | | deviceId: 1, |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: '', |
| | | taskType: '', |
| | | startTime: startTime, |
| | | endTime: getglobalDate |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatax.value = response.data.records; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const Daily = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory/queryEdgDailyProduction", { |
| | | deviceId: 1, |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: '', |
| | | taskType: '', |
| | | startTime: startTime, |
| | | endTime: getglobalDate |
| | | }) |
| | | if (response.code == 200) { |
| | | countOutOne.value = response.data.countOutOne |
| | | totalAreaOutOne.value = response.data.totalAreaOutOne |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const handlePageChange2 = (newPage) => { |
| | | currentPage2.value = newPage; |
| | | window.localStorage.setItem('pagenumber', currentPage2.value) |
| | | historicala(currentPage2.value); |
| | | Dailya(currentPage2.value); |
| | | }; |
| | | const historicala = async (page) => { |
| | | try { |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory", { |
| | | deviceId: 1, |
| | | pageNo: page, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: taskState.value, |
| | | taskType: taskType.value, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatax.value = response.data.records; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const Dailya = async (page) => { |
| | | try { |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory/queryEdgDailyProduction", { |
| | | deviceId: 1, |
| | | pageNo: page, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: taskState.value, |
| | | taskType: taskType.value, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | countOutOne.value = response.data.countOutOne |
| | | totalAreaOutOne.value = response.data.totalAreaOutOne |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const handleClick = async () => { |
| | | await sethistorical(); |
| | | await Dailyhistorical(); |
| | | }; |
| | | // 历史查询点击 |
| | | const sethistorical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory", { |
| | | deviceId: 1, |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: taskState.value, |
| | | taskType: taskType.value, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | currentPage2.value = 1; |
| | | ElMessage.success(response.message); |
| | | tableDatax.value = response.data.records; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const Dailyhistorical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory/queryEdgDailyProduction", { |
| | | deviceId: 1, |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: taskState.value, |
| | | taskType: taskType.value, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | countOutOne.value = response.data.countOutOne |
| | | totalAreaOutOne.value = response.data.totalAreaOutOne |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | const shortcuts = [ |
| | | { |
| | | text: '最近一周', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setDate(oneWeekAgo.getDate() - 7) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近一个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 1) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近三个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 3) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | ] |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(getglobalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | function getStatusTypeb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'primary'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | function getStatusTextb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('searchOrder.empty'); |
| | | case 1: |
| | | return t('searchOrder.endtask'); |
| | | } |
| | | } |
| | | function getStatusTypea(taskType: number) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return 'primary'; |
| | | case 2: |
| | | return 'success'; |
| | | case 3: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusTexta(taskType: number) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return t('sorter.advancetask'); |
| | | case 2: |
| | | return t('sorter.outputtasks'); |
| | | case 3: |
| | | return t('sorter.straighttasks'); |
| | | } |
| | | } |
| | | const optionsa = [ |
| | | { |
| | | value: 0, |
| | | label: t('searchOrder.empty'), |
| | | }, |
| | | { |
| | | value: 1, |
| | | label: t('searchOrder.endtask'), |
| | | } |
| | | ] |
| | | const optionsb = [ |
| | | { |
| | | value: 1, |
| | | label: t('sorter.advancetask'), |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: t('sorter.outputtasks'), |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: t('sorter.straighttasks'), |
| | | } |
| | | ] |
| | | onMounted(() => { |
| | | parseAndSetTime(); |
| | | historical(); |
| | | Daily() |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | </style> |
| New file |
| | |
| | | <script setup> |
| | | import {onBeforeUnmount, onMounted, onUnmounted, ref, reactive} from "vue"; |
| | | import {useRouter} from "vue-router" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import dayjs from 'dayjs'; |
| | | import request from "@/utils/request" |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {ElMessage, ElMessageBox} from 'element-plus' |
| | | import {useI18n} from 'vue-i18n' |
| | | import { inject } from 'vue'; |
| | | const globalDate = inject('globalDate'); |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const tableDataa = ref([]) |
| | | const tableDatab = ref([]) |
| | | const tableDatad = ref([]) |
| | | const adjustedRects = ref([]); |
| | | const selectValuesa = reactive([]); |
| | | const timeRange = ref([]) |
| | | const taskState = ref('') |
| | | const taskType = ref('') |
| | | const glassId = ref('') |
| | | const blindb = ref(false) |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassTwo`; |
| | | const handleMessage = (data) => { |
| | | const cageInfo = data.taskMessage[0]; |
| | | if (cageInfo && cageInfo.createTime) { |
| | | cageInfo.formattedCreateTime = formatTimestamp(cageInfo.createTime); |
| | | } |
| | | if (cageInfo && cageInfo.updateTime) { |
| | | cageInfo.formattedupdateTime = formatTimestamp(cageInfo.updateTime); |
| | | } |
| | | tableDataa.value = data.EdgStorageCageinfos[0] |
| | | tableDatab.value = data.taskMessage |
| | | adjustedRects.value = data.EdgStorageCageinfos[0].map((rect, index) => ({ |
| | | ...rect, |
| | | id: rect.id * 9, |
| | | showRect: !!data.EdgStorageCageinfos[0][index]?.details[0] |
| | | })); |
| | | }; |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(globalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | parseAndSetTime(); |
| | | }); |
| | | // 历史任务 |
| | | const iframeUrl = ref(''); |
| | | const handlehistorical = (row) => { |
| | | blindb.value = true; |
| | | iframeUrl.value = `${window.location.origin}/#/Caching/cachingunhistory`; |
| | | }; |
| | | const sethistorical = async () => { |
| | | try { |
| | | const params = { |
| | | deviceId: 2, |
| | | startTime: (timeRange.value && timeRange.value[0]) || '', |
| | | endTime: (timeRange.value && timeRange.value[1]) || '', |
| | | glassId: glassId.value || '', |
| | | taskState: taskState.value, |
| | | taskType: taskType.value || '' |
| | | }; |
| | | // 构建查询字符串 |
| | | const queryString = new URLSearchParams(params).toString(); |
| | | const url = `/cacheGlass/edgStorageDeviceTaskHistory?${queryString}`; |
| | | const response = await request.get(url) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatad.value = response.data; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 破损 |
| | | const handletake = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('workOrder.messagedamaged'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheGlass/edgStorageCageDetails/edgDetailsOperate", { |
| | | glassId: row.glassId, |
| | | state: 8, |
| | | line: 2, |
| | | workingProcedure: '理片笼', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 拿走 |
| | | const handleBindRack = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('workOrder.takemessage'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheGlass/edgStorageCageDetails/edgDetailsOperate", { |
| | | glassId: row.glassId, |
| | | state: 9, |
| | | line: 2, |
| | | workingProcedure: '理片笼', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 任务重置 |
| | | const handleptask = async() => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.partasks'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url="/cacheGlass/edgStorageDeviceTask/resetTask?deviceId="+ 2; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 任务成功处理 |
| | | const successfull = async() => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.psuccessfullyprocessed'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url="/cacheGlass/edgStorageDeviceTask/taskSuccess?deviceId="+ 2; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 删除 |
| | | const handledelete = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.deletemessage'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheGlass/edgStorageCageDetails/removeEdgDetails?glassId="+encodeURIComponent(row.glassId)) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | const rowClassName = ({ row }) => { |
| | | // 根据 enableState 设置行的 CSS 类 |
| | | return row.slot % 2 === 0 ? 'success-row' : ''; |
| | | }; |
| | | // 样式部分 |
| | | const styles = ` |
| | | .success-row { |
| | | --el-table-tr-bg-color: var(--el-color-info-light-9); |
| | | } |
| | | `; |
| | | // 动态添加样式到组件 |
| | | const styleElement = document.createElement('style'); |
| | | styleElement.textContent = styles; |
| | | document.head.appendChild(styleElement); |
| | | |
| | | const optionsa = [ |
| | | { |
| | | value: 0, |
| | | label: t('hellow.starttask'), |
| | | }, |
| | | { |
| | | value: 1, |
| | | label: t('searchOrder.endtask'), |
| | | } |
| | | ] |
| | | const optionsb = [ |
| | | { |
| | | value: 1, |
| | | label: t('sorter.advancetask'), |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: t('sorter.outputtasks'), |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: t('sorter.straighttasks'), |
| | | } |
| | | ] |
| | | function getStatusTypea(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return 'info'; |
| | | case 2: |
| | | return 'success'; |
| | | case 3: |
| | | return 'danger'; |
| | | } |
| | | } |
| | | function getStatusTexta(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return t('sorter.advancetask'); |
| | | case 2: |
| | | return t('sorter.outputtasks'); |
| | | case 3: |
| | | return t('sorter.straighttasks'); |
| | | } |
| | | } |
| | | function getStatusTypeb(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'info'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | function getStatusTextb(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('hellow.starttask'); |
| | | case 1: |
| | | return t('searchOrder.endtask'); |
| | | } |
| | | } |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | onUnmounted(() => { |
| | | if (socket) { |
| | | closeWebSocket(socket); |
| | | } |
| | | }); |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;"> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="handlehistorical" type="primary">{{ $t('searchOrder.historicaltasks') }}</el-button> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="handleptask()" type="warning">{{ $t('searchOrder.partask') }}</el-button> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="successfull()" type="success">{{ $t('searchOrder.successfullyprocessed') }}</el-button> |
| | | <div style="position: relative; width: 100%; height: 100%;"> <!-- 添加相对定位 --> |
| | | <div style="position: absolute; margin-top: 28px; left: 430px; display: flex; z-index: 10;"> <!-- 添加绝对定位 --> |
| | | <div>{{ $t('searchOrder.projectnumber') }}</div> |
| | | <div style="margin-left: 155px;">{{ $t('hellow.flowCardId') }}</div> |
| | | <div style="margin-left: 152px;">{{ $t('searchOrder.glassID') }}</div> |
| | | <div style="margin-left: 165px;">{{ $t('searchOrder.width') }}</div> |
| | | <div style="margin-left: 185px;">{{ $t('searchOrder.height') }}</div> |
| | | <div style="margin-left: 172px;">{{ $t('searchOrder.thickness') }}</div> |
| | | <div style="margin-left: 145px;">{{ $t('hellow.operate') }}</div> |
| | | </div> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> |
| | | <el-table |
| | | ref="table" |
| | | style="margin-top: 20px; height: 360px;" |
| | | :data="tableDataa" |
| | | :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }" |
| | | row-key="id" |
| | | > |
| | | <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="10" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('sorter.startstatus')" |
| | | min-width="10" |
| | | prop="enableState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag |
| | | :type="scope.row.enableState === 1 ? 'success' : 'warning'" |
| | | > |
| | | {{ scope.row.enableState === 1 ? $t('sorter.start') : $t('sorter.disable') }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column> |
| | | <template #default="props"> |
| | | <el-table |
| | | :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }" |
| | | :data="props.row.details" style="width: 100%;height: 70px;"> |
| | | <el-table-column prop="engineerId" align="center" min-width="80" /> |
| | | <el-table-column prop="flowCardId" align="center" min-width="80" /> |
| | | <el-table-column prop="glassId" align="center" min-width="80" /> |
| | | <el-table-column prop="width" align="center" min-width="80" /> |
| | | <el-table-column prop="height" align="center" min-width="80" /> |
| | | <el-table-column prop="thickness" align="center" min-width="80" /> |
| | | <el-table-column fixed="right" align="center" width="150"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="handletake(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> |
| | | <el-button type="text" plain @click="handleBindRack(scope.row)">{{ $t('searchOrder.takeout')}} </el-button> |
| | | <el-button type="text" plain @click="handledelete(scope.row)">{{ $t('searchOrder.delete')}} </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;margin-top: 15px;"> |
| | | <el-table height="90" ref="table" |
| | | @selection-change="handleSelectionChange" |
| | | :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="glassIdIn" align="center" :label="$t('searchOrder.intoglassid')" min-width="80" /> |
| | | <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> |
| | | <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" /> |
| | | <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.taskstatus')" |
| | | min-width="80" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypeb(scope.row.taskState)"> |
| | | {{ getStatusTextb(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.enabletype')" |
| | | min-width="80" |
| | | prop="taskType" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypea(scope.row.taskType)"> |
| | | {{ getStatusTexta(scope.row.taskType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="120" /> |
| | | <el-table-column prop="formattedupdateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" /> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | <div class="awatch"> |
| | | <img src="../../assets/woshihuancun.png" alt="" style="width: 50%;height: 70%;margin-left: 30%;margin-top: 20px;position: relative;"> |
| | | <div style="position: relative; width: 500px;height: 95px;margin-top: -222px;margin-left: 600px;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRects" |
| | | v-show="rect.showRect" |
| | | :key="rect" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.id}px`, left: `10px`, width: `422px`, height: `3px`, |
| | | backgroundColor: '#409EFF' |
| | | }" |
| | | > |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- 历史任务 --> |
| | | <el-dialog v-model="blindb" top="5vh" width="95%" @close="iframeUrl=''"> |
| | | <iframe |
| | | :src="iframeUrl" |
| | | marginwidth="2000px" |
| | | marginheight="2000px" |
| | | width="100%" |
| | | height="750px" |
| | | frameborder="0" |
| | | ></iframe> |
| | | </el-dialog> |
| | | </template> |
| | | <style scoped> |
| | | #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} |
| | | #dta { display:block; float:left;line-height: 20px;margin-left: 80%;} |
| | | #dialog-footer{ |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | #message{ |
| | | text-align: center; |
| | | align-items: center; |
| | | color: black; |
| | | width: 200px; |
| | | height: 100px; |
| | | background-color: #337ecc; |
| | | margin-left: 28%; |
| | | } |
| | | .awatch{ |
| | | height: 460px; |
| | | width: 1500px; |
| | | max-width: 100%; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div> |
| | | <div style="display: flex;width: 1770px;"> |
| | | <el-input v-model="glassId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('searchOrder.inglassID')" /> |
| | | <el-select |
| | | :placeholder="$t('searchOrder.taskstatus')" |
| | | clearable |
| | | style="width: 270px;margin-left: 10px;" |
| | | v-model="taskState"> |
| | | <el-option |
| | | v-for="item in optionsa" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-select |
| | | :placeholder="$t('film.enabletype')" |
| | | clearable |
| | | style="width: 270px;margin-left: 10px;" |
| | | v-model="taskType"> |
| | | <el-option |
| | | v-for="item in optionsb" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-date-picker |
| | | style="margin-left: 15px;" |
| | | v-model="timeRange" |
| | | type="datetimerange" |
| | | :shortcuts="shortcuts" |
| | | range-separator="至" |
| | | :start-placeholder="$t('reportmanage.starttime')" |
| | | :end-placeholder="$t('reportmanage.endtime')" |
| | | /> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="handleClick()">{{$t('reportmanage.inquire')}}</el-button> |
| | | </div> |
| | | <div style="margin-bottom: 10px;margin-top: 20px;margin-left: 20px;"> |
| | | <el-form> |
| | | <el-row style="margin-top: -15px;margin-bottom: -2px;"> |
| | | <el-col :span="4"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('hellow.countOutTwo')" style="width: 14vw"> |
| | | {{ countOutOne }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('hellow.totalAreaOutTwo')" style="width: 14vw"> |
| | | {{ totalAreaOutOne }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 580px;width: 1770px;" :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="glassIdIn" align="center" :label="$t('searchOrder.intoglassid')" min-width="80" /> |
| | | <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> |
| | | <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" /> |
| | | <el-table-column prop="startCell" align="center" :label="$t('searchOrder.startCell')" min-width="80" /> |
| | | <!-- <el-table-column prop="endCell" align="center" :label="$t('searchOrder.endCell')" min-width="80" /> --> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.taskstatus')" |
| | | min-width="80" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypeb(scope.row.taskState)"> |
| | | {{ getStatusTextb(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.enabletype')" |
| | | min-width="80" |
| | | prop="taskType" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypea(scope.row.taskType)"> |
| | | {{ getStatusTexta(scope.row.taskType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" align="center" :label="$t('film.createtime')" min-width="100" /> |
| | | <el-table-column prop="updateTime" align="center" :label="$t('sorter.updateTime')" min-width="100" /> |
| | | </el-table> |
| | | <div style="margin-top: 20px;margin-left: 40%;"> |
| | | <el-pagination |
| | | v-model:current-page="currentPage2" |
| | | :page-size="pageSize" |
| | | :size="large" |
| | | :disabled="disabled" |
| | | layout="prev, pager, next, jumper" |
| | | :total="totalRecords" |
| | | @current-change="handlePageChange2" |
| | | style="margin-top: 10px;" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import {useI18n} from 'vue-i18n' |
| | | import {useRouter} from "vue-router" |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {ElMessage, ElMessageBox} from 'element-plus' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | import { inject } from 'vue'; |
| | | const globalDate = inject('globalDate'); |
| | | const router = useRouter() |
| | | const timeRange = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const tableDatax = ref([]) |
| | | const currentPage2 = ref(1) |
| | | const totalRecords = ref(0) |
| | | const countOutOne = ref(0) |
| | | const totalAreaOutOne = ref(0) |
| | | const glassId = ref(''); |
| | | const startSlot = ref(''); |
| | | const targetSlot = ref(''); |
| | | const taskState = ref(''); |
| | | const taskType = ref(''); |
| | | let getglobalDate = window.localStorage.getItem('getglobalDate') |
| | | const historical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory", { |
| | | deviceId: 2, |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: '', |
| | | taskType: '', |
| | | startTime: startTime, |
| | | endTime: getglobalDate |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatax.value = response.data.records; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const Daily = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory/queryEdgDailyProduction", { |
| | | deviceId: 2, |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: '', |
| | | taskType: '', |
| | | startTime: startTime, |
| | | endTime: getglobalDate |
| | | }) |
| | | if (response.code == 200) { |
| | | countOutOne.value = response.data.countOutOne |
| | | totalAreaOutOne.value = response.data.totalAreaOutOne |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const handlePageChange2 = (newPage) => { |
| | | currentPage2.value = newPage; |
| | | window.localStorage.setItem('pagenumber', currentPage2.value) |
| | | historicala(currentPage2.value); |
| | | Dailya(currentPage2.value); |
| | | }; |
| | | const historicala = async (page) => { |
| | | try { |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory", { |
| | | deviceId: 2, |
| | | pageNo: page, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: taskState.value, |
| | | taskType: taskType.value, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatax.value = response.data.records; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const Dailya = async (page) => { |
| | | try { |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory/queryEdgDailyProduction", { |
| | | deviceId: 2, |
| | | pageNo: page, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: taskState.value, |
| | | taskType: taskType.value, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | countOutOne.value = response.data.countOutOne |
| | | totalAreaOutOne.value = response.data.totalAreaOutOne |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const handleClick = async () => { |
| | | await sethistorical(); |
| | | await Dailyhistorical(); |
| | | }; |
| | | // 历史查询点击 |
| | | const sethistorical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory", { |
| | | deviceId: 2, |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: taskState.value, |
| | | taskType: taskType.value, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | currentPage2.value = 1; |
| | | ElMessage.success(response.message); |
| | | tableDatax.value = response.data.records; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const Dailyhistorical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | const response = await request.post("/cacheGlass/edgStorageDeviceTaskHistory/queryEdgDailyProduction", { |
| | | deviceId: 2, |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | taskState: taskState.value, |
| | | taskType: taskType.value, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | countOutOne.value = response.data.countOutOne |
| | | totalAreaOutOne.value = response.data.totalAreaOutOne |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | const shortcuts = [ |
| | | { |
| | | text: '最近一周', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setDate(oneWeekAgo.getDate() - 7) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近一个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 1) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近三个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 3) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | ] |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(getglobalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | function getStatusTypeb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'primary'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | function getStatusTextb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('searchOrder.empty'); |
| | | case 1: |
| | | return t('searchOrder.endtask'); |
| | | } |
| | | } |
| | | function getStatusTypea(taskType: number) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return 'primary'; |
| | | case 2: |
| | | return 'success'; |
| | | case 3: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusTexta(taskType: number) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return t('sorter.advancetask'); |
| | | case 2: |
| | | return t('sorter.outputtasks'); |
| | | case 3: |
| | | return t('sorter.straighttasks'); |
| | | } |
| | | } |
| | | const optionsa = [ |
| | | { |
| | | value: 0, |
| | | label: t('searchOrder.empty'), |
| | | }, |
| | | { |
| | | value: 1, |
| | | label: t('searchOrder.endtask'), |
| | | } |
| | | ] |
| | | const optionsb = [ |
| | | { |
| | | value: 1, |
| | | label: t('sorter.advancetask'), |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: t('sorter.outputtasks'), |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: t('sorter.straighttasks'), |
| | | } |
| | | ] |
| | | onMounted(() => { |
| | | parseAndSetTime(); |
| | | historical(); |
| | | Daily() |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | </style> |
| New file |
| | |
| | | <script setup> |
| | | import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue" |
| | | import {useRouter} from "vue-router"; |
| | | let indexFlag=$ref(1) |
| | | function changeRouter(index){ |
| | | indexFlag=index |
| | | } |
| | | </script> |
| | | <template> |
| | | <div id="main-body"> |
| | | <router-view /> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | #main-div{ |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | #div-title{ |
| | | height: 2%; |
| | | width: 100%; |
| | | } |
| | | #searchButton{ |
| | | margin-top: -5px; |
| | | margin-left: 1rem; |
| | | } |
| | | #main-body{ |
| | | width: 100%; |
| | | height: 95%; |
| | | /* margin-top: 1%; */ |
| | | } |
| | | #select{ |
| | | margin-left:0.5rem; |
| | | } |
| | | :deep(.indexTag .el-breadcrumb__inner){ |
| | | color: #5CADFE !important; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-card style="flex: 1; margin-left: 10px" :loading="loading"> |
| | | <div |
| | | slot="header" |
| | | class="clearfix" |
| | | style="display: flex; align-items: center;margin-top: -20px;" |
| | | > |
| | | <!-- 左侧按钮组 --> |
| | | <div> |
| | | <el-button type="success" @click="storage()" |
| | | >原片仓储详情</el-button |
| | | > |
| | | <el-button type="success" @click="handleInbound()" |
| | | >入库</el-button |
| | | > |
| | | <el-button type="success" >吊装位入库</el-button> |
| | | </div> |
| | | <!-- 右侧选择框 --> |
| | | <el-form-item style="margin-top: 15px; width: 150px;margin-left: 10px;"> |
| | | <el-select v-model="formData2.dzw" placeholder="请选择吊装位"> |
| | | <el-option label="吊装位1" value="吊装位1"></el-option> |
| | | <el-option label="吊装位2" value="吊装位2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <el-dialog v-model="Hidden" top="10vh" width="80%"> |
| | | <el-table |
| | | :data="tableData" |
| | | v-model="dialogVisible3" |
| | | style="width: 98%; height: 200px" |
| | | @selection-change="handleSelectionChange" |
| | | :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }" |
| | | ref="table" |
| | | empty-text="No Data" |
| | | > |
| | | <el-table-column prop="number" label="库位号"></el-table-column> |
| | | <el-table-column prop="rawType" label="类型"></el-table-column> |
| | | <el-table-column prop="rawWidth" label="长度(mm)"></el-table-column> |
| | | <el-table-column prop="rawHeight" label="高度(mm)"></el-table-column> |
| | | <el-table-column |
| | | prop="rawThickness" |
| | | label="厚度(mm)" |
| | | ></el-table-column> |
| | | <el-table-column prop="pieces" label="数量"></el-table-column> |
| | | <el-table-column prop="createTime" label="入库时间"></el-table-column> |
| | | <el-table-column prop="batchId" label="批次号"></el-table-column> |
| | | |
| | | <el-table-column |
| | | align="center" |
| | | label="料架状态" |
| | | min-width="80" |
| | | prop="enableState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag |
| | | :type="getTagType(scope.row.enableState)" |
| | | @click="toggleStatus(scope.row)" |
| | | > |
| | | {{ scope.row.enableState === 1 ? "启用" : "未启用" }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- 操作列 --> |
| | | <el-table-column label="操作" width="250"> |
| | | <template #default="{ row }"> |
| | | <el-button |
| | | type="primary" |
| | | @click="edithandleRowClick(row)" |
| | | >修改</el-button |
| | | > |
| | | <el-button type="danger" @click="handleDelete(row)" |
| | | >删除</el-button |
| | | > |
| | | <el-button type="warning" @click="handleCheckout(row)" |
| | | >出库</el-button |
| | | > |
| | | <!-- <el-button type="success" @click="addglass()">添加原片</el-button> --> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination |
| | | v-if="totalItems > 0" |
| | | background |
| | | layout="prev, pager, next" |
| | | :total="totalItems" |
| | | :page-size="pageSize" |
| | | @current-change="handleCurrentChange" |
| | | ></el-pagination> |
| | | </el-dialog> |
| | | |
| | | <el-table |
| | | :data="tasktableData" |
| | | style="width: 98%; height: 150px" |
| | | @selection-change="handleSelectionChange" |
| | | :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }" |
| | | ref="table" |
| | | empty-text="No Data" |
| | | > |
| | | <template #header> |
| | | <div style="display: flex; align-items: center"> |
| | | <span style="font-size: 16px; font-weight: bold; margin-right: 20px" |
| | | >任务列表</span |
| | | > |
| | | </div> |
| | | </template> |
| | | <el-table-column prop="id" label="Glassid"></el-table-column> |
| | | <el-table-column |
| | | prop="taskType" |
| | | label="任务描述" |
| | | width="250" |
| | | :formatter="formatTaskType" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="rawThickness" |
| | | label="玻璃厚度" |
| | | ></el-table-column> |
| | | <el-table-column prop="color" label="玻璃膜系"></el-table-column> |
| | | <el-table-column prop="startTime" label="创建时间"></el-table-column> |
| | | |
| | | <el-table-column |
| | | align="center" |
| | | label="任务状态" |
| | | min-width="80" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getTagType2(scope.row.taskState)"> |
| | | {{ scope.row.taskState == "completed" ? "完成" : "进行中" }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- 操作列 --> |
| | | <el-table-column label="操作" width="350"> |
| | | <template #default="{ row }"> |
| | | <el-button type="primary" @click="handleRestart(row)" |
| | | >重新开始</el-button |
| | | > |
| | | <el-button type="danger" @click="handleDeletetask(row)" |
| | | >删除任务</el-button |
| | | > |
| | | <el-button type="success" @click="handleComplete(row)" |
| | | >任务完成</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-card> |
| | | <div class="img-ypcc"> |
| | | <div |
| | | class="img-car1" |
| | | :style="'z-index:999;left:397px;top:205px;position:absolute;'" |
| | | > |
| | | <div |
| | | v-show="cellshow1" |
| | | style=" |
| | | margin-top: 10px; |
| | | width: 200px; |
| | | height: 5px; |
| | | background-color: #409eff; |
| | | " |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <!-- 入库对话框 --> |
| | | <el-dialog |
| | | title="入库" |
| | | v-model="dialogVisible" |
| | | width="30%" |
| | | :before-close="handleCloseDialog" |
| | | > |
| | | <el-form :model="formData" ref="form" label-width="80px"> |
| | | <el-form-item label="进库料架"> |
| | | <el-select v-model="formData.number" placeholder="请选择进库料架"> |
| | | <el-option label="1" value="1"></el-option> |
| | | <el-option label="2" value="2"></el-option> |
| | | <!-- 根据实际情况添加更多选项 --> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="颜色膜系"> |
| | | <el-select v-model="formData.color" placeholder="请选择颜色膜系"> |
| | | <el-option label="Red" value="Red"></el-option> |
| | | <el-option label="Blue" value="Blue"></el-option> |
| | | <!-- 根据实际情况添加更多选项 --> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="宽度"> |
| | | <el-input |
| | | v-model.number="formData.rawWidth" |
| | | placeholder="请输入宽度" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="高度"> |
| | | <el-input |
| | | v-model.number="formData.rawHeight" |
| | | placeholder="请输入高度" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="厚度"> |
| | | <el-input |
| | | v-model.number="formData.rawThickness" |
| | | placeholder="请输入厚度" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="数量"> |
| | | <el-input |
| | | v-model.number="formData.pieces" |
| | | placeholder="请输入数量" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="dialogVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="handleConfirmInbound" |
| | | >确 定</el-button |
| | | > |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <el-dialog title="添加原片" v-model="dialogVisible3" width="50%"> |
| | | <el-form :model="formData3" ref="form" label-width="80px"> |
| | | <el-form-item label="颜色膜系"> |
| | | <el-input |
| | | v-model="formData.selectedColor" |
| | | readonly |
| | | style="width: 250px; height: 35px; font-size: 20px" |
| | | ></el-input> |
| | | <el-dropdown @command="handleCommand"> |
| | | <span class="el-dropdown-link"> |
| | | 选择<i class="el-icon-arrow-down el-icon--right"></i> |
| | | </span> |
| | | <el-dropdown-menu slot="dropdown"> |
| | | <el-dropdown-item |
| | | v-for="color in colors" |
| | | :key="color['0_glass_id']" |
| | | :command="color['0_glass_id']" |
| | | > |
| | | {{ color["0_glass_id"] }} |
| | | </el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </el-dropdown> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="长度"> |
| | | <el-input |
| | | v-model="formData.width" |
| | | required |
| | | style="width: 250px; font-size: 20px" |
| | | @focus="clearInput('wid')" |
| | | ></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="高度"> |
| | | <el-input |
| | | v-model="formData.height" |
| | | required |
| | | style="width: 250px; font-size: 20px" |
| | | @focus="clearInput('heig')" |
| | | ></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="厚度"> |
| | | <el-input |
| | | v-model="formData.thickness" |
| | | required |
| | | style="width: 250px; font-size: 20px" |
| | | @focus="clearInput('thinkness')" |
| | | ></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="数量"> |
| | | <el-input-number |
| | | v-model="formData.quantity" |
| | | required |
| | | :min="0" |
| | | :max="9000" |
| | | style="width: 250px; font-size: 20px" |
| | | @focus="clearInput('num')" |
| | | ></el-input-number> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="dialogVisible3 = false">关闭</el-button> |
| | | <el-button type="primary" @click="submitForm">提交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | <el-dialog |
| | | title="编辑" |
| | | v-model="editdialogVisible" |
| | | width="30%" |
| | | @close="edithandleDialogClose" |
| | | > |
| | | <el-form :model="editForm" ref="editFormRef" label-width="80px"> |
| | | <el-form-item label="数量"> |
| | | <el-input v-model="editForm.pieces"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="批次号"> |
| | | <el-input v-model="editForm.batchId"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="长度"> |
| | | <el-input v-model="editForm.rawWidth"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="高度"> |
| | | <el-input v-model="editForm.rawHeight"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="厚度"> |
| | | <el-input v-model="editForm.rawThickness"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <div class="dialog-footer"> |
| | | <el-button @click="editdialogVisible = false">取消</el-button> |
| | | <el-button type="primary" @click="editsaveEdit">保存</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | |
| | | |
| | | |
| | | <script setup> |
| | | import { ref, onMounted, onBeforeUnmount,onUnmounted } from "vue"; // 导入 Vue 3 的模块 |
| | | //import * as echarts from 'echarts'; |
| | | import { ElMessage, ElMessageBox } from "element-plus"; |
| | | // import {tableData} from '@/stores/tableData.js'; |
| | | import { WebSocketHost, host } from "@/utils/constants"; |
| | | import { initializeWebSocket, closeWebSocket } from "@/utils/WebSocketService"; |
| | | |
| | | import { |
| | | updateRawUsage, |
| | | deleteRawUsage, |
| | | inStorage, |
| | | outStorage, |
| | | taskUpdate, |
| | | } from "@/utils/api"; |
| | | |
| | | const loading = ref(false); |
| | | const Hidden = ref(false); |
| | | const tableData = ref([]); |
| | | const totalItems = ref(0); |
| | | totalItems.value = 10; |
| | | const pageSize = 10; |
| | | let currentPage = ref(1); |
| | | const handleCurrentChange = (val) => { |
| | | currentPage.value = val; |
| | | }; |
| | | const formatTaskType = (row, column) => { |
| | | if (row.taskType === "从仓位到吊装位") { |
| | | return `从仓位${row.shelfRack}到吊装位${row.loadRack}`; |
| | | } else if (row.taskType === "从仓位到上片位") { |
| | | return `从仓位${row.shelfRack}到上片位${row.loadRack}`; |
| | | } else if (row.taskType === "从上片位到仓位") { |
| | | return `从上片位${row.loadRack}到仓位${row.shelfRack}`; |
| | | } else if (row.taskType === "从吊装位到仓位") { |
| | | return `从吊装位${row.loadRack}到仓位${row.shelfRack}`; |
| | | } |
| | | }; |
| | | const getTagType2 = (status) => { |
| | | switch (status) { |
| | | case "completed": |
| | | return "success"; |
| | | case "in-progress": |
| | | return "info"; |
| | | case "warning": |
| | | return "warning"; |
| | | case "danger": |
| | | return "danger"; |
| | | default: |
| | | return ""; |
| | | } |
| | | }; |
| | | const getTagType = (status) => { |
| | | return status === 1 ? "success" : "danger"; |
| | | // 根据状态值决定标签类型,这里假设状态为1时为成功(绿色),否则为失败(红色) |
| | | }; |
| | | const toggleStatus = (row) => { |
| | | // 切换料架状态的逻辑 |
| | | row.enableState = 1 - row.enableState; // Toggle between 0 and 1 |
| | | // 此处可以添加保存状态的逻辑,比如调用 API 更新数据 |
| | | }; |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/storageTask`; |
| | | // 定义消息处理函数,更新 receivedData 变量 |
| | | const handleMessage = (data) => { |
| | | // 更新 tableData 的数据 |
| | | tableData.value = data.rack[0]; // 假设 tableData 是响应式对象或变量 |
| | | tableData.value.forEach((item) => { |
| | | // 获取 createTime 的时间戳 |
| | | const createTimeTimestamp = item.createTime; |
| | | // 创建日期对象 |
| | | const date = new Date(createTimeTimestamp); |
| | | // 格式化日期时间为本地格式 |
| | | const formattedDateTime = date.toLocaleString(); |
| | | // 替换原来的 createTime 字段为格式化后的日期时间字符串 |
| | | item.createTime = formattedDateTime; |
| | | }); |
| | | tasktableData.value = data.tasks[0]; // 假设 tasktableData 是响应式对象或变量 |
| | | tasktableData.value.forEach((item) => { |
| | | // 获取 createTime 的时间戳 |
| | | const createTimeTimestamp = item.startTime; |
| | | // 创建日期对象 |
| | | const date = new Date(createTimeTimestamp); |
| | | // 格式化日期时间为本地格式 |
| | | const formattedDateTime = date.toLocaleString(); |
| | | // 替换原来的 createTime 字段为格式化后的日期时间字符串 |
| | | item.startTime = formattedDateTime; |
| | | }); |
| | | }; |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | }); |
| | | onUnmounted(() => { |
| | | if (socket) { |
| | | closeWebSocket(socket); |
| | | } |
| | | }); |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | const tasktableData = ref([]); |
| | | const dialogVisible = ref(false); |
| | | const formData = ref({ |
| | | number: "", |
| | | color: "", |
| | | rawWidth: "", |
| | | rawHeight: "", |
| | | rawThickness: "", |
| | | pieces: "", |
| | | loadRack: 1, |
| | | }); |
| | | const formData2 = ref({ |
| | | dzw: "", |
| | | }); |
| | | const handleDelete = (row) => { |
| | | // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认 |
| | | ElMessageBox.confirm("确定要执行删除操作吗?", "确认删除", { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | // 点击确认按钮的回调,执行出库操作 |
| | | const intNumber = { |
| | | id: parseInt(row.number), |
| | | }; |
| | | deleteRawUsage(intNumber); |
| | | console.log("执行删除操作"); |
| | | }) |
| | | .catch(() => { |
| | | // 点击取消按钮的回调,不执行任何操作 |
| | | console.log("取消删除操作"); |
| | | }); |
| | | }; |
| | | const handleCheckout = (row) => { |
| | | // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认 |
| | | ElMessageBox.confirm("确定要执行出库操作吗?", "确认出库", { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | // 点击确认按钮的回调,执行出库操作 |
| | | const raw={ |
| | | number:parseInt(row.number), |
| | | loadRack:2 |
| | | } |
| | | outStorage(raw) |
| | | console.log("执行出库操作", row); |
| | | }) |
| | | .catch(() => { |
| | | // 点击取消按钮的回调,不执行任何操作 |
| | | console.log("取消出库操作"); |
| | | }); |
| | | }; |
| | | const handleInbound = () => { |
| | | // 打开入库对话框 |
| | | dialogVisible.value = true; |
| | | }; |
| | | const storage = () => { |
| | | // 打开入库对话框 |
| | | Hidden.value = true; |
| | | }; |
| | | const handleCloseDialog = () => { |
| | | // 关闭对话框时重置表单数据 |
| | | formData.value = { |
| | | number: "", |
| | | color: "", |
| | | rawWidth: "", |
| | | rawHeight: "", |
| | | rawThickness: "", |
| | | pieces: "", |
| | | }; |
| | | dialogVisible.value = false; |
| | | }; |
| | | const handleConfirmInbound = () => { |
| | | inStorage(formData.value); |
| | | // 处理确认入库逻辑,可以在这里提交表单或者执行其他操作 |
| | | // 关闭对话框 |
| | | dialogVisible.value = false; |
| | | }; |
| | | const dialogVisible3 = ref(false); |
| | | const colors = ref([ |
| | | { "0_glass_id": "Red" }, |
| | | { "0_glass_id": "Green" }, |
| | | { "0_glass_id": "Blue" }, |
| | | // Add more colors as needed |
| | | ]); |
| | | const formData3 = ref({ |
| | | selectedColor: "", |
| | | wid: "", |
| | | heig: "", |
| | | thinkness: "", |
| | | num: "", |
| | | }); |
| | | const addglass = () => { |
| | | // 打开入库对话框 |
| | | dialogVisible3.value = true; |
| | | }; |
| | | const handleCommand = (command) => { |
| | | formData.value.selectedColor = command; |
| | | }; |
| | | const clearInput = (field) => { |
| | | formData.value[field] = ""; |
| | | }; |
| | | const submitForm = () => { |
| | | dialogVisible3.value = false; |
| | | // Add your submit logic here |
| | | }; |
| | | const editdialogVisible = ref(false); |
| | | const editForm = ref({ |
| | | id: "", |
| | | pieces: "", |
| | | batchId: "", |
| | | rawWidth: "", |
| | | rawHeight: "", |
| | | rawThickness: "", |
| | | }); |
| | | const editFormRef = ref(null); |
| | | let currentRow = ref(null); |
| | | // 处理行点击事件 |
| | | const edithandleRowClick = (row) => { |
| | | currentRow.value = row; |
| | | editForm.value.pieces = row.pieces.toString(); |
| | | editForm.value.batchId = row.batchId; |
| | | editForm.value.rawWidth = row.rawWidth; |
| | | editForm.value.rawHeight = row.rawHeight; |
| | | editForm.value.rawThickness = row.rawThickness; |
| | | editForm.value.id = row.number; |
| | | editdialogVisible.value = true; |
| | | }; |
| | | // 添加保存编辑内容 |
| | | const editsaveEdit = () => { |
| | | if (!currentRow.value) return; |
| | | // 更新当前行数据 |
| | | currentRow.value.pieces = editForm.value.pieces; |
| | | currentRow.value.batchId = editForm.value.batchId; |
| | | currentRow.value.rawWidth = editForm.value.rawWidth; |
| | | currentRow.value.rawHeight = editForm.value.rawHeight; |
| | | currentRow.value.rawThickness = editForm.value.rawThickness; |
| | | // 调用更新函数,并处理其返回的 Promise |
| | | updateRawUsage(editForm.value); |
| | | // 关闭对话框 |
| | | editdialogVisible.value = false; |
| | | }; |
| | | // 对话框关闭时重置编辑表单和当前行数据 |
| | | const edithandleDialogClose = () => { |
| | | editForm.value.pieces = ""; |
| | | editForm.value.batchId = ""; |
| | | editForm.value.rawWidth = ""; |
| | | editForm.value.rawHeight = ""; |
| | | editForm.value.rawThickness = ""; |
| | | currentRow.value = null; |
| | | }; |
| | | const handleRestart = (row) => { |
| | | // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认 |
| | | ElMessageBox.confirm("确定要执行重新开始操作吗?", "确认重新开始", { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | const taskdata={ |
| | | id:row.id, |
| | | Type:"重新开始" |
| | | } |
| | | taskUpdate(taskdata); |
| | | console.log("执行重新开始操作", row); |
| | | }) |
| | | .catch(() => { |
| | | // 点击取消按钮的回调,不执行任何操作 |
| | | console.log("取消重新开始操作"); |
| | | }); |
| | | }; |
| | | const handleDeletetask = (row) => { |
| | | // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认 |
| | | ElMessageBox.confirm("确定要执行删除任务操作吗?", "确认删除任务", { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | // 点击确认按钮的回调 |
| | | const taskdata={ |
| | | id:row.id, |
| | | Type:"删除" |
| | | } |
| | | taskUpdate(taskdata); |
| | | console.log("执行删除任务操作", row); |
| | | }) |
| | | .catch(() => { |
| | | // 点击取消按钮的回调,不执行任何操作 |
| | | console.log("取消删除任务操作"); |
| | | }); |
| | | }; |
| | | const handleComplete = (row) => { |
| | | // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认 |
| | | ElMessageBox.confirm("确定要执行任务完成操作吗?", "确认任务完成", { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | const taskdata={ |
| | | id:row.id, |
| | | Type:"完成" |
| | | } |
| | | taskUpdate(taskdata); |
| | | // 点击确认按钮的回调 |
| | | console.log("执行任务完成操作", row); |
| | | }) |
| | | .catch(() => { |
| | | // 点击取消按钮的回调,不执行任何操作 |
| | | console.log("取消任务完成操作"); |
| | | }); |
| | | }; |
| | | </script> |
| | | <style scoped> |
| | | #dt { |
| | | display: block; |
| | | float: left; |
| | | line-height: 20px; |
| | | margin-left: 100px; |
| | | } |
| | | #dta { |
| | | display: block; |
| | | float: left; |
| | | line-height: 20px; |
| | | margin-left: 80%; |
| | | } |
| | | #dialog-footer { |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | .img-ypcc { |
| | | margin-left: 80px; |
| | | background-image: url("../../assets/ypcc.png"); |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 600px; |
| | | width: 1400px; |
| | | max-width: 100%; |
| | | background-size: 1400px 600px; |
| | | overflow: hidden; |
| | | position: relative; |
| | | margin-top: 0px; |
| | | } |
| | | .img-car1 { |
| | | background-image: url("../../assets/ypccche.png"); |
| | | position: absolute; |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 400px; |
| | | width: 200px; |
| | | max-width: 100%; |
| | | background-size: 200px 170px; |
| | | overflow: hidden; |
| | | position: relative; |
| | | } |
| | | .custom-dialog { |
| | | max-height: 90vh; /* 最大高度为视口高度的90% */ |
| | | overflow-y: auto; /* 对话框内部出现垂直滚动条 */ |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { onBeforeUnmount, onMounted, reactive, ref } from "vue"; |
| | | import { useRouter } from "vue-router" |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { useI18n } from 'vue-i18n' |
| | | import { host, WebSocketHost } from '@/utils/constants' |
| | | import dayjs from 'dayjs'; |
| | | import request from "@/utils/request" |
| | | import { closeWebSocket, initializeWebSocket } from '@/utils/WebSocketService'; |
| | | import { inject } from 'vue'; |
| | | const router = useRouter() |
| | | const tableDataa = ref([]) |
| | | const tableDatab = ref([]) |
| | | const tableDatad = ref([]) |
| | | const { t } = useI18n() |
| | | const add = ref(false) |
| | | const dialogFormVisiblea = ref(false) |
| | | const dialogFormVisibleb = ref(false) |
| | | const dialogFormVisiblec = ref(false) |
| | | const dialogFormVisiblee = ref(false) |
| | | const blindb = ref(false) |
| | | const Edit = ref(false) |
| | | const card1 = ref(false) |
| | | const card2 = ref(false) |
| | | const card3 = ref(false) |
| | | const card4 = ref(false) |
| | | const card5 = ref(false) |
| | | const card6 = ref(false) |
| | | const card7 = ref(false) |
| | | const card8 = ref(false) |
| | | const card9 = ref(false) |
| | | const card10 = ref(false) |
| | | const card11 = ref(false) |
| | | const card12 = ref(false) |
| | | const card13 = ref(false) |
| | | const card14 = ref(false) |
| | | const card15 = ref(false) |
| | | const card16 = ref(false) |
| | | const card17 = ref(false) |
| | | const card18 = ref(false) |
| | | const card19 = ref(false) |
| | | const card20 = ref(false) |
| | | const card21 = ref(false) |
| | | const card22 = ref(false) |
| | | const card23 = ref(false) |
| | | const card24 = ref(false) |
| | | const card25 = ref(false) |
| | | const card98 = ref(false) |
| | | const card99 = ref(false) |
| | | const card101 = ref(false) |
| | | const card102 = ref(false) |
| | | const card103 = ref(false) |
| | | const card104 = ref(false) |
| | | const timeRange = ref([]) |
| | | const timeRangea = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const selectValuesb = reactive([]); |
| | | const patternWidth = ref(''); |
| | | const patternHeight = ref(''); |
| | | const patternThickness = ref(''); |
| | | const filmsId = ref(''); |
| | | const remainQuantity = ref(''); |
| | | const slot = ref(''); |
| | | const leftingStation = ref(''); |
| | | const loadingline = ref(''); |
| | | let webSocket: WebSocket | null = null; |
| | | const globalDate = inject('globalDate'); |
| | | const value = ref('') |
| | | const options = [ |
| | | { |
| | | value: 98, |
| | | label: t('film.warehousing1'), |
| | | }, |
| | | { |
| | | value: 99, |
| | | label: t('film.warehousing2'), |
| | | } |
| | | ] |
| | | const report = ref({ |
| | | taskType: '', |
| | | taskState: '', |
| | | }); |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest", { |
| | | beginDate: startTime, |
| | | endDate: globalDate, |
| | | }).then((response) => { |
| | | if (response.code == 200) { |
| | | } else { |
| | | ElMessage.warning(response.msg) |
| | | } |
| | | }); |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(globalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | timeRangea.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | parseAndSetTime(); |
| | | }); |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/rawGlass`; |
| | | const handleMessage = (data) => { |
| | | const formattedTasks = data.tasks[0].map(task => { |
| | | if (task && task.createTime) { |
| | | return { ...task, createTime: formatTimestamp(task.createTime) }; |
| | | } |
| | | return task; |
| | | }); |
| | | tableDataa.value = formattedTasks; |
| | | if (data.rawStationDetailsList != null) { |
| | | tableDatab.value = data.rawStationDetailsList[0] |
| | | if (data.rawStationDetailsList[0][0].patternThickness != null) { |
| | | card1.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][1].patternThickness != null) { |
| | | card2.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][2].patternThickness != null) { |
| | | card3.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][3].patternThickness != null) { |
| | | card4.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][4].patternThickness != null) { |
| | | card5.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][5].patternThickness != null) { |
| | | card6.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][6].patternThickness != null) { |
| | | card7.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][7].patternThickness != null) { |
| | | card8.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][8].patternThickness != null) { |
| | | card9.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][9].patternThickness != null) { |
| | | card10.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][10].patternThickness != null) { |
| | | card11.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][11].patternThickness != null) { |
| | | card12.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][12].patternThickness != null) { |
| | | card13.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][13].patternThickness != null) { |
| | | card14.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][14].patternThickness != null) { |
| | | card15.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][15].patternThickness != null) { |
| | | card16.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][16].patternThickness != null) { |
| | | card17.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][17].patternThickness != null) { |
| | | card18.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][18].patternThickness != null) { |
| | | card19.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][19].patternThickness != null) { |
| | | card20.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][20].patternThickness != null) { |
| | | card21.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][21].patternThickness != null) { |
| | | card22.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][22].patternThickness != null) { |
| | | card23.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][23].patternThickness != null) { |
| | | card24.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][24].patternThickness != null) { |
| | | card25.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][25].patternThickness != null) { |
| | | card98.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][26].patternThickness != null) { |
| | | card99.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][27].patternThickness != null) { |
| | | card101.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][28].patternThickness != null) { |
| | | card102.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][29].patternThickness != null) { |
| | | card103.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][30].patternThickness != null) { |
| | | card104.value = true |
| | | } |
| | | } |
| | | }; |
| | | const handleEdit = (row) => { |
| | | window.localStorage.setItem('deviceId', row.deviceId) |
| | | window.localStorage.setItem('slot', row.slot) |
| | | Edit.value = true; |
| | | }; |
| | | const handleBinda = (row) => { |
| | | dialogFormVisibleb.value = true; |
| | | }; |
| | | const handleBindc = (row) => { |
| | | dialogFormVisiblec.value = true; |
| | | }; |
| | | const handleBinde = (row) => { |
| | | dialogFormVisiblee.value = true; |
| | | }; |
| | | // 删除 |
| | | const deleteWarehousing = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('film.dedelete'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url = "/glassStorage/rawGlassStorageDetails/deleteWarehousing?slot=" + row.slot; |
| | | const response = await request.post(url) |
| | | // const response = await request.post("/glassStorage/rawGlassStorageDetails/deleteWarehousing",[row.slotId]) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 原片入库 |
| | | const handleup = async () => { |
| | | try { |
| | | const response = await request.post('/glassStorage/rawGlassStorageDetails/patternWarehousing', { |
| | | patternWidth: patternWidth.value, |
| | | patternHeight: patternHeight.value, |
| | | patternThickness: patternThickness.value, |
| | | filmsId: filmsId.value, |
| | | remainQuantity: remainQuantity.value, |
| | | slot: slot.value, |
| | | }); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | dialogFormVisibleb.value = false; |
| | | patternWidth.value = ''; |
| | | patternHeight.value = ''; |
| | | patternThickness.value = ''; |
| | | filmsId.value = ''; |
| | | remainQuantity.value = ''; |
| | | slot.value = ''; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 入库请求 |
| | | const handleupc = async () => { |
| | | try { |
| | | var url = "/glassStorage/rawGlassStorageDetails/warehousingRequest?leftingStation=" + leftingStation.value; |
| | | const response = await request.post(url) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | dialogFormVisiblec.value = false; |
| | | leftingStation.value = ''; |
| | | } else { |
| | | // 请求失败,显示错误消息 |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 出库请求 |
| | | const handleupe = async () => { |
| | | try { |
| | | var url = "/glassStorage/rawGlassStorageDetails/outWarehousingRequest?leftingStation=" + leftingStation.value; |
| | | const response = await request.post(url) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | dialogFormVisiblee.value = false; |
| | | leftingStation.value = ''; |
| | | } else { |
| | | // 请求失败,显示错误消息 |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 出库 |
| | | const openc = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('film.deoutbound'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url = "/glassStorage/rawGlassStorageDetails/outWarehousing?slotId=" + row.slot; |
| | | const response = await request.post(url) |
| | | // const response = await request.post("/glassStorage/rawGlassStorageDetails/outWarehousing",[row.slotId]) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 查询数据 |
| | | const selectReportData = async () => { |
| | | let celllist = [] |
| | | let stateList = [] |
| | | if (selectValuesa[0] != null && selectValuesa[0] != 'undefined') { |
| | | if (selectValuesa[0] != "") { |
| | | celllist = [selectValuesa[0]]; |
| | | } |
| | | } |
| | | if (selectValuesa[1] != null && selectValuesa[1] != 'undefined') { |
| | | if (selectValuesa[1] != "") { |
| | | stateList = [selectValuesa[1]]; |
| | | } |
| | | } |
| | | const response = await request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest", { |
| | | beginDate: (timeRange.value && timeRange.value[0]) || '', |
| | | endDate: (timeRange.value && timeRange.value[1]) || '', |
| | | taskState: celllist, |
| | | taskType: stateList |
| | | }) |
| | | if (response.code === 200) { |
| | | // tableDataa.value = response.data; |
| | | ElMessage.success(response.message); |
| | | } |
| | | else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | }; |
| | | // 是否禁用 |
| | | const toggleEnableState = async (row: any) => { |
| | | if (!row.deviceId) { |
| | | ElMessage.error(t('basicData.updatanull')); |
| | | return; |
| | | } |
| | | const newState = row.state === 1 ? 0 : 1; |
| | | try { |
| | | var url = "/glassStorage/rawGlassStorageStation/updateSlotState?slot=" + row.slot + "&state=" + newState; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | row.state = newState; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | row.state = newState; |
| | | } catch (error) { |
| | | ElMessage.error(t('basicData.glassnull')); |
| | | } |
| | | }; |
| | | // 修改数量 |
| | | const Editclick = async () => { |
| | | let slot = window.localStorage.getItem('slot') |
| | | let deviceId = window.localStorage.getItem('deviceId') |
| | | try { |
| | | const response = await request.post('/glassStorage/rawGlassStorageDetails/updateQuantity', { |
| | | deviceId: deviceId, |
| | | slot: slot, |
| | | remainQuantity: remainQuantity.value, |
| | | filmsId: filmsId.value, |
| | | patternThickness: patternThickness.value, |
| | | patternHeight: patternHeight.value, |
| | | patternWidth: patternWidth.value, |
| | | } |
| | | ); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | Edit.value = false; |
| | | tableDatab.value = response.data; |
| | | patternWidth.value = ''; |
| | | patternHeight.value = ''; |
| | | patternThickness.value = ''; |
| | | filmsId.value = ''; |
| | | remainQuantity.value = ''; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp: number | Date): string { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); |
| | | const day = String(date.getDate()).padStart(2, '0'); |
| | | const hours = String(date.getHours()).padStart(2, '0'); |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | // 历史任务 |
| | | const iframeUrl = ref(''); |
| | | const handlehistorical = (row) => { |
| | | // historical() |
| | | // window.localStorage.setItem('pagenumber', 1) |
| | | blindb.value = true; |
| | | iframeUrl.value = `${window.location.origin}/#/GlassStorage/rawhistory`; |
| | | }; |
| | | // const historical = async () => { |
| | | // try { |
| | | // let startTime = window.localStorage.getItem('startTime') |
| | | // const response = await request.post("/glassStorage/rawGlassStorageTask/queryRawGlassHistoryTask", { |
| | | // pageNo: 1, |
| | | // pageSize: 20, |
| | | // taskState: [], |
| | | // taskType: [], |
| | | // beginDate: startTime, |
| | | // endDate: globalDate |
| | | // }) |
| | | // if (response.code == 200) { |
| | | // window.localStorage.setItem('pagenumber', 1) |
| | | // } else { |
| | | // } |
| | | // } |
| | | // catch (error) { |
| | | // } |
| | | // } |
| | | // 任务成功处理 |
| | | const successfull = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.psuccessfullyprocessed'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url = "/glassStorage/rawGlassStorageTask/taskSuccess?taskId=" + row.id; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 任务失败处理 |
| | | const handleptask = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.ptaskfailure'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url = "/glassStorage/rawGlassStorageTask/taskError?taskId=" + row.id; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | function getStatusType1(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return 'info'; |
| | | case 2: |
| | | return 'warning'; |
| | | case 3: |
| | | return 'success'; |
| | | case 4: |
| | | return 'danger'; |
| | | case 5: |
| | | return 'primary'; |
| | | } |
| | | } |
| | | function getStatusText1(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return t('sorter.advancetask');//进片任务 |
| | | case 2: |
| | | return t('sorter.outputtasks');//出片任务 |
| | | case 3: |
| | | return t('sorter.schedulingtasks');//调度任务 |
| | | case 4: |
| | | return t('sorter.advancerequests');//进片请求 |
| | | case 5: |
| | | return t('sorter.releaserequest');//出片请求 |
| | | } |
| | | } |
| | | function getStatusType2(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'info'; |
| | | case 2: |
| | | return 'warning'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | function getStatusText2(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('film.built');//新建 |
| | | case 2: |
| | | return t('film.fail');//失败 |
| | | case 1: |
| | | return t('film.finish');//完成 |
| | | } |
| | | } |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;"> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="dialogFormVisiblea = true"> |
| | | {{ $t('film.mes') }} |
| | | </el-button> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBinda"> |
| | | {{ $t('film.warehousing') }} |
| | | </el-button> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBindc"> |
| | | {{ $t('film.pwarehousing') }} |
| | | </el-button> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBinde">{{ |
| | | $t('film.pwareout') |
| | | }} |
| | | </el-button> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handlehistorical">{{ |
| | | $t('searchOrder.historicaltasks') |
| | | }} |
| | | </el-button> |
| | | <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="datetimerange" format="YYYY/MM/DD HH:mm:ss" |
| | | value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="$t('film.starttime')" |
| | | :end-placeholder="$t('film.endtime')" :default-time="defaultTime" /> |
| | | <el-select v-model="selectValuesa[0]" clearable :placeholder="$t('film.taskstatus')" style="margin-left: 10px;"> |
| | | <el-option :label="$t('film.built')" value="0"></el-option> |
| | | <el-option :label="$t('film.finish')" value="1"></el-option> |
| | | <el-option :label="$t('film.fail')" value="2"></el-option> |
| | | </el-select> |
| | | <el-select v-model="selectValuesa[1]" clearable :placeholder="$t('film.tasktype')" style="margin-left: 10px;"> |
| | | <el-option :label="$t('sorter.advancetask')" value="1"></el-option> |
| | | <el-option :label="$t('sorter.outputtasks')" value="2"></el-option> |
| | | <el-option :label="$t('sorter.schedulingtasks')" value="3"></el-option> |
| | | <el-option :label="$t('sorter.advancerequests')" value="4"></el-option> |
| | | <el-option :label="$t('sorter.releaserequest')" value="5"></el-option> |
| | | </el-select> |
| | | <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('film.inquire') |
| | | }}</el-button> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;"> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> |
| | | <el-table height="300" ref="table" :data="tableDataa" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="id" align="center" :label="$t('film.enableid')" /> |
| | | <el-table-column prop="startSlot" align="center" :label="$t('film.originateslot')" /> |
| | | <el-table-column prop="endSlot" align="center" :label="$t('film.endoriginateslot')" /> |
| | | <el-table-column prop="patternQuantity" align="center" :label="$t('film.patternquantity')" /> |
| | | <el-table-column width="100" align="center" :label="$t('film.enabletype')" prop="taskType"> |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusType1(scope.row.taskType)"> |
| | | {{ getStatusText1(scope.row.taskType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" :label="$t('film.taskstatus')" prop="taskState"> |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusType2(scope.row.taskState)"> |
| | | {{ getStatusText2(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" align="center" :label="$t('film.createtime')" /> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center"> |
| | | <template #default="scope"> |
| | | <el-button :disabled="(scope.row.taskState !== 0)" type="text" plain @click="successfull(scope.row)">{{ |
| | | $t('searchOrder.successfullyprocessed') }}</el-button> |
| | | <el-button :disabled="(scope.row.taskState !== 0)" type="text" plain @click="handleptask(scope.row)">{{ |
| | | $t('searchOrder.taskfailure') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | <div class="img-dlpl"> |
| | | <div class="img-car1" style="z-index:999;top:250px;left:20px;position:absolute;"></div> |
| | | <!-- <div class="img-car1" :style="'z-index:999;top:250px;left:' + 20 + 'px;position:absolute;'"></div> --> |
| | | <div class="card1" v-show="card1" style="z-index:999;top:430px;left:53px;position:absolute;"></div> |
| | | <div class="card2" v-show="card2" style="z-index:999;top:430px;left:80px;position:absolute;"></div> |
| | | <div class="card3" v-show="card3" style="z-index:999;top:430px;left:108px;position:absolute;"></div> |
| | | <div class="card98" v-show="card98" style="z-index:999;top:430px;left:143px;position:absolute;"></div> |
| | | <div class="card4" v-show="card4" style="z-index:999;top:430px;left:202px;position:absolute;"></div> |
| | | <div class="card5" v-show="card5" style="z-index:999;top:430px;left:227px;position:absolute;"></div> |
| | | <div class="card6" v-show="card6" style="z-index:999;top:430px;left:253px;position:absolute;"></div> |
| | | <div class="card7" v-show="card7" style="z-index:999;top:430px;left:280px;position:absolute;"></div> |
| | | <div class="card8" v-show="card8" style="z-index:999;top:430px;left:308px;position:absolute;"></div> |
| | | <div class="card9" v-show="card9" style="z-index:999;top:430px;left:337px;position:absolute;"></div> |
| | | <div class="card10" v-show="card10" style="z-index:999;top:430px;left:364px;position:absolute;"></div> |
| | | <div class="card11" v-show="card11" style="z-index:999;top:430px;left:391px;position:absolute;"></div> |
| | | <div class="card99" v-show="card99" style="z-index:999;top:430px;left:426px;position:absolute;"></div> |
| | | <div class="card12" v-show="card12" style="z-index:999;top:430px;left:489px;position:absolute;"></div> |
| | | <div class="card13" v-show="card13" style="z-index:999;top:430px;left:514px;position:absolute;"></div> |
| | | <div class="card14" v-show="card14" style="z-index:999;top:430px;left:540px;position:absolute;"></div> |
| | | <div class="card15" v-show="card15" style="z-index:999;top:430px;left:566px;position:absolute;"></div> |
| | | <div class="card16" v-show="card16" style="z-index:999;top:430px;left:595px;position:absolute;"></div> |
| | | <div class="card17" v-show="card17" style="z-index:999;top:430px;left:624px;position:absolute;"></div> |
| | | <div class="card18" v-show="card18" style="z-index:999;top:430px;left:654px;position:absolute;"></div> |
| | | <div class="card19" v-show="card19" style="z-index:999;top:430px;left:682px;position:absolute;"></div> |
| | | <div class="card20" v-show="card20" style="z-index:999;top:430px;left:707px;position:absolute;"></div> |
| | | <div class="card25" v-show="card25" style="z-index:999;top:109px;left:664px;position:absolute;"></div> |
| | | <div class="card24" v-show="card24" style="z-index:999;top:109px;left:639px;position:absolute;"></div> |
| | | <div class="card23" v-show="card23" style="z-index:999;top:109px;left:616px;position:absolute;"></div> |
| | | <div class="card22" v-show="card22" style="z-index:999;top:109px;left:592px;position:absolute;"></div> |
| | | <div class="card21" v-show="card21" style="z-index:999;top:109px;left:564px;position:absolute;"></div> |
| | | <div class="card101" v-show="card101" style="z-index:999;top:109px;left:364px;position:absolute;"></div> |
| | | <div class="card102" v-show="card102" style="z-index:999;top:109px;left:334px;position:absolute;"></div> |
| | | <div class="card103" v-show="card103" style="z-index:999;top:109px;left:96px;position:absolute;"></div> |
| | | <div class="card104" v-show="card104" style="z-index:999;top:109px;left:70px;position:absolute;"></div> |
| | | </div> |
| | | <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 700px;" :data="tableDatab" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="deviceId" fixed align="center" :label="$t('film.station')" min-width="80" /> |
| | | <el-table-column prop="slot" fixed align="center" :label="$t('film.slot')" min-width="80" /> |
| | | <el-table-column prop="patternWidth" align="center" :label="$t('film.width')" min-width="80" /> |
| | | <el-table-column prop="patternHeight" align="center" :label="$t('film.height')" min-width="80" /> |
| | | <el-table-column prop="patternThickness" align="center" :label="$t('film.thickness')" min-width="80" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('film.films')" min-width="80" /> |
| | | <el-table-column prop="remainQuantity" align="center" :label="$t('film.remainquantity')" min-width="120" /> |
| | | <el-table-column align="center" :label="$t('film.enablestate')" min-width="80" prop="state"> |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.state == 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)"> |
| | | {{ scope.row.state == 1 ? $t('film.start') : $t('film.disable') }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="270"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="handleEdit(scope.row)">{{ $t('film.exit') }}</el-button> |
| | | <el-button :disabled="!scope.row.remainQuantity" type="text" plain @click="deleteWarehousing(scope.row)">{{ |
| | | $t('film.delete') }}</el-button> |
| | | <el-button :disabled="!scope.row.remainQuantity || scope.row.remainQuantity === 0" type="text" plain |
| | | @click="openc(scope.row)">{{ $t('film.outbound') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | <!-- 历史任务 --> |
| | | <el-dialog v-model="blindb" top="5vh" width="95%" @close="iframeUrl = ''"> |
| | | <iframe :src="iframeUrl" marginwidth="2000px" marginheight="2000px" width="100%" height="750px" |
| | | frameborder="0"></iframe> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisibleb" top="23vh" width="55%" :title="$t('film.addglass')"> |
| | | <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> |
| | | <el-form label-width="150px"> |
| | | <el-form label-width="100px" 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('film.widtha')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inwidth')" v-model="patternWidth" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.heighta')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inheight')" v-model="patternHeight" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.thicknessa')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inthickness')" v-model="patternThickness" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.filmsa')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.infilms')" v-model="filmsId" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.quantitya')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inquantity')" v-model="remainQuantity" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.inwarehousing')" :required="true" style="width: 17vw"> |
| | | <el-select :placeholder="$t('film.selectwarehousing')" style="width: 270px" v-model="slot"> |
| | | <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </el-form> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleup"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="dialogFormVisibleb = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisiblec" top="24vh" width="30%" :title="$t('film.pwarehousing')"> |
| | | <div style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('film.position')" :required="true"> |
| | | <el-select v-model="leftingStation" clearable :placeholder="$t('film.cposition')" style="margin-left: 20px;"> |
| | | <el-option :label="$t('film.position1')" value="98"></el-option> |
| | | <el-option :label="$t('film.position2')" value="99"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleupc"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="dialogFormVisiblec = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisiblee" top="24vh" width="30%" :title="$t('film.pwareout')"> |
| | | <div style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('film.position')" :required="true"> |
| | | <el-select v-model="leftingStation" clearable :placeholder="$t('film.cposition')" style="margin-left: 20px;"> |
| | | <el-option :label="$t('film.position1')" value="98"></el-option> |
| | | <el-option :label="$t('film.position2')" value="99"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleupe"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="dialogFormVisiblee = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="Edit" top="23vh" width="55%" :title="$t('film.addglass')"> |
| | | <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> |
| | | <el-form label-width="150px"> |
| | | <el-form label-width="100px" 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('film.widtha')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inwidth')" v-model="patternWidth" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.heighta')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inheight')" v-model="patternHeight" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.thicknessa')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inthickness')" v-model="patternThickness" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.filmsa')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.infilms')" v-model="filmsId" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form label-width="210px"> |
| | | <el-form-item :label="$t('film.thickremainquantity')" :required="true" |
| | | style="width: 44.5vw;margin-left: -40px;"> |
| | | <el-input v-model="remainQuantity" autocomplete="off" :placeholder="$t('film.inquantity')" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </el-form> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="Editclick"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="Edit = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </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%; |
| | | } |
| | | |
| | | .awatch { |
| | | height: 400px; |
| | | width: 1500px; |
| | | max-width: 100%; |
| | | } |
| | | |
| | | #dialog-footer { |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | |
| | | .img-dlpl { |
| | | margin-left: 330px; |
| | | margin-top: 10px; |
| | | background-image: url('../../assets/ypcc.png'); |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 700px; |
| | | width: 800px; |
| | | max-width: 100%; |
| | | background-size: 800px 700px; |
| | | overflow: hidden; |
| | | position: relative |
| | | } |
| | | |
| | | .img-car1 { |
| | | display: flex; |
| | | background-image: url('../../assets/C1.png'); |
| | | position: absolute; |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 150px; |
| | | width: 70px; |
| | | max-width: 100%; |
| | | background-size: 70px 150px; |
| | | overflow: hidden; |
| | | position: relative |
| | | } |
| | | |
| | | .card1 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card2 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card3 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card4 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card5 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card6 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card7 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card8 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card9 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card10 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card11 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card12 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card13 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card14 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card15 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card16 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card17 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card18 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card19 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card20 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card21 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card22 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card23 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card24 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card25 { |
| | | width: 14px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card101 { |
| | | width: 10px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card102 { |
| | | width: 10px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card103 { |
| | | width: 10px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card104 { |
| | | width: 10px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card98 { |
| | | width: 25px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | |
| | | .card99 { |
| | | width: 25px; |
| | | height: 110px; |
| | | background-color: #911005 |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { onBeforeUnmount, onMounted, reactive, ref } from "vue"; |
| | | import { useRouter } from "vue-router" |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { useI18n } from 'vue-i18n' |
| | | import { host, WebSocketHost } from '@/utils/constants' |
| | | import dayjs from 'dayjs'; |
| | | import request from "@/utils/request" |
| | | import { closeWebSocket, initializeWebSocket } from '@/utils/WebSocketService'; |
| | | import { inject } from 'vue'; |
| | | const router = useRouter() |
| | | const tableDataa = ref([]) |
| | | const tableDatab = ref([]) |
| | | const tableDatad = ref([]) |
| | | const { t } = useI18n() |
| | | const add = ref(false) |
| | | const dialogFormVisiblea = ref(false) |
| | | const dialogFormVisibleb = ref(false) |
| | | const dialogFormVisiblec = ref(false) |
| | | const dialogFormVisiblee = ref(false) |
| | | const blindb = ref(false) |
| | | const Edit = ref(false) |
| | | const card1 = ref(false) |
| | | const card2 = ref(false) |
| | | const card3 = ref(false) |
| | | const card4 = ref(false) |
| | | const card5 = ref(false) |
| | | const card6 = ref(false) |
| | | const card7 = ref(false) |
| | | const card8 = ref(false) |
| | | const card9 = ref(false) |
| | | const card10 = ref(false) |
| | | const card11 = ref(false) |
| | | const card12 = ref(false) |
| | | const card13 = ref(false) |
| | | const card14 = ref(false) |
| | | const card15 = ref(false) |
| | | const card16 = ref(false) |
| | | const card17 = ref(false) |
| | | const card18 = ref(false) |
| | | const card19 = ref(false) |
| | | const card20 = ref(false) |
| | | const card21 = ref(false) |
| | | const card22 = ref(false) |
| | | const card23 = ref(false) |
| | | const card24 = ref(false) |
| | | const card25 = ref(false) |
| | | const card26 = ref(false) |
| | | const card27 = ref(false) |
| | | const card28 = ref(false) |
| | | |
| | | const card31 = ref(false) |
| | | const card32 = ref(false) |
| | | const card33 = ref(false) |
| | | const card34 = ref(false) |
| | | const card35 = ref(false) |
| | | const card36 = ref(false) |
| | | const card37 = ref(false) |
| | | |
| | | const card40 = ref(false) |
| | | const card41 = ref(false) |
| | | const card42 = ref(false) |
| | | const card43 = ref(false) |
| | | const card44 = ref(false) |
| | | const card45 = ref(false) |
| | | const card46 = ref(false) |
| | | const card47 = ref(false) |
| | | const card48 = ref(false) |
| | | const card49 = ref(false) |
| | | |
| | | const card38 = ref(false) |
| | | const card101 = ref(false) |
| | | |
| | | const timeRange = ref([]) |
| | | const timeRangea = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const selectValuesb = reactive([]); |
| | | const patternWidth = ref(''); |
| | | const patternHeight = ref(''); |
| | | const patternThickness = ref(''); |
| | | const filmsId = ref(''); |
| | | const remainQuantity = ref(''); |
| | | const slot = ref(''); |
| | | const leftingStation = ref(''); |
| | | const loadingline = ref(''); |
| | | let webSocket: WebSocket | null = null; |
| | | const globalDate = inject('globalDate'); |
| | | const value = ref('') |
| | | const options = [ |
| | | { |
| | | value: 101, |
| | | label: t('film.warehousing1'), |
| | | }, |
| | | ] |
| | | const report = ref({ |
| | | taskType: '', |
| | | taskState: '', |
| | | }); |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest", { |
| | | beginDate: startTime, |
| | | endDate: globalDate, |
| | | }).then((response) => { |
| | | if (response.code == 200) { |
| | | } else { |
| | | ElMessage.warning(response.msg) |
| | | } |
| | | }); |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(globalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | timeRangea.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | parseAndSetTime(); |
| | | }); |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/rawGlass`; |
| | | const handleMessage = (data) => { |
| | | const formattedTasks = data.tasks[0].map(task => { |
| | | if (task && task.createTime) { |
| | | return { ...task, createTime: formatTimestamp(task.createTime) }; |
| | | } |
| | | return task; |
| | | }); |
| | | tableDataa.value = formattedTasks; |
| | | if (data.rawStationDetailsList != null) { |
| | | tableDatab.value = data.rawStationDetailsList[0] |
| | | if (data.rawStationDetailsList[0][0].patternThickness != null) { |
| | | card1.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][1].patternThickness != null) { |
| | | card2.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][2].patternThickness != null) { |
| | | card3.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][3].patternThickness != null) { |
| | | card4.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][4].patternThickness != null) { |
| | | card5.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][5].patternThickness != null) { |
| | | card6.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][6].patternThickness != null) { |
| | | card7.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][7].patternThickness != null) { |
| | | card8.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][8].patternThickness != null) { |
| | | card9.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][9].patternThickness != null) { |
| | | card10.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][10].patternThickness != null) { |
| | | card11.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][11].patternThickness != null) { |
| | | card12.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][12].patternThickness != null) { |
| | | card13.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][13].patternThickness != null) { |
| | | card14.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][14].patternThickness != null) { |
| | | card15.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][15].patternThickness != null) { |
| | | card16.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][16].patternThickness != null) { |
| | | card17.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][17].patternThickness != null) { |
| | | card18.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][18].patternThickness != null) { |
| | | card19.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][19].patternThickness != null) { |
| | | card20.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][20].patternThickness != null) { |
| | | card21.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][21].patternThickness != null) { |
| | | card22.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][22].patternThickness != null) { |
| | | card23.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][23].patternThickness != null) { |
| | | card24.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][24].patternThickness != null) { |
| | | card25.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][25].patternThickness != null) { |
| | | card26.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][26].patternThickness != null) { |
| | | card27.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][27].patternThickness != null) { |
| | | card28.value = true |
| | | } |
| | | |
| | | if (data.rawStationDetailsList[0][28].patternThickness != null) { |
| | | card31.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][29].patternThickness != null) { |
| | | card32.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][30].patternThickness != null) { |
| | | card33.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][31].patternThickness != null) { |
| | | card34.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][32].patternThickness != null) { |
| | | card35.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][33].patternThickness != null) { |
| | | card36.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][34].patternThickness != null) { |
| | | card37.value = true |
| | | } |
| | | |
| | | |
| | | if (data.rawStationDetailsList[0][35].patternThickness != null) { |
| | | card40.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][36].patternThickness != null) { |
| | | card41.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][37].patternThickness != null) { |
| | | card42.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][38].patternThickness != null) { |
| | | card43.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][39].patternThickness != null) { |
| | | card44.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][40].patternThickness != null) { |
| | | card45.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][41].patternThickness != null) { |
| | | card46.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][42].patternThickness != null) { |
| | | card47.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][43].patternThickness != null) { |
| | | card48.value = true |
| | | } |
| | | if (data.rawStationDetailsList[0][44].patternThickness != null) { |
| | | card49.value = true |
| | | } |
| | | |
| | | |
| | | if (data.rawStationDetailsList[0][45].patternThickness != null) { |
| | | card38.value = true |
| | | } |
| | | |
| | | if (data.rawStationDetailsList[0][46].patternThickness != null) { |
| | | card101.value = true |
| | | } |
| | | } |
| | | }; |
| | | const handleEdit = (row) => { |
| | | window.localStorage.setItem('deviceId', row.deviceId) |
| | | window.localStorage.setItem('slot', row.slot) |
| | | Edit.value = true; |
| | | }; |
| | | const handleBinda = (row) => { |
| | | dialogFormVisibleb.value = true; |
| | | }; |
| | | const handleBindc = (row) => { |
| | | dialogFormVisiblec.value = true; |
| | | }; |
| | | const handleBinde = (row) => { |
| | | dialogFormVisiblee.value = true; |
| | | }; |
| | | // 删除 |
| | | const deleteWarehousing = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('film.dedelete'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url = "/glassStorage/rawGlassStorageDetails/deleteWarehousing?slot=" + row.slot; |
| | | const response = await request.post(url) |
| | | // const response = await request.post("/glassStorage/rawGlassStorageDetails/deleteWarehousing",[row.slotId]) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 原片入库 |
| | | const handleup = async () => { |
| | | try { |
| | | const response = await request.post('/glassStorage/rawGlassStorageDetails/patternWarehousing', { |
| | | patternWidth: patternWidth.value, |
| | | patternHeight: patternHeight.value, |
| | | patternThickness: patternThickness.value, |
| | | filmsId: filmsId.value, |
| | | remainQuantity: remainQuantity.value, |
| | | slot: slot.value, |
| | | }); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | dialogFormVisibleb.value = false; |
| | | patternWidth.value = ''; |
| | | patternHeight.value = ''; |
| | | patternThickness.value = ''; |
| | | filmsId.value = ''; |
| | | remainQuantity.value = ''; |
| | | slot.value = ''; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 入库请求 |
| | | const handleupc = async () => { |
| | | try { |
| | | var url = "/glassStorage/rawGlassStorageDetails/warehousingRequest?leftingStation=" + leftingStation.value; |
| | | const response = await request.post(url) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | dialogFormVisiblec.value = false; |
| | | leftingStation.value = ''; |
| | | } else { |
| | | // 请求失败,显示错误消息 |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 出库请求 |
| | | const handleupe = async () => { |
| | | try { |
| | | var url = "/glassStorage/rawGlassStorageDetails/outWarehousingRequest?leftingStation=" + leftingStation.value; |
| | | const response = await request.post(url) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | dialogFormVisiblee.value = false; |
| | | leftingStation.value = ''; |
| | | } else { |
| | | // 请求失败,显示错误消息 |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 出库 |
| | | const openc = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('film.deoutbound'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url = "/glassStorage/rawGlassStorageDetails/outWarehousing?slotId=" + row.slot; |
| | | const response = await request.post(url) |
| | | // const response = await request.post("/glassStorage/rawGlassStorageDetails/outWarehousing",[row.slotId]) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 查询数据 |
| | | const selectReportData = async () => { |
| | | let celllist = [] |
| | | let stateList = [] |
| | | if (selectValuesa[0] != null && selectValuesa[0] != 'undefined') { |
| | | if (selectValuesa[0] != "") { |
| | | celllist = [selectValuesa[0]]; |
| | | } |
| | | } |
| | | if (selectValuesa[1] != null && selectValuesa[1] != 'undefined') { |
| | | if (selectValuesa[1] != "") { |
| | | stateList = [selectValuesa[1]]; |
| | | } |
| | | } |
| | | const response = await request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest", { |
| | | beginDate: (timeRange.value && timeRange.value[0]) || '', |
| | | endDate: (timeRange.value && timeRange.value[1]) || '', |
| | | taskState: celllist, |
| | | taskType: stateList |
| | | }) |
| | | if (response.code === 200) { |
| | | // tableDataa.value = response.data; |
| | | ElMessage.success(response.message); |
| | | } |
| | | else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | }; |
| | | // 是否禁用 |
| | | const toggleEnableState = async (row: any) => { |
| | | if (!row.deviceId) { |
| | | ElMessage.error(t('basicData.updatanull')); |
| | | return; |
| | | } |
| | | const newState = row.state === 1 ? 0 : 1; |
| | | try { |
| | | var url = "/glassStorage/rawGlassStorageStation/updateSlotState?slot=" + row.slot + "&state=" + newState; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | row.state = newState; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | row.state = newState; |
| | | } catch (error) { |
| | | ElMessage.error(t('basicData.glassnull')); |
| | | } |
| | | }; |
| | | // 修改数量 |
| | | const Editclick = async () => { |
| | | let slot = window.localStorage.getItem('slot') |
| | | let deviceId = window.localStorage.getItem('deviceId') |
| | | try { |
| | | const response = await request.post('/glassStorage/rawGlassStorageDetails/updateQuantity', { |
| | | deviceId: deviceId, |
| | | slot: slot, |
| | | remainQuantity: remainQuantity.value, |
| | | filmsId: filmsId.value, |
| | | patternThickness: patternThickness.value, |
| | | patternHeight: patternHeight.value, |
| | | patternWidth: patternWidth.value, |
| | | } |
| | | ); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | Edit.value = false; |
| | | tableDatab.value = response.data; |
| | | patternWidth.value = ''; |
| | | patternHeight.value = ''; |
| | | patternThickness.value = ''; |
| | | filmsId.value = ''; |
| | | remainQuantity.value = ''; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp: number | Date): string { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); |
| | | const day = String(date.getDate()).padStart(2, '0'); |
| | | const hours = String(date.getHours()).padStart(2, '0'); |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | // 历史任务 |
| | | const iframeUrl = ref(''); |
| | | const handlehistorical = (row) => { |
| | | // historical() |
| | | // window.localStorage.setItem('pagenumber', 1) |
| | | blindb.value = true; |
| | | iframeUrl.value = `${window.location.origin}/#/GlassStorage/rawhistory`; |
| | | }; |
| | | // const historical = async () => { |
| | | // try { |
| | | // let startTime = window.localStorage.getItem('startTime') |
| | | // const response = await request.post("/glassStorage/rawGlassStorageTask/queryRawGlassHistoryTask", { |
| | | // pageNo: 1, |
| | | // pageSize: 20, |
| | | // taskState: [], |
| | | // taskType: [], |
| | | // beginDate: startTime, |
| | | // endDate: globalDate |
| | | // }) |
| | | // if (response.code == 200) { |
| | | // window.localStorage.setItem('pagenumber', 1) |
| | | // } else { |
| | | // } |
| | | // } |
| | | // catch (error) { |
| | | // } |
| | | // } |
| | | // 任务成功处理 |
| | | const successfull = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.psuccessfullyprocessed'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url = "/glassStorage/rawGlassStorageTask/taskSuccess?taskId=" + row.id; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 任务失败处理 |
| | | const handleptask = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.ptaskfailure'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url = "/glassStorage/rawGlassStorageTask/taskError?taskId=" + row.id; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | function getStatusType1(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return 'info'; |
| | | case 2: |
| | | return 'warning'; |
| | | case 3: |
| | | return 'success'; |
| | | case 4: |
| | | return 'danger'; |
| | | case 5: |
| | | return 'primary'; |
| | | } |
| | | } |
| | | function getStatusText1(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return t('sorter.advancetask');//进片任务 |
| | | case 2: |
| | | return t('sorter.outputtasks');//出片任务 |
| | | case 3: |
| | | return t('sorter.schedulingtasks');//调度任务 |
| | | case 4: |
| | | return t('sorter.advancerequests');//进片请求 |
| | | case 5: |
| | | return t('sorter.releaserequest');//出片请求 |
| | | } |
| | | } |
| | | function getStatusType2(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'info'; |
| | | case 2: |
| | | return 'warning'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | function getStatusText2(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('film.built');//新建 |
| | | case 2: |
| | | return t('film.fail');//失败 |
| | | case 1: |
| | | return t('film.finish');//完成 |
| | | } |
| | | } |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;"> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="dialogFormVisiblea = true"> |
| | | {{ $t('film.mes') }} |
| | | </el-button> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBinda"> |
| | | {{ $t('film.warehousing') }} |
| | | </el-button> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBindc"> |
| | | {{ $t('film.pwarehousing') }} |
| | | </el-button> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBinde">{{ |
| | | $t('film.pwareout') |
| | | }} |
| | | </el-button> |
| | | <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handlehistorical">{{ |
| | | $t('searchOrder.historicaltasks') |
| | | }} |
| | | </el-button> |
| | | <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="datetimerange" format="YYYY/MM/DD HH:mm:ss" |
| | | value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="$t('film.starttime')" |
| | | :end-placeholder="$t('film.endtime')" :default-time="defaultTime" /> |
| | | <el-select v-model="selectValuesa[0]" clearable :placeholder="$t('film.taskstatus')" style="margin-left: 10px;"> |
| | | <el-option :label="$t('film.built')" value="0"></el-option> |
| | | <el-option :label="$t('film.finish')" value="1"></el-option> |
| | | <el-option :label="$t('film.fail')" value="2"></el-option> |
| | | </el-select> |
| | | <el-select v-model="selectValuesa[1]" clearable :placeholder="$t('film.tasktype')" style="margin-left: 10px;"> |
| | | <el-option :label="$t('sorter.advancetask')" value="1"></el-option> |
| | | <el-option :label="$t('sorter.outputtasks')" value="2"></el-option> |
| | | <el-option :label="$t('sorter.schedulingtasks')" value="3"></el-option> |
| | | <el-option :label="$t('sorter.advancerequests')" value="4"></el-option> |
| | | <el-option :label="$t('sorter.releaserequest')" value="5"></el-option> |
| | | </el-select> |
| | | <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('film.inquire') |
| | | }}</el-button> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;"> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> |
| | | <el-table height="300" ref="table" :data="tableDataa" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="id" align="center" :label="$t('film.enableid')" /> |
| | | <el-table-column prop="startSlot" align="center" :label="$t('film.originateslot')" /> |
| | | <el-table-column prop="endSlot" align="center" :label="$t('film.endoriginateslot')" /> |
| | | <el-table-column prop="patternQuantity" align="center" :label="$t('film.patternquantity')" /> |
| | | <el-table-column width="100" align="center" :label="$t('film.enabletype')" prop="taskType"> |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusType1(scope.row.taskType)"> |
| | | {{ getStatusText1(scope.row.taskType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" :label="$t('film.taskstatus')" prop="taskState"> |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusType2(scope.row.taskState)"> |
| | | {{ getStatusText2(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" align="center" :label="$t('film.createtime')" /> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center"> |
| | | <template #default="scope"> |
| | | <el-button :disabled="(scope.row.taskState !== 0)" type="text" plain @click="successfull(scope.row)">{{ |
| | | $t('searchOrder.successfullyprocessed') }}</el-button> |
| | | <el-button :disabled="(scope.row.taskState !== 0)" type="text" plain @click="handleptask(scope.row)">{{ |
| | | $t('searchOrder.taskfailure') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | <div class="img-dlpl"> |
| | | <div class="img-car1" style="z-index:999;top:250px;left:20px;position:absolute;"></div> |
| | | |
| | | <div class="glasscard1"> |
| | | <!-- <div class="img-car1" :style="'z-index:999;top:250px;left:' + 20 + 'px;position:absolute;'"></div> --> |
| | | <div class="card1" v-show="card1" style="z-index:999;"></div> |
| | | <div class="card2" v-show="card2" style="z-index:999;"></div> |
| | | <div class="card3" v-show="card3" style="z-index:999;"></div> |
| | | <div class="card4" v-show="card4" style="z-index:999;"></div> |
| | | <div class="card5" v-show="card5" style="z-index:999;"></div> |
| | | <div class="card6" v-show="card6" style="z-index:999;"></div> |
| | | <div class="card7" v-show="card7" style="z-index:999;"></div> |
| | | <div class="card8" v-show="card8" style="z-index:999;"></div> |
| | | <div class="card9" v-show="card9" style="z-index:999;"></div> |
| | | <div class="card10" v-show="card10" style="z-index:999;"></div> |
| | | <div class="card11" v-show="card11" style="z-index:999;"></div> |
| | | <div class="card12" v-show="card12" style="z-index:999;"></div> |
| | | <div class="card13" v-show="card13" style="z-index:999;"></div> |
| | | <div class="card14" v-show="card14" style="z-index:999;"></div> |
| | | <div class="card15" v-show="card15" style="z-index:999;"></div> |
| | | <div class="card16" v-show="card16" style="z-index:999;"></div> |
| | | <div class="card17" v-show="card17" style="z-index:999;"></div> |
| | | <div class="card18" v-show="card18" style="z-index:999;"></div> |
| | | <div class="card19" v-show="card19" style="z-index:999;"></div> |
| | | <div class="card20" v-show="card20" style="z-index:999;"></div> |
| | | <div class="card21" v-show="card21" style="z-index:999;"></div> |
| | | <div class="card22" v-show="card22" style="z-index:999;"></div> |
| | | <div class="card23" v-show="card23" style="z-index:999;"></div> |
| | | <div class="card24" v-show="card24" style="z-index:999;"></div> |
| | | <div class="card25" v-show="card25" style="z-index:999;"></div> |
| | | <div class="card26" v-show="card26" style="z-index:999;"></div> |
| | | <div class="card27" v-show="card27" style="z-index:999;"></div> |
| | | <div class="card28" v-show="card28" style="z-index:999;position:absolute;"></div> |
| | | </div> |
| | | <div class="glasscard2"> |
| | | <div class="card31" v-show="card31" style="z-index:999;"></div> |
| | | <div class="card32" v-show="card32" style="z-index:999;"></div> |
| | | <div class="card33" v-show="card33" style="z-index:999;"></div> |
| | | <div class="card34" v-show="card34" style="z-index:999;"></div> |
| | | <div class="card35" v-show="card35" style="z-index:999;"></div> |
| | | <div class="card36" v-show="card36" style="z-index:999;"></div> |
| | | <div class="card37" v-show="card37" style="z-index:999;"></div> |
| | | <div class="card38" v-show="card38" style="z-index:999;"></div> |
| | | </div> |
| | | |
| | | <div class="glasscard3"> |
| | | <div class="card40" v-show="card40" style="z-index:999;"></div> |
| | | <div class="card41" v-show="card41" style="z-index:999;"></div> |
| | | <div class="card42" v-show="card42" style="z-index:999;"></div> |
| | | <div class="card43" v-show="card43" style="z-index:999;"></div> |
| | | <div class="card44" v-show="card44" style="z-index:999;"></div> |
| | | <div class="card45" v-show="card45" style="z-index:999;"></div> |
| | | <div class="card46" v-show="card46" style="z-index:999;"></div> |
| | | <div class="card47" v-show="card47" style="z-index:999;"></div> |
| | | <div class="card48" v-show="card48" style="z-index:999;"></div> |
| | | <div class="card49" v-show="card49" style="z-index:999;"></div> |
| | | </div> |
| | | <div class="card101" v-show="card101" style="z-index:999;"></div> |
| | | </div> |
| | | |
| | | <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 700px;" :data="tableDatab" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="deviceId" fixed align="center" :label="$t('film.station')" min-width="80" /> |
| | | <el-table-column prop="slot" fixed align="center" :label="$t('film.slot')" min-width="80" /> |
| | | <el-table-column prop="patternWidth" align="center" :label="$t('film.width')" min-width="80" /> |
| | | <el-table-column prop="patternHeight" align="center" :label="$t('film.height')" min-width="80" /> |
| | | <el-table-column prop="patternThickness" align="center" :label="$t('film.thickness')" min-width="80" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('film.films')" min-width="80" /> |
| | | <el-table-column prop="remainQuantity" align="center" :label="$t('film.remainquantity')" min-width="120" /> |
| | | <el-table-column align="center" :label="$t('film.enablestate')" min-width="80" prop="state"> |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.state == 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)"> |
| | | {{ scope.row.state == 1 ? $t('film.start') : $t('film.disable') }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="270"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="handleEdit(scope.row)">{{ $t('film.exit') }}</el-button> |
| | | <el-button :disabled="!scope.row.remainQuantity" type="text" plain @click="deleteWarehousing(scope.row)">{{ |
| | | $t('film.delete') }}</el-button> |
| | | <el-button :disabled="!scope.row.remainQuantity || scope.row.remainQuantity === 0" type="text" plain |
| | | @click="openc(scope.row)">{{ $t('film.outbound') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | <!-- 历史任务 --> |
| | | <el-dialog v-model="blindb" top="5vh" width="95%" @close="iframeUrl = ''"> |
| | | <iframe :src="iframeUrl" marginwidth="2000px" marginheight="2000px" width="100%" height="750px" |
| | | frameborder="0"></iframe> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisibleb" top="23vh" width="55%" :title="$t('film.addglass')"> |
| | | <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> |
| | | <el-form label-width="150px"> |
| | | <el-form label-width="100px" 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('film.widtha')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inwidth')" v-model="patternWidth" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.heighta')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inheight')" v-model="patternHeight" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.thicknessa')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inthickness')" v-model="patternThickness" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.filmsa')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.infilms')" v-model="filmsId" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.quantitya')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inquantity')" v-model="remainQuantity" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.inwarehousing')" :required="true" style="width: 17vw"> |
| | | <el-select :placeholder="$t('film.selectwarehousing')" style="width: 270px" v-model="slot"> |
| | | <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </el-form> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleup"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="dialogFormVisibleb = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisiblec" top="24vh" width="30%" :title="$t('film.pwarehousing')"> |
| | | <div style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('film.position')" :required="true"> |
| | | <el-select v-model="leftingStation" clearable :placeholder="$t('film.cposition')" style="margin-left: 20px;"> |
| | | <el-option :label="$t('film.position1')" value="101"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleupc"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="dialogFormVisiblec = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisiblee" top="24vh" width="30%" :title="$t('film.pwareout')"> |
| | | <div style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('film.position')" :required="true"> |
| | | <el-select v-model="leftingStation" clearable :placeholder="$t('film.cposition')" style="margin-left: 20px;"> |
| | | <el-option :label="$t('film.position1')" value="101"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleupe"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="dialogFormVisiblee = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="Edit" top="23vh" width="55%" :title="$t('film.addglass')"> |
| | | <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> |
| | | <el-form label-width="150px"> |
| | | <el-form label-width="100px" 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('film.widtha')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inwidth')" v-model="patternWidth" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.heighta')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inheight')" v-model="patternHeight" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.thicknessa')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.inthickness')" v-model="patternThickness" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item :label="$t('film.filmsa')" :required="true" style="width: 17vw;"> |
| | | <el-input :placeholder="$t('film.infilms')" v-model="filmsId" autocomplete="off" /> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form label-width="210px"> |
| | | <el-form-item :label="$t('film.thickremainquantity')" :required="true" |
| | | style="width: 44.5vw;margin-left: -40px;"> |
| | | <el-input v-model="remainQuantity" autocomplete="off" :placeholder="$t('film.inquantity')" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </el-form> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="Editclick"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="Edit = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </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%; |
| | | } |
| | | |
| | | .awatch { |
| | | height: 400px; |
| | | width: 1500px; |
| | | max-width: 100%; |
| | | } |
| | | |
| | | #dialog-footer { |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | |
| | | .img-dlpl { |
| | | margin-left: 38px; |
| | | margin-top: 15px; |
| | | background-image: url('../../assets/cangchu2.png'); |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 800px; |
| | | width: 1070px; |
| | | max-width: 100%; |
| | | background-size: 1500px 810px; |
| | | overflow: hidden; |
| | | position: relative; |
| | | } |
| | | |
| | | .img-car1 { |
| | | display: flex; |
| | | background-image: url('../../assets/cangchu1.png'); |
| | | position: absolute; |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 242px; |
| | | width: 240px; |
| | | max-width: 100%; |
| | | background-size: 270px 327px; |
| | | overflow: hidden; |
| | | position: relative; |
| | | margin-left: 866px; |
| | | margin-top: 107px |
| | | } |
| | | |
| | | .glasscard1 { |
| | | height: 118px; |
| | | position: relative; |
| | | margin-top: 625px; |
| | | margin-left: 493px; |
| | | } |
| | | |
| | | .card1 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 0; |
| | | } |
| | | |
| | | .card2 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 19px; |
| | | } |
| | | |
| | | .card3 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 38px; |
| | | } |
| | | |
| | | .card4 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 57px; |
| | | } |
| | | |
| | | .card5 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 76px; |
| | | } |
| | | |
| | | .card6 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 95px; |
| | | } |
| | | |
| | | .card7 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 114px; |
| | | } |
| | | |
| | | .card8 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 133px; |
| | | } |
| | | |
| | | .card9 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 152px; |
| | | } |
| | | |
| | | .card10 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 171px; |
| | | } |
| | | |
| | | .card11 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 190px; |
| | | } |
| | | |
| | | .card12 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 209px; |
| | | } |
| | | |
| | | .card13 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 228px; |
| | | } |
| | | |
| | | .card14 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 247px; |
| | | } |
| | | |
| | | .card15 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 266px; |
| | | } |
| | | |
| | | .card16 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 285px; |
| | | } |
| | | |
| | | .card17 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 304px; |
| | | } |
| | | |
| | | .card18 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 323px; |
| | | } |
| | | |
| | | .card19 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 342px; |
| | | } |
| | | |
| | | .card20 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 361px; |
| | | } |
| | | |
| | | .card21 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 380px; |
| | | } |
| | | |
| | | .card22 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 399px; |
| | | } |
| | | |
| | | .card23 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 418px; |
| | | } |
| | | |
| | | .card24 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 437px; |
| | | } |
| | | |
| | | .card25 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 456px; |
| | | } |
| | | |
| | | .card26 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 475px; |
| | | } |
| | | |
| | | .card27 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 494px; |
| | | } |
| | | |
| | | .card28 { |
| | | width: 8px; |
| | | height: 95px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 513px; |
| | | } |
| | | |
| | | .glasscard2 { |
| | | position: relative; |
| | | margin-top: -420px; |
| | | margin-left: 495px; |
| | | } |
| | | |
| | | .card31 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 0; |
| | | } |
| | | |
| | | .card32 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 19px; |
| | | } |
| | | |
| | | .card33 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 38px; |
| | | } |
| | | |
| | | .card34 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 57px; |
| | | } |
| | | |
| | | .card35 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 76px; |
| | | } |
| | | |
| | | .card36 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 95px; |
| | | } |
| | | |
| | | .card37 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 114px; |
| | | } |
| | | |
| | | .card38 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 136px; |
| | | } |
| | | |
| | | .glasscard3 { |
| | | position: relative; |
| | | margin-left: 806px; |
| | | margin-top: -90px; |
| | | } |
| | | |
| | | .card40 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 0; |
| | | } |
| | | |
| | | .card41 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 19px; |
| | | } |
| | | |
| | | .card42 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 38px; |
| | | } |
| | | |
| | | .card43 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 57px; |
| | | } |
| | | |
| | | .card44 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 76px; |
| | | } |
| | | |
| | | .card45 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 95px; |
| | | } |
| | | |
| | | .card46 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 114px; |
| | | } |
| | | |
| | | .card47 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 133px; |
| | | } |
| | | |
| | | .card48 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 152px; |
| | | } |
| | | |
| | | .card49 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 171px; |
| | | } |
| | | |
| | | .card101 { |
| | | width: 8px; |
| | | height: 90px; |
| | | background-color: #911005; |
| | | position: absolute; |
| | | left: 1023px; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div> |
| | | <div style="display: flex;width: 1770px;"> |
| | | <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('searchOrder.taskstatus')" clearable |
| | | style="width: 200px;margin-left: 10px;"> |
| | | <el-option :label="$t('film.built')" value="0"></el-option> |
| | | <el-option :label="$t('film.finish')" value="1"></el-option> |
| | | <el-option :label="$t('film.fail')" value="2"></el-option> |
| | | </el-select> |
| | | <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('film.enabletype')" clearable |
| | | style="width: 200px;margin-left: 10px;"> |
| | | <el-option :label="$t('sorter.advancetask')" value="1"></el-option> |
| | | <el-option :label="$t('sorter.outputtasks')" value="2"></el-option> |
| | | <el-option :label="$t('sorter.schedulingtasks')" value="3"></el-option> |
| | | <el-option :label="$t('sorter.advancerequests')" value="4"></el-option> |
| | | <el-option :label="$t('sorter.releaserequest')" value="5"></el-option> |
| | | </el-select> |
| | | <el-date-picker |
| | | style="margin-left: 15px;" |
| | | v-model="timeRange" |
| | | type="datetimerange" |
| | | :shortcuts="shortcuts" |
| | | range-separator="至" |
| | | :start-placeholder="$t('reportmanage.starttime')" |
| | | :end-placeholder="$t('reportmanage.endtime')" |
| | | /> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{$t('reportmanage.inquire')}}</el-button> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 580px;width: 1770px;" :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="startSlot" align="center" :label="$t('film.originateslot')" min-width="50" /> |
| | | <el-table-column prop="endSlot" align="center" :label="$t('film.endoriginateslot')" min-width="50" /> |
| | | <el-table-column prop="shelf" align="center" :label="$t('film.resetnumber')" min-width="50" /> |
| | | <el-table-column prop="patternQuantity" align="center" :label="$t('film.thickremainquant')" min-width="50" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.taskstatus')" |
| | | min-width="50" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusType2(scope.row.taskState)"> |
| | | {{ getStatusText2(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.enabletype')" |
| | | min-width="50" |
| | | prop="taskType" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusType1(scope.row.taskType)"> |
| | | {{ getStatusText1(scope.row.taskType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('reportmanage.starttime')" min-width="50" /> |
| | | <el-table-column prop="formattedUpdateTime" align="center" :label="$t('reportmanage.endtime')" min-width="50" /> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center"> |
| | | <template #default="scope"> |
| | | <el-button :disabled="(scope.row.taskState !== 0)" type="text" plain @click="successfull(scope.row)">{{ $t('searchOrder.successfullyprocessed') }}</el-button> |
| | | <el-button :disabled="(scope.row.taskState !== 0)" type="text" plain @click="handleptask(scope.row)">{{ $t('searchOrder.taskfailure') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div style="margin-top: 20px;margin-left: 40%;"> |
| | | <el-pagination |
| | | v-model:current-page="currentPage2" |
| | | :page-size="pageSize" |
| | | :size="large" |
| | | :disabled="disabled" |
| | | layout="prev, pager, next, jumper" |
| | | :total="totalRecords" |
| | | @current-change="handlePageChange2" |
| | | style="margin-top: 10px;" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import {useI18n} from 'vue-i18n' |
| | | import {useRouter} from "vue-router" |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {ElMessage, ElMessageBox} from 'element-plus' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | import { inject } from 'vue'; |
| | | const globalDate = inject('globalDate'); |
| | | const router = useRouter() |
| | | const timeRange = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const tableDatax = ref([]) |
| | | const currentPage2 = ref(1) |
| | | const totalRecords = ref(0) |
| | | const glassId = ref(''); |
| | | const startSlot = ref(''); |
| | | const targetSlot = ref(''); |
| | | let getglobalDate = window.localStorage.getItem('getglobalDate') |
| | | const historical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/glassStorage/rawGlassStorageTask/queryRawGlassHistoryTask", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | taskState: [], |
| | | taskType: [], |
| | | beginDate: startTime, |
| | | endDate: getglobalDate |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const successfull = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.psuccessfullyprocessed'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url="/glassStorage/rawGlassStorageTask/taskSuccess?taskId="+ row.id; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 任务失败处理 |
| | | const handleptask = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.ptaskfailure'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | var url="/glassStorage/rawGlassStorageTask/taskError?taskId="+ row.id; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | const handlePageChange2 = (newPage) => { |
| | | currentPage2.value = newPage; |
| | | window.localStorage.setItem('pagenumber', currentPage2.value) |
| | | historicala(currentPage2.value); |
| | | }; |
| | | const historicala = async (page) => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | let celllist=[] |
| | | let stateList=[] |
| | | let pstartSlot= '' |
| | | let ptargetSlot='' |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(selectValuesa[1]!=null&&selectValuesa[1]!='undefined'){ |
| | | if(selectValuesa[1]!=""){ |
| | | stateList=[selectValuesa[1]]; |
| | | } |
| | | } |
| | | if(startSlot.value != ""){ |
| | | pstartSlot = startSlot.value |
| | | }else{ |
| | | pstartSlot = '0' |
| | | } |
| | | if(targetSlot.value != ""){ |
| | | ptargetSlot = targetSlot.value |
| | | }else{ |
| | | ptargetSlot = '0' |
| | | } |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | const response = await request.post("/glassStorage/rawGlassStorageTask/queryRawGlassHistoryTask", { |
| | | pageNo: page, |
| | | pageSize: 20, |
| | | taskState: celllist, |
| | | taskType: stateList, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 历史查询点击 |
| | | const sethistorical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | let celllist=[] |
| | | let stateList=[] |
| | | let pstartSlot= '' |
| | | let ptargetSlot='' |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(selectValuesa[1]!=null&&selectValuesa[1]!='undefined'){ |
| | | if(selectValuesa[1]!=""){ |
| | | stateList=[selectValuesa[1]]; |
| | | } |
| | | } |
| | | if(startSlot.value != ""){ |
| | | pstartSlot = startSlot.value |
| | | }else{ |
| | | pstartSlot = '0' |
| | | } |
| | | if(targetSlot.value != ""){ |
| | | ptargetSlot = targetSlot.value |
| | | }else{ |
| | | ptargetSlot = '0' |
| | | } |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | const response = await request.post("/glassStorage/rawGlassStorageTask/queryRawGlassHistoryTask", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | taskState: celllist, |
| | | taskType: stateList, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | currentPage2.value = 1; |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | const shortcuts = [ |
| | | { |
| | | text: '最近一周', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setDate(oneWeekAgo.getDate() - 7) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近一个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 1) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近三个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 3) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | ] |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(getglobalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | function getStatusType1(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return 'info'; |
| | | case 2: |
| | | return 'warning'; |
| | | case 3: |
| | | return 'success'; |
| | | case 4: |
| | | return 'danger'; |
| | | case 5: |
| | | return 'primary'; |
| | | } |
| | | } |
| | | function getStatusText1(taskType) { |
| | | switch (taskType) { |
| | | case 1: |
| | | return t('sorter.advancetask');//进片任务 |
| | | case 2: |
| | | return t('sorter.outputtasks');//出片任务 |
| | | case 3: |
| | | return t('sorter.schedulingtasks');//调度任务 |
| | | case 4: |
| | | return t('sorter.advancerequests');//进片请求 |
| | | case 5: |
| | | return t('sorter.releaserequest');//出片请求 |
| | | } |
| | | } |
| | | function getStatusType2(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'info'; |
| | | case 2: |
| | | return 'warning'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | function getStatusText2(taskState) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('film.built');//新建 |
| | | case 2: |
| | | return t('film.fail');//失败 |
| | | case 1: |
| | | return t('film.finish');//完成 |
| | | } |
| | | } |
| | | onMounted(() => { |
| | | parseAndSetTime(); |
| | | historical(); |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | </style> |
| New file |
| | |
| | | <script setup> |
| | | import { useRouter, useRoute } from 'vue-router' |
| | | |
| | | // function global_callback(msg) { |
| | | // console.log("websocket的回调函数收到服务器信息:" + JSON.stringify(msg)); |
| | | // // console.log("收到服务器信息:" + msg); |
| | | // } |
| | | // function close(){ |
| | | // closeSock(); |
| | | |
| | | // } |
| | | // function sendMessage(){ |
| | | // sendSock("123") |
| | | // } |
| | | // function createSocket(){ |
| | | // createWebSocket(global_callback); |
| | | // } |
| | | // </script> |
| | | <template> |
| | | <div class="mainDiv"> |
| | | <button @click="createSocket">创建</button> |
| | | <button @click="sendMessage">发送</button> |
| | | <button @click="close">关闭</button> |
| | | </div> |
| | | </template> |
| New file |
| | |
| | | <script setup> |
| | | let indexFlag = $ref(1) |
| | | function changeRouter(index) { |
| | | indexFlag = index |
| | | } |
| | | </script> |
| | | <template> |
| | | <div id="main-body"> |
| | | <router-view/> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | #main-div { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | #div-title { |
| | | height: 2%; |
| | | width: 100%; |
| | | } |
| | | #searchButton { |
| | | margin-top: -5px; |
| | | margin-left: 1rem; |
| | | } |
| | | #main-body { |
| | | width: 100%; |
| | | height: 95%; |
| | | /* margin-top: 1%; */ |
| | | } |
| | | #select { |
| | | margin-left: 0.5rem; |
| | | } |
| | | :deep(.indexTag .el-breadcrumb__inner) { |
| | | color: #5CADFE !important; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;"> |
| | | <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ ava }}-{{ avanum }} </div> |
| | | <el-scrollbar height="750px" width="1400px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRects" |
| | | :key="rect.glassId" |
| | | class="rect" |
| | | @click="showDialog(rect.glassId)" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.yAxisa}px`, left: `${rect.xAxisa}px`, width: `${rect.width}px`, height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor(rect.state) |
| | | }"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 20px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 20px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose"> |
| | | <el-button :disabled="currentGlassRect?.state === 8 || currentGlassRect?.state === 9" type="warning" |
| | | plain :icon="Delete" @click="handleDamage(currentGlassId)" style="width: 140px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="currentGlassRect?.state === 9 || currentGlassRect?.state === 8" type="danger" |
| | | plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"> |
| | | <Upload/> |
| | | </el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | </el-dialog> |
| | | </el-card> |
| | | </div> |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import {avatarEmits, ElMessage} from 'element-plus' |
| | | import {onBeforeUnmount, computed, onMounted, onUnmounted, ref} from 'vue'; |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {useI18n} from 'vue-i18n' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const blind = ref(false) |
| | | const currentGlassId = ref(null); |
| | | const adjustedRects = ref([]); |
| | | const ava = ref(''); |
| | | const avanum = ref(''); |
| | | const realwidth = ref(''); |
| | | const realheight = ref(''); |
| | | let socket = null; |
| | | const currentGlassRect = computed(() => { |
| | | return adjustedRects.value.find(rect => rect.glassId === currentGlassId.value); |
| | | }); |
| | | function showDialog(glassId: number) { |
| | | currentGlassId.value = glassId; |
| | | blind.value = true; |
| | | adjustedRects.value = adjustedRects.value.map(rect => |
| | | rect.glassId === glassId ? {...rect, isActive: true} : rect |
| | | ); |
| | | } |
| | | const handleDialogClose = () => { |
| | | adjustedRects.value = adjustedRects.value.map(rect => ({ |
| | | ...rect, |
| | | isActive: false |
| | | })); |
| | | } |
| | | // 破损 |
| | | const handleDamage = async () => { |
| | | try { |
| | | const response = await request.post('/cacheGlass/taskCache/identControls', { |
| | | glassId: currentGlassId.value, |
| | | state: 8, |
| | | line: 1, |
| | | remark: '掰片', |
| | | workingProcedure: '切割', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blind.value = false; |
| | | updateRectStatus(currentGlassId.value, 8); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 人工拿走 |
| | | const handleManualTake = async () => { |
| | | try { |
| | | const response = await request.post('/cacheGlass/taskCache/identControls', { |
| | | glassId: currentGlassId.value, |
| | | state: 9, |
| | | line: 1, |
| | | workingProcedure: '切割', |
| | | remark: '掰片', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blind.value = false; |
| | | updateRectStatus(currentGlassId.value, 9); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | function getRectColor(state: number): string { |
| | | switch (state) { |
| | | case 0: |
| | | return '#7AC5CD'; |
| | | case 1: |
| | | return '#95d475'; |
| | | case -1: |
| | | return '#99BBFF'; |
| | | case 2: |
| | | return 'lightblue'; |
| | | case 3: |
| | | return '#eebe77'; |
| | | case 4: |
| | | return '#CD6090'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | default: |
| | | return '#CDAF95'; |
| | | } |
| | | } |
| | | // 更新矩形状态 |
| | | function updateRectStatus(glassId: string, status: number) { |
| | | adjustedRects.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = status; // 更新矩形的状态 |
| | | } |
| | | }); |
| | | } |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/currentCutDrawingOne`; |
| | | const handleMessage = (data: any) => { |
| | | if (data.engineer != null) { |
| | | ava.value = data.engineer[0] |
| | | }else{ |
| | | ava.value = '' |
| | | } |
| | | if (data.engineer != null) { |
| | | avanum.value = data.sequence[0] |
| | | }else{ |
| | | avanum.value = '' |
| | | } |
| | | console.log(data.upPattenUsage); |
| | | console.log(data.currentCutTerritory); |
| | | if (data.upPattenUsage && data.upPattenUsage.length > 0) { |
| | | realwidth.value = data.upPattenUsage[0].width; |
| | | realheight.value = data.upPattenUsage[0].height; |
| | | const realx = realwidth.value; |
| | | const realy = realheight.value; |
| | | window.localStorage.setItem('widthreturna', realy) |
| | | const scaleFactora = 1621.78 / realx; |
| | | const scaleFactorya = 750 / realy; |
| | | window.localStorage.setItem('scaleFactorb', scaleFactora) |
| | | window.localStorage.setItem('scaleFactoryb', scaleFactorya) |
| | | } |
| | | if (data.currentCutTerritory && data.currentCutTerritory.length > 0) { |
| | | let scaleFactor = window.localStorage.getItem('scaleFactorb') |
| | | let scaleFactory = window.localStorage.getItem('scaleFactoryb') |
| | | let widthreturn = window.localStorage.getItem('widthreturna') |
| | | const newRects = data.currentCutTerritory[0].map(rect => { |
| | | const existingRect = adjustedRects.value.find(r => r.glassId === rect.glassId); |
| | | if (existingRect) { |
| | | return { |
| | | ...existingRect, |
| | | xAxisa: rect.xAxis * scaleFactor, |
| | | yAxisa: (widthreturn - (rect.yAxis + rect.edgHeight)) * scaleFactory, |
| | | width: rect.edgWidth * scaleFactor, |
| | | height: rect.edgHeight * scaleFactory, |
| | | widtha: rect.edgWidth, |
| | | heighta: rect.edgHeight, |
| | | state: rect.state, |
| | | // 保持 isActive 状态不变 |
| | | }; |
| | | } else { |
| | | // 如果不存在,则添加新矩形,默认 isActive 为 false |
| | | return { |
| | | ...rect, |
| | | xAxisa: rect.xAxis * scaleFactor, |
| | | yAxisa: (widthreturn - (rect.yAxis + rect.edgHeight)) * scaleFactory, |
| | | width: rect.edgWidth * scaleFactor, |
| | | height: rect.edgHeight * scaleFactory, |
| | | widtha: rect.edgWidth, |
| | | heighta: rect.edgHeight, |
| | | state: rect.state, |
| | | isActive: false, |
| | | glassId: rect.glassId, |
| | | }; |
| | | } |
| | | }); |
| | | adjustedRects.value = newRects; |
| | | } else if (data.currentCutTerritory == '') { |
| | | adjustedRects.value = []; |
| | | } |
| | | } |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | }); |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | .rect { |
| | | border: 1px solid black; /* 设置矩形的边框 */ |
| | | /* background-color: lightblue; 设置矩形的背景色 */ |
| | | } |
| | | .centered-text { |
| | | /* 设置文字居中样式 */ |
| | | /* display: flex; */ |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 100%; /* 确保div占据整个矩形的高度 */ |
| | | /* font-size: large; */ |
| | | } |
| | | #line { |
| | | position: absolute; |
| | | top: 70%; /* 直线位于矩形中间 */ |
| | | left: 210px; /* 直线在箭头右侧一些距离 */ |
| | | transform: translateY(-50%); /* 垂直居中 */ |
| | | height: 2px; /* 直线的高度 */ |
| | | width: 240px; /* 直线的长度,根据需要调整 */ |
| | | background-color: #911005; /* 直线的颜色 */ |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;"> |
| | | <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ ava }}-{{ avanum }} </div> |
| | | <el-scrollbar height="750px" width="1400px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRects" |
| | | :key="rect.glassId" |
| | | class="rect" |
| | | @click="showDialog(rect.glassId)" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.yAxisa}px`, left: `${rect.xAxisa}px`, width: `${rect.width}px`, height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor(rect.state) |
| | | }"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 20px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 20px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose"> |
| | | <el-button :disabled="currentGlassRect?.state === 8 || currentGlassRect?.state === 9" type="warning" |
| | | plain :icon="Delete" @click="handleDamage(currentGlassId)" style="width: 140px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="currentGlassRect?.state === 9 || currentGlassRect?.state === 8" type="danger" |
| | | plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"> |
| | | <Upload/> |
| | | </el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | </el-dialog> |
| | | </el-card> |
| | | </div> |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import {ElMessage} from 'element-plus' |
| | | import {onBeforeUnmount, computed, onMounted, onUnmounted, ref} from 'vue'; |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {useI18n} from 'vue-i18n' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const blind = ref(false) |
| | | const currentGlassId = ref(null); |
| | | const adjustedRects = ref([]); |
| | | const ava = ref(''); |
| | | const avanum = ref(''); |
| | | const realwidth = ref(''); |
| | | const realheight = ref(''); |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/currentCutDrawingTwo`; |
| | | const handleMessage = (data: any) => { |
| | | if (data.engineer != null) { |
| | | ava.value = data.engineer[0] |
| | | }else{ |
| | | ava.value = '' |
| | | } |
| | | if (data.engineer != null) { |
| | | avanum.value = data.sequence[0] |
| | | }else{ |
| | | avanum.value = '' |
| | | } |
| | | if (data.upPattenUsage && data.upPattenUsage.length > 0) { |
| | | realwidth.value = data.upPattenUsage[0].width; |
| | | realheight.value = data.upPattenUsage[0].height; |
| | | const realx = realwidth.value; |
| | | const realy = realheight.value; |
| | | const scaleFactora = 1621.78 / realx; |
| | | const scaleFactorya = 750 / realy; |
| | | window.localStorage.setItem('widthreturna', realy) |
| | | window.localStorage.setItem('scaleFactorb', scaleFactora) |
| | | window.localStorage.setItem('scaleFactoryb', scaleFactorya) |
| | | } |
| | | if (data.currentCutTerritory && data.currentCutTerritory.length > 0) { |
| | | let scaleFactor = window.localStorage.getItem('scaleFactorb') |
| | | let scaleFactory = window.localStorage.getItem('scaleFactoryb') |
| | | let widthreturn = window.localStorage.getItem('widthreturna') |
| | | const newRects = data.currentCutTerritory[0].map(rect => { |
| | | const existingRect = adjustedRects.value.find(r => r.glassId === rect.glassId); |
| | | if (existingRect) { |
| | | return { |
| | | ...existingRect, |
| | | xAxisa: rect.xAxis * scaleFactor, |
| | | yAxisa: (widthreturn - (rect.yAxis + rect.edgHeight )) * scaleFactory, |
| | | width: rect.edgWidth * scaleFactor, |
| | | height: rect.edgHeight * scaleFactory, |
| | | widtha: rect.edgWidth, |
| | | heighta: rect.edgHeight, |
| | | state: rect.state, |
| | | }; |
| | | } else { |
| | | // 如果不存在,则添加新矩形,默认 isActive 为 false |
| | | return { |
| | | ...rect, |
| | | xAxisa: rect.xAxis * scaleFactor, |
| | | yAxisa: (widthreturn - (rect.yAxis + rect.edgHeight)) * scaleFactory, |
| | | width: rect.edgWidth * scaleFactor, |
| | | height: rect.edgHeight * scaleFactory, |
| | | widtha: rect.edgWidth, |
| | | heighta: rect.edgHeight, |
| | | state: rect.state, |
| | | isActive: false, |
| | | glassId: rect.glassId, |
| | | }; |
| | | } |
| | | }); |
| | | adjustedRects.value = newRects; |
| | | } else if (data.currentCutTerritory == '') { |
| | | adjustedRects.value = []; |
| | | } |
| | | } |
| | | const currentGlassRect = computed(() => { |
| | | return adjustedRects.value.find(rect => rect.glassId === currentGlassId.value); |
| | | }); |
| | | function showDialog(glassId: number) { |
| | | currentGlassId.value = glassId; |
| | | blind.value = true; |
| | | adjustedRects.value = adjustedRects.value.map(rect => |
| | | rect.glassId === glassId ? {...rect, isActive: true} : rect |
| | | ); |
| | | } |
| | | const handleDialogClose = () => { |
| | | adjustedRects.value = adjustedRects.value.map(rect => ({ |
| | | ...rect, |
| | | isActive: false |
| | | })); |
| | | } |
| | | // 破损 |
| | | const handleDamage = async () => { |
| | | try { |
| | | const response = await request.post('/cacheGlass/taskCache/identControls', { |
| | | glassId: currentGlassId.value, |
| | | state: 8, |
| | | line: 2, |
| | | remark: '掰片', |
| | | workingProcedure: '切割', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blind.value = false; |
| | | updateRectStatus(currentGlassId.value, 8); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 人工拿走 |
| | | const handleManualTake = async () => { |
| | | try { |
| | | const response = await request.post('/cacheGlass/taskCache/identControls', { |
| | | glassId: currentGlassId.value, |
| | | state: 9, |
| | | line: 2, |
| | | workingProcedure: '切割', |
| | | remark: '掰片', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blind.value = false; |
| | | updateRectStatus(currentGlassId.value, 9); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | function getRectColor(state: number): string { |
| | | switch (state) { |
| | | case 0: |
| | | return '#7AC5CD'; |
| | | case 1: |
| | | return '#95d475'; |
| | | case -1: |
| | | return '#99BBFF'; |
| | | case 2: |
| | | return 'lightblue'; |
| | | case 3: |
| | | return '#eebe77'; |
| | | case 4: |
| | | return '#CD6090'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | default: |
| | | return '#CDAF95'; |
| | | } |
| | | } |
| | | // 更新矩形状态 |
| | | function updateRectStatus(glassId: string, status: number) { |
| | | adjustedRects.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = status; // 更新矩形的状态 |
| | | } |
| | | }); |
| | | } |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | }); |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | .rect { |
| | | border: 1px solid black; /* 设置矩形的边框 */ |
| | | /* background-color: lightblue; 设置矩形的背景色 */ |
| | | } |
| | | .centered-text { |
| | | /* 设置文字居中样式 */ |
| | | /* display: flex; */ |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 100%; /* 确保div占据整个矩形的高度 */ |
| | | /* font-size: large; */ |
| | | } |
| | | #line { |
| | | position: absolute; |
| | | top: 70%; /* 直线位于矩形中间 */ |
| | | left: 210px; /* 直线在箭头右侧一些距离 */ |
| | | transform: translateY(-50%); /* 垂直居中 */ |
| | | height: 2px; /* 直线的高度 */ |
| | | width: 240px; /* 直线的长度,根据需要调整 */ |
| | | background-color: #911005; /* 直线的颜色 */ |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <div style="display: flex;"> |
| | | <el-input v-model="engineerId" style="margin-left: 15px;margin-top: 10px;width: 240px" :placeholder="$t('order.projectnumber')"/> |
| | | <el-button type="primary" style="margin-left: 10px;margin-top: 10px;" @click="sethistorical()">{{$t('reportmanage.inquire')}}</el-button> |
| | | <el-pagination |
| | | v-model:current-page="currentPage" |
| | | :page-size="pageSize" |
| | | :size="size" |
| | | :disabled="disabled" |
| | | layout="prev, pager, next, jumper" |
| | | :total="totalPages" |
| | | @current-change="handleCurrentChange" |
| | | style="margin-top: 10px;" |
| | | /> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;"> |
| | | <el-scrollbar height="750px" width="1400px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRects" |
| | | :key="rect.glassId" |
| | | class="rect" |
| | | @click="showDialog(rect.glassId)" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.yaxisa}px`, left: `${rect.xaxisa}px`, width: `${rect.width}px`, height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor(rect.state) |
| | | }" |
| | | > |
| | | <div class="centered-text"> |
| | | <div style="font-size: 20px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 20px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose"> |
| | | <el-select |
| | | :placeholder="$t('workOrder.cway')" |
| | | clearable |
| | | style="width: 140px;margin-left: 10px;margin-bottom: 10px;" |
| | | v-model="patternSequence"> |
| | | <el-option |
| | | v-for="item in optionsb" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <el-button :disabled="!patternSequence || currentGlassRect?.state === 8 || currentGlassRect?.state === 9" type="warning" |
| | | plain :icon="Delete" @click="handleDamage(currentGlassId)" style="width: 140px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="!patternSequence || currentGlassRect?.state === 9 || currentGlassRect?.state === 8" type="danger" |
| | | plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"> |
| | | <Upload/> |
| | | </el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | </el-dialog> |
| | | </el-card> |
| | | </div> |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import {ElMessage} from 'element-plus' |
| | | import {computed, onMounted, onUnmounted, ref} from 'vue'; |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {useI18n} from 'vue-i18n' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const blind = ref(false) |
| | | const engineerId = ref(); |
| | | const patternSequence = ref(); |
| | | const currentGlassId = ref(null); |
| | | const currentstate = ref(null); |
| | | const adjustedRects = ref([]); |
| | | const raw = ref([]); |
| | | let webSocket: WebSocket | null = null; |
| | | const totalPages = ref(0); |
| | | const pageSize = ref(1); |
| | | const currentPage = ref(''); |
| | | const realwidth = ref(''); |
| | | const realheight = ref(''); |
| | | const disabled = false; |
| | | const size = 'small'; |
| | | const rawData = ref([]); |
| | | // 显示对话框并设置当前 glassId |
| | | const currentGlassRect = computed(() => { |
| | | return adjustedRects.value.find(rect => rect.glassId === currentGlassId.value); |
| | | }); |
| | | function showDialog(glassId: number) { |
| | | currentGlassId.value = glassId; |
| | | blind.value = true; |
| | | adjustedRects.value = adjustedRects.value.map(rect => |
| | | rect.glassId === glassId ? { ...rect, isActive: true } : rect |
| | | ); |
| | | } |
| | | const handleDialogClose = () => { |
| | | adjustedRects.value = adjustedRects.value.map(rect => ({ |
| | | ...rect, |
| | | isActive: false |
| | | })); |
| | | } |
| | | // 破损 |
| | | const handleDamage = async () => { |
| | | try { |
| | | const response = await request.post('/cacheGlass/taskCache/identControls', { |
| | | glassId: currentGlassId.value, |
| | | state: 8, |
| | | line: patternSequence.value, |
| | | remark: '掰片', |
| | | workingProcedure: '切割', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blind.value = false; |
| | | patternSequence.value = '' |
| | | updateRectStatus(currentGlassId.value, 8); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | catch (error) { |
| | | // 处理错误 |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 人工拿走 |
| | | const handleManualTake = async () => { |
| | | try { |
| | | const response = await request.post('/cacheGlass/taskCache/identControls', { |
| | | glassId: currentGlassId.value, |
| | | state: 9, |
| | | line: patternSequence.value, |
| | | workingProcedure: '切割', |
| | | remark: '掰片', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blind.value = false; |
| | | patternSequence.value = '' |
| | | updateRectStatus(currentGlassId.value, 9); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | const sethistorical = async () => { |
| | | var url="/cacheGlass/taskCache/queryCutDrawingByEngineerId?engineerId="+engineerId.value+ "&patternSequence=" + 1; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | const rawRects = response.data.currentCutDrawing; |
| | | rawData.value = response.data; |
| | | totalPages.value = response.data.totalPatternSequence; |
| | | realwidth.value = response.data.upPattenUsage.width; |
| | | realheight.value = response.data.upPattenUsage.height; |
| | | const realx = realwidth.value; |
| | | const realy = realheight.value; |
| | | const scaleFactor = 1621.78/realx; |
| | | const scaleFactory = 750/realy; |
| | | adjustedRects.value = rawRects.map(rect => ({ |
| | | ...rect, |
| | | xaxisa: rect.xaxis * scaleFactor, |
| | | yaxisa: (realy - (rect.yaxis + rect.edgHeight )) * scaleFactory, |
| | | width: rect.edgWidth * scaleFactor, |
| | | widtha: rect.edgWidth, |
| | | heighta: rect.edgHeight , |
| | | height: rect.edgHeight * scaleFactory, |
| | | state: rect.state |
| | | })); |
| | | currentPage.value = 1; |
| | | } |
| | | }; |
| | | const handleCurrentChange = async(val: number) => { |
| | | currentPage.value = val; |
| | | var url="/cacheGlass/taskCache/queryCutDrawingByEngineerId?engineerId="+engineerId.value+ "&patternSequence=" + currentPage.value; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | const rawRects = response.data.currentCutDrawing; |
| | | rawData.value = response.data; |
| | | realwidth.value = response.data.upPattenUsage.width; |
| | | realheight.value = response.data.upPattenUsage.height; |
| | | const realx = realwidth.value; |
| | | const realy = realheight.value; |
| | | const scaleFactor = 1621.78/realx; |
| | | const scaleFactory = 750/realy; |
| | | adjustedRects.value = rawRects.map(rect => ({ |
| | | ...rect, |
| | | xaxisa: rect.xaxis * scaleFactor, |
| | | yaxisa: (realy - (rect.yaxis + rect.edgHeight )) * scaleFactory, |
| | | width: rect.edgWidth * scaleFactor, |
| | | widtha: rect.edgWidth, |
| | | heighta: rect.edgHeight, |
| | | height: rect.edgHeight * scaleFactory, |
| | | state: rect.state |
| | | })); |
| | | } |
| | | }; |
| | | function getRectColor(state: number): string { |
| | | switch (state) { |
| | | case 0: |
| | | return '#7AC5CD'; |
| | | case 1: |
| | | return '#95d475'; |
| | | case -1: |
| | | return '#99BBFF'; |
| | | case 2: |
| | | return 'lightblue'; |
| | | case 3: |
| | | return '#eebe77'; |
| | | case 4: |
| | | return '#CD6090'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | default: |
| | | return '#CDAF95'; |
| | | } |
| | | } |
| | | const optionsb = [ |
| | | { |
| | | value: 1, |
| | | label: t('sorter.onesort'), |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: t('sorter.twosort'), |
| | | }, |
| | | ] |
| | | // 更新矩形状态 |
| | | function updateRectStatus(glassId: string, status: number) { |
| | | adjustedRects.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = status; // 更新矩形的状态 |
| | | } |
| | | }); |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .rect { |
| | | border: 1px solid black; /* 设置矩形的边框 */ |
| | | } |
| | | .centered-text { |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 100%; |
| | | /* font-size: large; */ |
| | | } |
| | | #rect { |
| | | position: relative; /* 确保箭头可以相对于矩形定位 */ |
| | | } |
| | | |
| | | #arrow { |
| | | position: absolute; |
| | | top: 70%; /* 箭头位于矩形中间 */ |
| | | left: 200px; /* 箭头在矩形左侧一些距离 */ |
| | | transform: translateY(-50%); /* 垂直居中 */ |
| | | width: 0; |
| | | height: 0; |
| | | border-top: 10px solid transparent; /* 上边框 */ |
| | | border-bottom: 10px solid transparent; /* 下边框 */ |
| | | border-right: 20px solid #911005; /* 右边框,形成箭头 */ |
| | | } |
| | | |
| | | #line { |
| | | position: absolute; |
| | | top: 70%; /* 直线位于矩形中间 */ |
| | | left: 210px; /* 直线在箭头右侧一些距离 */ |
| | | transform: translateY(-50%); /* 垂直居中 */ |
| | | height: 2px; /* 直线的高度 */ |
| | | width: 240px; /* 直线的长度,根据需要调整 */ |
| | | background-color: #911005; /* 直线的颜色 */ |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import {onMounted, onUnmounted, reactive, ref} from 'vue' |
| | | import {useRoute, useRouter} from 'vue-router' |
| | | import type {FormInstance, FormRules} from 'element-plus' |
| | | import {ElMessage} from 'element-plus' |
| | | import request from '@/utils/request' |
| | | import userInfo from '@/stores/userInfo' |
| | | import { useI18n } from 'vue-i18n' |
| | | const store = userInfo() |
| | | let ruleFormRef = ref<FormInstance>() |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | | const { t } = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const changeLanguage = () =>{ |
| | | localStorage.setItem('lang',language.value) |
| | | location.reload() |
| | | } |
| | | const userForm = reactive({ |
| | | userName: '', |
| | | password: '', |
| | | }) |
| | | if (typeof route.query.id != 'undefined') { |
| | | userForm.userId = <string>route.query.id |
| | | } |
| | | const validateUser = (rule: any, value: any, callback: any) => { |
| | | if (value === '') { |
| | | callback(new Error(t('login.userErr'))) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | const validatePass = (rule: any, value: any, callback: any) => { |
| | | if (value === '') { |
| | | callback(new Error(t('login.pwErr'))) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | const rules = reactive<FormRules<typeof userForm>>({ |
| | | userId: [{validator: validateUser, trigger: 'blur'}], |
| | | pass: [{validator: validatePass, trigger: 'blur'}], |
| | | }) |
| | | //登陆方法 |
| | | const submitForm = (formEl: FormInstance | undefined) => { |
| | | store.$patch({ |
| | | user: null, |
| | | }) |
| | | if (!formEl) return |
| | | formEl.validate((valid) => { |
| | | if (valid) { |
| | | loginLoadings.value = true |
| | | request |
| | | // .post('/loadGlass/userinfo/login', userForm) |
| | | .post('/loadGlass/sys/user/login', userForm) |
| | | .then((res) => { |
| | | if (res['code'] == 200) { |
| | | store.$patch({user: res.data}) |
| | | router.push('/main') |
| | | ElMessage.success(t('login.loginSuccessful')) |
| | | } else { |
| | | // ElMessage.error(res['msg']) |
| | | store.$patch({ |
| | | user: null, |
| | | }) |
| | | loginLoadings.value = false |
| | | return false |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | ElMessage.error(t('main.connectErr')) |
| | | store.$patch({ |
| | | user: null, |
| | | }) |
| | | loginLoadings.value = false |
| | | return false |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | function register() { |
| | | router.push({ |
| | | path: '/register', |
| | | }) |
| | | } |
| | | let loginLoadings = ref(false) |
| | | let registerLoadings = ref(false) |
| | | const keyDown = (e) => { |
| | | // 回车则执行登录方法 enter键的ASCII是13 |
| | | if (e.keyCode == 13 || e.keyCode == 100) { |
| | | submitForm(ruleFormRef.value) |
| | | } |
| | | } |
| | | onMounted(() => { |
| | | window.addEventListener('keydown', keyDown) |
| | | }) |
| | | onUnmounted(() => { |
| | | window.removeEventListener('keydown', keyDown) |
| | | }) |
| | | </script> |
| | | <template> |
| | | <div class="mainDiv"> |
| | | <div id="main-login"> |
| | | <!-- <img |
| | | style="width: 100%; height: 99vh" |
| | | src="../../src/assets/background.jpg" |
| | | /> --> |
| | | <div> |
| | | <div style="position: absolute; left: 8vw; top: 6vw; "> |
| | | <img src="../../src/assets/3.png"> |
| | | </div> |
| | | <div style="position: absolute; left: 15vw; top: 22vw; font-size: 55px;color: rgba(29, 33, 41, 1);"> |
| | | {{ $t('northglassMESsystem') }} |
| | | </div> |
| | | </div> |
| | | <div id="div-login"> |
| | | <!--语言切换按钮--> |
| | | <el-select |
| | | @change="changeLanguage" |
| | | v-model="language" |
| | | placeholder=" " |
| | | style="float: right;width: 9rem"> |
| | | <el-option value="zh" label="中文" /> |
| | | <el-option value="py" label="Русский язык" /> |
| | | <el-option value="en" label="English" /> |
| | | </el-select> |
| | | <el-form @submit.native.prevent |
| | | ref="ruleFormRef" |
| | | :model="userForm" |
| | | status-icon |
| | | :rules="rules"> |
| | | <div id="center"> |
| | | <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">{{ $t('login.user') }}</div> |
| | | <el-form-item prop="userId"> |
| | | <el-input style="width: 340px;" |
| | | v-model="userForm.userName" |
| | | type="text" |
| | | autocomplete="off" |
| | | :prefix-icon="Avatar" |
| | | :placeholder="$t('login.userErr')"/> |
| | | </el-form-item> |
| | | <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">{{ $t('login.password') }}</div> |
| | | <el-form-item prop="pass"> |
| | | <el-input style="width: 340px;" |
| | | v-model="userForm.password" |
| | | type="password" |
| | | autocomplete="off" |
| | | :prefix-icon="Lock" |
| | | show-password |
| | | :placeholder="$t('login.pwErr')" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item id="submitForm"> |
| | | <el-button :loading="loginLoadings" |
| | | type="primary" |
| | | native-type="submit" |
| | | style="width: 80px;" |
| | | @click="submitForm(ruleFormRef)" |
| | | @keyup.enter.native="keyDown(e)" |
| | | plain>{{ $t('login.login') }} |
| | | </el-button> |
| | | <!-- <el-button :loading="registerLoadings" |
| | | type="primary" |
| | | @click="register" |
| | | plain>{{ $t('login.register') }} |
| | | </el-button> --> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | .mainDiv { |
| | | overflow: hidden; |
| | | min-width: 718px; |
| | | background-image: url('../../src/assets/background.jpg'); |
| | | } |
| | | #main-login { |
| | | margin: 150px auto 0 auto; |
| | | height: 70vh; |
| | | width: 80vw; |
| | | } |
| | | #img-div { |
| | | width: 55%; |
| | | height: 100%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | float: left; |
| | | } |
| | | #img-pic { |
| | | max-height: 90%; |
| | | max-width: 100%; |
| | | } |
| | | #div-login { |
| | | margin-top: 5%; |
| | | /* margin-top: 20%; */ |
| | | /* margin-left: 650px; */ |
| | | background-color: #fff; |
| | | float: right; |
| | | width: 40%; |
| | | height: 60%; |
| | | min-width: 318px; |
| | | border-radius: 4px; |
| | | box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0), 0 6px 5px 0 rgba(0, 0, 0, 0.19); |
| | | } |
| | | #center { |
| | | margin-top: -30px; |
| | | } |
| | | .el-form { |
| | | width: 60%; |
| | | margin: 20% auto auto; |
| | | } |
| | | #submitForm { |
| | | display: flex; |
| | | justify-content: space-evenly; |
| | | margin-top: 2rem; |
| | | } |
| | | :deep(.el-form-item__content) { |
| | | flex: unset; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div> |
| | | <div style="display: flex;"> |
| | | <div style="margin-left: 50px;margin-top: 15px;font-size:large">工程号:</div> |
| | | <el-input v-model="current" style="margin-left: 20px;margin-top: 15px;width: 240px" placeholder="请输入工程号" @input="updateUrl"/> |
| | | <el-button style="margin-top: 15px;margin-left: 15px;" type="primary" @click="fetchData">查询</el-button> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 400px;margin-top: 50px;margin-right: 10px;width: 1100px;" height="900" > |
| | | <div v-for="(row, rowIndex) in divsData" :key="rowIndex" class="row"> |
| | | <div v-for="(rect, colIndex) in row" :key="colIndex" class="div-container"> |
| | | <div style="text-align: center;">炉号:{{ getAdjustedRectsForRow(rowIndex)[0].layout_id }} ---- 装载率:{{ getAdjustedRectsForRow(rowIndex)[0].olLayoutRate }}</div> |
| | | <el-scrollbar height="550px" width="1000px" 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: 'lightblue'}"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.sort }}</div> |
| | | <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; |
| | | 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; |
| | | processData(rawData.value); |
| | | } else { |
| | | } |
| | | } catch (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; |
| | | processData(rawData.value); |
| | | } |
| | | } catch (error) { |
| | | } finally { |
| | | loading.value = false; |
| | | } |
| | | }; |
| | | function processData(data) { |
| | | const groupedData = []; |
| | | for (let i = 0; i < data.length; i += 1) { |
| | | groupedData.push(data.slice(i, i + 1)); |
| | | } |
| | | divsData.value = groupedData; |
| | | const rowIndex = divsData.value; |
| | | adjustedRectsPerRow.value = divsData.value.map(() => []); |
| | | divsData.value.forEach((row, rowIndex) => { |
| | | const rawRowData = rawData.value[rowIndex].listGlass; |
| | | if (rawRowData) { |
| | | adjustedRectsPerRow.value[rowIndex] = rawRowData.map(rect => { |
| | | let adjustedWidth, adjustedHeight,newX,widtha,heighta; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | | heighta = rect.width; |
| | | }else { |
| | | widtha = rect.width; |
| | | heighta = rect.height; |
| | | } |
| | | if (rect.rotate_angle === 90) { |
| | | newX = rect.olHeight -(rect.y_axis + heighta); |
| | | adjustedWidth = heighta * (1000/rect.olHeight); |
| | | adjustedHeight = widtha * (550/rect.olWidth); |
| | | } else { |
| | | newX = rect.olHeight -(rect.y_axis + widtha); |
| | | adjustedWidth = widtha * (1000/rect.olHeight); |
| | | adjustedHeight = heighta * (550/rect.olWidth); |
| | | } |
| | | let adjustedRect = { |
| | | ...rect, |
| | | y_axis: rect.x_axis * (550/rect.olWidth), |
| | | x_axis: newX * (1000/rect.olHeight), |
| | | width: adjustedWidth, |
| | | height: adjustedHeight, |
| | | widtha: rect.width, |
| | | heighta: rect.height, |
| | | }; |
| | | return adjustedRect; |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | // 方法用于获取当前行的adjustedRects |
| | | function getAdjustedRectsForRow(rowIndex) { |
| | | return adjustedRectsPerRow.value[rowIndex] || []; |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .row { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-bottom: 20px; |
| | | } |
| | | .div-container { |
| | | width: 1000px; |
| | | float: left; |
| | | background-color: #f4f4f5; |
| | | height: 550px; |
| | | box-sizing: border-box; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import {Search} from "@element-plus/icons-vue"; |
| | | import {reactive} from "vue"; |
| | | import {useRouter} from "vue-router" |
| | | const router = useRouter() |
| | | const value1 = ref(true) |
| | | const add = ref(false) |
| | | const adda = ref(false) |
| | | import { ref } from 'vue' |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | |
| | | const changer = ref(false) |
| | | |
| | | const tableData = [ |
| | | { |
| | | id: '1', |
| | | long: '1005', |
| | | wide: '183.6', |
| | | thick: '1991', |
| | | time: '2024/4/1', |
| | | typea: '1', |
| | | }, |
| | | { |
| | | id: '2', |
| | | long: '105', |
| | | wide: '183', |
| | | thick: '191', |
| | | time: '2024/4/1', |
| | | typea: '1', |
| | | type: '待识别' |
| | | }, |
| | | { |
| | | id: '2', |
| | | time: '2024/4/1', |
| | | long: '105', |
| | | wide: '183', |
| | | thick: '191', |
| | | typea: '1', |
| | | type: '待识别' |
| | | }, |
| | | ] |
| | | |
| | | const data= reactive({ |
| | | tableList:[]//table数据 |
| | | }) |
| | | |
| | | const beforeChange = () => { |
| | | return new Promise((resolve) => { |
| | | setTimeout(() => { |
| | | ElMessage.success("修改成功!"); |
| | | return resolve(true); |
| | | }, 1000); |
| | | }); |
| | | }; |
| | | const open = () => { |
| | | ElMessageBox.confirm( |
| | | '是否删除该条信息?', |
| | | '提示', |
| | | { |
| | | confirmButtonText: '是', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | } |
| | | ) |
| | | .then(() => { |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '删除成功!', |
| | | }) |
| | | }) |
| | | .catch(() => { |
| | | ElMessage({ |
| | | type: 'info', |
| | | message: '删除失败', |
| | | }) |
| | | }) |
| | | } |
| | | const getTableRow = (row,type) =>{ |
| | | switch (type) { |
| | | case 'edit' :{ |
| | | //alert('我接收到子组件传送的编辑信息') |
| | | router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }}) |
| | | break |
| | | } |
| | | case 'delete':{ |
| | | alert('我接收到子组件传送的删除信息') |
| | | break |
| | | } |
| | | } |
| | | } |
| | | const dialogForm = () => { |
| | | ElMessageBox.confirm( |
| | | '是否重置密码?', |
| | | '提示', |
| | | { |
| | | confirmButtonText: '是', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | } |
| | | ) |
| | | .then(() => { |
| | | // this.boxa = true |
| | | // this.box = false |
| | | |
| | | }) |
| | | } |
| | | const empty = [ |
| | | { id: '', |
| | | long: '', |
| | | wide: '', |
| | | thick: '', |
| | | type: '', |
| | | typea: '',} |
| | | |
| | | ] |
| | | const options = [ |
| | | { |
| | | value: 'Option1', |
| | | label: 'admin', |
| | | }, |
| | | { |
| | | value: 'Option2', |
| | | label: 'ueser2', |
| | | }, |
| | | { |
| | | value: 'Option3', |
| | | label: 'ueser3', |
| | | }, |
| | | ] |
| | | const optionsa = [ |
| | | { |
| | | valuea: 'Option1', |
| | | labela: '正常', |
| | | }, |
| | | { |
| | | valuea: 'Option2', |
| | | labela: '禁用', |
| | | }, |
| | | ] |
| | | // const delete = () => { |
| | | // ElMessageBox.confirm( |
| | | // '是否删除该条信息?', |
| | | // '提示', |
| | | // { |
| | | // confirmButtonText: '是', |
| | | // cancelButtonText: '取消', |
| | | // type: 'warning', |
| | | // } |
| | | // ) |
| | | // .then(() => { |
| | | |
| | | // }) |
| | | // } |
| | | const gridOptions = reactive({ |
| | | border: "full",//表格加边框 |
| | | keepSource: true,//保持源数据 |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮 |
| | | id: 'OrderList', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | | exportConfig: {}, |
| | | scrollY:{ enabled: true },//开启虚拟滚动 |
| | | showOverflow:true, |
| | | columnConfig: { |
| | | resizable: true, |
| | | useKey: true |
| | | }, |
| | | filterConfig: { //筛选配置项 |
| | | remote: true |
| | | }, |
| | | customConfig: { |
| | | storage: true |
| | | }, |
| | | editConfig: { |
| | | trigger: 'click', |
| | | mode: 'row', |
| | | showStatus: true |
| | | }, |
| | | data: [ |
| | | { |
| | | 'id': '1', |
| | | 'long': '5', |
| | | 'wide': '1005', |
| | | 'thick': '183.6', |
| | | } |
| | | ], |
| | | }) |
| | | |
| | | </script> |
| | | |
| | | <template> |
| | | <div> |
| | | <el-button type="primary" style="margin-top: 10px;margin-left: 10px;" id="searchButton" @click="add = true">添加权限</el-button> |
| | | <el-input |
| | | clearable |
| | | placeholder="请输入关键字" |
| | | style="margin-right: 20px; width: 200px;margin-left: 10px;margin-top: 10px;" |
| | | /> |
| | | <el-button type="primary" @click="searchSubmit" style="margin-top: 10px;">查询</el-button > |
| | | <el-button type="primary" @click="empty" style="margin-top: 10px;">清空</el-button> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" > |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;"> |
| | | <el-table height="100%" ref="table" |
| | | @selection-change="handleSelectionChange" |
| | | :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="id" align="center" label="角色" min-width="80" /> |
| | | <el-table-column prop="long" align="center" label="权限描述" min-width="120" /> |
| | | <el-table-column prop="wide" align="center" label="权限值" min-width="120" /> |
| | | <el-table-column prop="time" align="center" label="创建时间" min-width="120" /> |
| | | <el-table-column align="center" prop="changer" label="是否激活" min-width="140"> |
| | | <template #default="scope"> |
| | | <el-switch v-model="scope.row.changer" :before-change="beforeChange" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="操作" align="center" width="200"> |
| | | <template #default> |
| | | <el-button type="text" plain @click="adda = true">编辑</el-button> |
| | | <el-button type="text" plain @click="delete">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | |
| | | </div> |
| | | |
| | | <el-dialog v-model="add" top="23vh" width="37%" title="添加权限" > |
| | | <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> |
| | | <el-form label-width="150px"> |
| | | <el-form label-width="100px" label-position="right"> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item label="角色:" :required="true" style="width: 25vw;"> |
| | | <el-select |
| | | v-model="value" |
| | | clearable |
| | | placeholder="请选择角色" |
| | | style="width: 330px" |
| | | > |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item></div></div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item label="权限:" :required="true" style="width: 25vw;"> |
| | | <el-select |
| | | v-model="value" |
| | | clearable |
| | | placeholder="请选择权限" |
| | | style="width: 330px" |
| | | > |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item></div></div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item label="是否激活" :required="true" style="width: 25vw;"> |
| | | <el-select |
| | | v-model="value" |
| | | clearable |
| | | placeholder="请选择是否激活" |
| | | style="width: 330px" |
| | | > |
| | | <el-option |
| | | v-for="item in optionsa" |
| | | :key="item.valuea" |
| | | :label="item.labela" |
| | | :value="item.valuea" |
| | | /> |
| | | </el-select> |
| | | </el-form-item></div></div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </el-form> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="getTableRow('edit')"> |
| | | 确认 |
| | | </el-button> |
| | | <el-button @click="add = false">取消</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="adda" top="23vh" width="37%" title="修改权限" > |
| | | <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> |
| | | <el-form label-width="150px"> |
| | | <el-form label-width="100px" label-position="right"> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item label="角色:" :required="true" style="width: 25vw;"> |
| | | <el-select |
| | | v-model="value" |
| | | clearable |
| | | placeholder="请选择角色" |
| | | style="width: 330px" |
| | | > |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item></div></div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item label="权限:" :required="true" style="width: 25vw;"> |
| | | <el-select |
| | | v-model="value" |
| | | clearable |
| | | placeholder="请选择权限" |
| | | style="width: 330px" |
| | | > |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item></div></div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px;"> |
| | | <el-col :span="6"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <div> |
| | | <el-form-item label="是否激活" :required="true" style="width: 25vw;"> |
| | | <el-select |
| | | v-model="value" |
| | | clearable |
| | | placeholder="请选择是否激活" |
| | | style="width: 330px" |
| | | > |
| | | <el-option |
| | | v-for="item in optionsa" |
| | | :key="item.valuea" |
| | | :label="item.labela" |
| | | :value="item.valuea" |
| | | /> |
| | | </el-select> |
| | | </el-form-item></div></div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </el-form> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="getTableRow('edit')"> |
| | | 确认 |
| | | </el-button> |
| | | <el-button @click="adda = false">取消</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | |
| | | #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} |
| | | #dta { display:block; float:left;line-height: 20px;margin-left: 80%;} |
| | | #dialog-footer{ |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | #message{ |
| | | text-align: center; |
| | | align-items: center; |
| | | color: black; |
| | | width: 200px; |
| | | height: 100px; |
| | | background-color: #337ecc; |
| | | margin-left: 28%; |
| | | } |
| | | #awatch{ |
| | | height: 450px; |
| | | } |
| | | #main-body{ |
| | | margin-top: -20px; |
| | | margin-left: 300px; |
| | | } |
| | | #main-bodya{ |
| | | margin-top: -10px; |
| | | margin-left: 100px; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script setup> |
| | | import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue" |
| | | import {useRouter} from "vue-router"; |
| | | let indexFlag=$ref(1) |
| | | function changeRouter(index){ |
| | | indexFlag=index |
| | | } |
| | | </script> |
| | | <template> |
| | | <div id="main-body"> |
| | | <router-view /> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | #main-div{ |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | #div-title{ |
| | | height: 2%; |
| | | width: 100%; |
| | | } |
| | | #searchButton{ |
| | | margin-top: -5px; |
| | | margin-left: 1rem; |
| | | } |
| | | #main-body{ |
| | | width: 100%; |
| | | height: 95%; |
| | | /* margin-top: 1%; */ |
| | | } |
| | | #select{ |
| | | margin-left:0.5rem; |
| | | } |
| | | :deep(.indexTag .el-breadcrumb__inner){ |
| | | color: #5CADFE !important; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script setup lang="ts"> |
| | | import {nextTick, onBeforeUnmount, onMounted, ref} from "vue"; |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {ElMessage} from 'element-plus' |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {useI18n} from 'vue-i18n' |
| | | import {useRouter} from 'vue-router' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const dialogFormVisible = ref(false) |
| | | const dialogFormVisiblea = ref(true) |
| | | const dialogFormVisibleb = ref(false) |
| | | const blind1 = ref(false) |
| | | const blind2 = ref(false) |
| | | const blinda = ref(false) |
| | | const blindb = ref(false) |
| | | const dialogVisible = ref(false) |
| | | const width = ref(); |
| | | const height = ref(); |
| | | const currentRect = ref(null); |
| | | const canSelectProject1 = ref(true); |
| | | const canSelectProject2 = ref(true); |
| | | const canSelectProjecta = ref(true); |
| | | const cantakea = ref(true); |
| | | const cantakeb = ref(true); |
| | | const canona = ref(true); |
| | | const canonb = ref(true); |
| | | const canSelectProjectb = ref(true); |
| | | const adjustedRects1 = ref([]); |
| | | const adjustedRects2 = ref([]); |
| | | const adjustedRectsa = ref([]); |
| | | const adjustedRectsb = ref([]); |
| | | const currentPage = ref<number>(1); |
| | | const tableData = ref([]) |
| | | const engineerId = ref('') |
| | | const router = useRouter() |
| | | const currentGlassId = ref(null); |
| | | const currenttemperingFeedSequence = ref(null); |
| | | onMounted(async () => { |
| | | try { |
| | | const response = await request.post('/loadGlass/damage/selectDamagePrint', { |
| | | type: 9, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code === 200) { |
| | | tableData.value = response.data |
| | | } else { |
| | | ElMessage.warning(response.message) |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }); |
| | | // 方法定义 |
| | | function handlePageChange(page: number) { |
| | | currentPage.value = page; |
| | | } |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`; |
| | | const handleMessage = (data) => { |
| | | // 进炉中右 |
| | | if (data.intoGlass2 && data.intoGlass2.length > 0) { |
| | | const newGlassIds = new Set(data.intoGlass2[0].map(rect => rect.glassId)); |
| | | const existingRects = adjustedRects2.value.filter(rect => newGlassIds.has(rect.glassId)); |
| | | const newRects = data.intoGlass2[0].map(rect => { |
| | | const scaleFactor = 1621.78/6000; |
| | | const scaleFactorY = 700/2800; |
| | | let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; |
| | | let newX = rect.yCoordinate; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | | heighta = rect.width; |
| | | }else { |
| | | widtha = rect.width; |
| | | heighta = rect.height; |
| | | } |
| | | if (rect.angle === 0) { |
| | | adjustedWidth = widtha * scaleFactor; |
| | | adjustedHeight = heighta * scaleFactorY; |
| | | // adjustedWidtha = widtha; |
| | | // adjustedHeighta = heighta; |
| | | newX = 6000 - (rect.yCoordinate + widtha); |
| | | } else { |
| | | adjustedWidth = heighta * scaleFactor; |
| | | adjustedHeight = widtha * scaleFactorY; |
| | | // adjustedWidtha = widtha; |
| | | // adjustedHeighta = heighta; |
| | | newX = 6000 - (rect.yCoordinate + heighta); |
| | | } |
| | | return { |
| | | ...rect, |
| | | x: newX * scaleFactor, |
| | | y: rect.xCoordinate * scaleFactorY, |
| | | width: adjustedWidth, |
| | | height: adjustedHeight, |
| | | widtha: rect.width, |
| | | heighta: rect.height, |
| | | } |
| | | }); |
| | | // 合并新旧矩形,并保留 isActive 状态 |
| | | adjustedRects2.value = existingRects.map(oldRect => { |
| | | const newRect = newRects.find(r => r.glassId === oldRect.glassId); |
| | | if (newRect) { |
| | | return { ...oldRect, ...newRect, isActive: oldRect.isActive }; |
| | | } |
| | | return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样 |
| | | }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId))); |
| | | } |
| | | // if (data.intoGlass2 && data.intoGlass2.length > 0) { |
| | | // // 提取新的矩形ID |
| | | // const newGlassIds = new Set(data.intoGlass2[0].map(rect => rect.glassId)); |
| | | // // 过滤出已存在的矩形 |
| | | // const existingRects = adjustedRects2.value.filter(rect => newGlassIds.has(rect.glassId)); |
| | | // // 计算新的矩形 |
| | | // const newRects = data.intoGlass2[0].map(rect => { |
| | | // const scaleFactor = 794.67/5087; |
| | | // const scaleFactorY = 430/2800; |
| | | // let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta; |
| | | // let newX = rect.yCoordinate; |
| | | // if (rect.width < rect.height) { |
| | | // widtha = rect.height; |
| | | // heighta = rect.width; |
| | | // }else { |
| | | // widtha = rect.width; |
| | | // heighta = rect.height; |
| | | // } |
| | | // if (rect.angle === 0) { |
| | | // adjustedWidth = widtha * scaleFactor; |
| | | // adjustedHeight = heighta * scaleFactorY; |
| | | // // adjustedWidtha = widtha; |
| | | // // adjustedHeighta = heighta; |
| | | // newX = 5087 - (rect.yCoordinate + widtha); |
| | | // } else { |
| | | // adjustedWidth = heighta * scaleFactor; |
| | | // adjustedHeight = widtha * scaleFactorY; |
| | | // // adjustedWidtha = widtha; |
| | | // // adjustedHeighta = heighta; |
| | | // newX = 5087 - (rect.yCoordinate + heighta); |
| | | // } |
| | | // return { |
| | | // ...rect, |
| | | // xcoordinate: newX * scaleFactor, |
| | | // ycoordinate: rect.xCoordinate * scaleFactorY, |
| | | // width: adjustedWidth, |
| | | // height: adjustedHeight, |
| | | // widtha: rect.width, |
| | | // heighta: rect.height, |
| | | // } |
| | | // }); |
| | | // // 合并新旧矩形,并保留 isActive 状态 |
| | | // adjustedRects2.value = existingRects.map(oldRect => { |
| | | // const newRect = newRects.find(r => r.glassId === oldRect.glassId); |
| | | // if (newRect) { |
| | | // return { ...oldRect, ...newRect, isActive: oldRect.isActive }; |
| | | // } |
| | | // return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样 |
| | | // }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId))); |
| | | // } |
| | | else if (data.intoGlass2 == null) { |
| | | adjustedRects2.value = [] |
| | | } |
| | | // 进炉中左 |
| | | if (data.intoGlass && data.intoGlass.length > 0) { |
| | | const newGlassIds = new Set(data.intoGlass[0].map(rect => rect.glassId)); |
| | | const existingRects = adjustedRects1.value.filter(rect => newGlassIds.has(rect.glassId)); |
| | | const newRects = data.intoGlass[0].map(rect => { |
| | | const scaleFactor = 1621.78/6000; |
| | | const scaleFactorY = 700/2800; |
| | | let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; |
| | | let newX = rect.yCoordinate; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | | heighta = rect.width; |
| | | }else { |
| | | widtha = rect.width; |
| | | heighta = rect.height; |
| | | } |
| | | if (rect.angle === 0) { |
| | | adjustedWidth = widtha * scaleFactor; |
| | | adjustedHeight = heighta * scaleFactorY; |
| | | // adjustedWidtha = widtha; |
| | | // adjustedHeighta = heighta; |
| | | newX = 6000 - (rect.yCoordinate + widtha); |
| | | } else { |
| | | adjustedWidth = heighta * scaleFactor; |
| | | adjustedHeight = widtha * scaleFactorY; |
| | | // adjustedWidtha = widtha; |
| | | // adjustedHeighta = heighta; |
| | | newX = 6000 - (rect.yCoordinate + heighta); |
| | | } |
| | | return { |
| | | ...rect, |
| | | x: newX * scaleFactor, |
| | | y: rect.xCoordinate * scaleFactorY, |
| | | width: adjustedWidth, |
| | | height: adjustedHeight, |
| | | widtha: rect.width, |
| | | heighta: rect.height, |
| | | } |
| | | }); |
| | | // 合并新旧矩形,并保留 isActive 状态 |
| | | adjustedRects1.value = existingRects.map(oldRect => { |
| | | const newRect = newRects.find(r => r.glassId === oldRect.glassId); |
| | | if (newRect) { |
| | | return { ...oldRect, ...newRect, isActive: oldRect.isActive }; |
| | | } |
| | | return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样 |
| | | }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId))); |
| | | } |
| | | // if (data.intoGlass && data.intoGlass.length > 0) { |
| | | // console.log(data.intoGlass); |
| | | |
| | | // const newGlassIds = new Set(data.intoGlass[0].map(rect => rect.glassId)); |
| | | // const existingRects = adjustedRects1.value.filter(rect => newGlassIds.has(rect.glassId)); |
| | | // const newRects = data.intoGlass[0].map(rect => { |
| | | // const scaleFactor = 810.89/5087; |
| | | // const scaleFactorY = 430/2800; |
| | | // let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta; |
| | | // let newX = rect.yCoordinate; |
| | | // if (rect.width < rect.height) { |
| | | // widtha = rect.height; |
| | | // heighta = rect.width; |
| | | // }else { |
| | | // widtha = rect.width; |
| | | // heighta = rect.height; |
| | | // } |
| | | // if (rect.angle === 0) { |
| | | // adjustedWidth = widtha * scaleFactor; |
| | | // adjustedHeight = heighta * scaleFactorY; |
| | | // // adjustedWidtha = widtha; |
| | | // // adjustedHeighta = heighta; |
| | | // newX = 5087 - (rect.yCoordinate + widtha); |
| | | // } else { |
| | | // adjustedWidth = heighta * scaleFactor; |
| | | // adjustedHeight = widtha * scaleFactorY; |
| | | // // adjustedWidtha = widtha; |
| | | // // adjustedHeighta = heighta; |
| | | // newX = 5087 - (rect.yCoordinate + heighta); |
| | | // } |
| | | // return { |
| | | // ...rect, |
| | | // xcoordinate: newX * scaleFactor, |
| | | // ycoordinate: rect.xCoordinate * scaleFactorY, |
| | | // width: adjustedWidth, |
| | | // height: adjustedHeight, |
| | | // widtha: rect.width, |
| | | // heighta: rect.height, |
| | | // } |
| | | // }); |
| | | // // 合并新旧矩形,并保留 isActive 状态 |
| | | // adjustedRects1.value = existingRects.map(oldRect => { |
| | | // const newRect = newRects.find(r => r.glassId === oldRect.glassId); |
| | | // if (newRect) { |
| | | // return { ...oldRect, ...newRect, isActive: oldRect.isActive }; |
| | | // } |
| | | // return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样 |
| | | // }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId))); |
| | | // } |
| | | else { |
| | | adjustedRects1.value = [] |
| | | } |
| | | // 进炉前 |
| | | if (data.waitingGlass && data.waitingGlass.length > 0) { |
| | | const newGlassIds = new Set(data.waitingGlass[0].map(rect => rect.glassId)); |
| | | const existingRects = adjustedRectsa.value.filter(rect => newGlassIds.has(rect.glassId)); |
| | | const newRects = data.waitingGlass[0].map(rect => { |
| | | const scaleFactor = 1621.78/6000; |
| | | const scaleFactorY = 700/2800; |
| | | let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; |
| | | let newX = rect.yCoordinate; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | | heighta = rect.width; |
| | | }else { |
| | | widtha = rect.width; |
| | | heighta = rect.height; |
| | | } |
| | | if (rect.angle === 0) { |
| | | adjustedWidth = widtha * scaleFactor; |
| | | adjustedHeight = heighta * scaleFactorY; |
| | | // adjustedWidtha = widtha; |
| | | // adjustedHeighta = heighta; |
| | | newX = 6000 - (rect.yCoordinate + widtha); |
| | | } else { |
| | | adjustedWidth = heighta * scaleFactor; |
| | | adjustedHeight = widtha * scaleFactorY; |
| | | // adjustedWidtha = widtha; |
| | | // adjustedHeighta = heighta; |
| | | newX = 6000 - (rect.yCoordinate + heighta); |
| | | } |
| | | return { |
| | | ...rect, |
| | | x: newX * scaleFactor, |
| | | y: rect.xCoordinate * scaleFactorY, |
| | | width: adjustedWidth, |
| | | height: adjustedHeight, |
| | | widtha: rect.width, |
| | | heighta: rect.height, |
| | | } |
| | | }); |
| | | // 合并新旧矩形,并保留 isActive 状态 |
| | | adjustedRectsa.value = existingRects.map(oldRect => { |
| | | const newRect = newRects.find(r => r.glassId === oldRect.glassId); |
| | | if (newRect) { |
| | | return { ...oldRect, ...newRect, isActive: oldRect.isActive }; |
| | | } |
| | | return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样 |
| | | }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId))); |
| | | } |
| | | else if (data.waitingGlass == null) { |
| | | adjustedRectsa.value = [] |
| | | } |
| | | // 已出炉 |
| | | if (data.outGlass && data.outGlass.length > 0) { |
| | | const newGlassIds = new Set(data.outGlass[0].map(rect => rect.glassId)); |
| | | const existingRects = adjustedRectsb.value.filter(rect => newGlassIds.has(rect.glassId)); |
| | | const newRects = data.outGlass[0].map(rect => { |
| | | const scaleFactor = 1621.78/6000; |
| | | const scaleFactorY = 700/2800; |
| | | let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; |
| | | let newX = rect.yCoordinate; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | | heighta = rect.width; |
| | | }else { |
| | | widtha = rect.width; |
| | | heighta = rect.height; |
| | | } |
| | | if (rect.angle === 0) { |
| | | adjustedWidth = widtha * scaleFactor; |
| | | adjustedHeight = heighta * scaleFactorY; |
| | | // adjustedWidtha = widtha; |
| | | // adjustedHeighta = heighta; |
| | | newX = 6000 - (rect.yCoordinate + widtha); |
| | | } else { |
| | | adjustedWidth = heighta * scaleFactor; |
| | | adjustedHeight = widtha * scaleFactorY; |
| | | // adjustedWidtha = widtha; |
| | | // adjustedHeighta = heighta; |
| | | newX = 6000 - (rect.yCoordinate + heighta); |
| | | } |
| | | return { |
| | | ...rect, |
| | | x: newX * scaleFactor, |
| | | y: rect.xCoordinate * scaleFactorY, |
| | | width: adjustedWidth, |
| | | height: adjustedHeight, |
| | | widtha: rect.width, |
| | | heighta: rect.height, |
| | | } |
| | | }); |
| | | // 合并新旧矩形,并保留 isActive 状态 |
| | | adjustedRectsb.value = existingRects.map(oldRect => { |
| | | const newRect = newRects.find(r => r.glassId === oldRect.glassId); |
| | | if (newRect) { |
| | | return { ...oldRect, ...newRect, isActive: oldRect.isActive }; |
| | | } |
| | | return oldRect; |
| | | }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId))); |
| | | } |
| | | // if (data.outGlass && data.outGlass.length > 0) { |
| | | // // 提取新的矩形ID |
| | | // const newGlassIds = new Set(data.outGlass[0].map(rect => rect.glassId)); |
| | | // // 过滤出已存在的矩形 |
| | | // const existingRects = adjustedRectsb.value.filter(rect => newGlassIds.has(rect.glassId)); |
| | | // // 计算新的矩形 |
| | | // const newRects = data.outGlass[0].map(rect => { |
| | | // const scaleFactor = 1390/6000; |
| | | // const scaleFactory = 750/2800; |
| | | // let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta,newY; |
| | | // let newX = rect.yCoordinate; |
| | | // if (rect.width < rect.height) { |
| | | // widtha = rect.height; |
| | | // heighta = rect.width; |
| | | // }else { |
| | | // widtha = rect.width; |
| | | // heighta = rect.height; |
| | | // } |
| | | // if (rect.angle === 0) { |
| | | // adjustedWidth = widtha * scaleFactor; |
| | | // adjustedHeight = heighta * scaleFactory; |
| | | // // adjustedWidtha = widtha; |
| | | // // adjustedHeighta = heighta; |
| | | // // newX = 5190 - (rect.yCoordinate + widtha); |
| | | // newY = 2800 - (rect.xCoordinate + heighta); |
| | | // } else { |
| | | // adjustedWidth = heighta * scaleFactor; |
| | | // adjustedHeight = widtha * scaleFactory; |
| | | // // adjustedWidtha = heighta; |
| | | // // adjustedHeighta = widtha; |
| | | // // newX = 5190 - (rect.yCoordinate + heighta); |
| | | // newY = 2800 - (rect.xCoordinate + widtha); |
| | | // } |
| | | // return { |
| | | // ...rect, // 复制原始对象的其他属性 |
| | | // x: newX * scaleFactor, |
| | | // y: newY * scaleFactory, |
| | | // width: adjustedWidth, |
| | | // height: adjustedHeight, |
| | | // widtha: rect.width, |
| | | // heighta: rect.height, |
| | | // } |
| | | // }); |
| | | |
| | | // // 合并新旧矩形,并保留 isActive 状态 |
| | | // adjustedRectsb.value = existingRects.map(oldRect => { |
| | | // const newRect = newRects.find(r => r.glassId === oldRect.glassId); |
| | | // if (newRect) { |
| | | // return { ...oldRect, ...newRect, isActive: oldRect.isActive }; |
| | | // } |
| | | // return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样 |
| | | // }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId))); |
| | | // } |
| | | else if (data.outGlass == null) { |
| | | adjustedRectsb.value = [] |
| | | } |
| | | }; |
| | | onMounted(() => { |
| | | initializeWebSocket(socketUrl, handleMessage); |
| | | }); |
| | | function updateRectColorsa() { |
| | | adjustedRectsa.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 8; |
| | | } |
| | | }); |
| | | } |
| | | function updateoutColorsa() { |
| | | adjustedRectsa.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 9; |
| | | } |
| | | }); |
| | | } |
| | | function updateoutColorsc() { |
| | | adjustedRects1.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 9; |
| | | } |
| | | }); |
| | | } |
| | | function updateoutColorsd() { |
| | | adjustedRects2.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 9; |
| | | } |
| | | }); |
| | | } |
| | | function updateonColorsa() { |
| | | adjustedRectsa.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 1; |
| | | } |
| | | }); |
| | | } |
| | | function updateRectColorsb() { |
| | | adjustedRectsb.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 8; |
| | | } |
| | | }); |
| | | } |
| | | function updateoutColorsb() { |
| | | adjustedRectsb.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 9; |
| | | } |
| | | }); |
| | | } |
| | | function updateonColorsb() { |
| | | adjustedRectsb.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 3; |
| | | } |
| | | }); |
| | | } |
| | | function updateRectColors1() { |
| | | adjustedRects1.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 8; |
| | | } |
| | | }); |
| | | } |
| | | function updateRectColors2() { |
| | | adjustedRects2.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = 8; |
| | | } |
| | | }); |
| | | } |
| | | function getRectColor1(state) { |
| | | switch (state) { |
| | | case 2: |
| | | return 'lightblue'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | default: |
| | | return '#CDAF95'; |
| | | } |
| | | } |
| | | function getRectColor2(state) { |
| | | switch (state) { |
| | | case 2: |
| | | return 'lightblue'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | default: |
| | | return '#CDAF95'; |
| | | } |
| | | } |
| | | function getRectColora(state) { |
| | | switch (state) { |
| | | case 0: |
| | | return '#7AC5CD'; |
| | | case 1: |
| | | return '#95d475'; |
| | | case -1: |
| | | return '#99BBFF'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | default: |
| | | return '#CDAF95'; |
| | | } |
| | | } |
| | | function getRectColorb(state) { |
| | | switch (state) { |
| | | case 3: |
| | | return '#eebe77'; |
| | | case 4: |
| | | return '#CD6090'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | default: |
| | | return '#CDAF95'; |
| | | } |
| | | } |
| | | function showDialog1(rect) { |
| | | const index = adjustedRects1.value.findIndex(r => r.glassId === rect.glassId); |
| | | if (index !== -1) { |
| | | adjustedRects1.value[index].isActive = true; |
| | | } |
| | | currentGlassId.value = rect.glassId; |
| | | currenttemperingFeedSequence.value = rect.temperingFeedSequence; |
| | | blind1.value = true; |
| | | currentRect.value = rect; |
| | | if (currentRect.value.state == 8) { |
| | | canSelectProject1.value = false; |
| | | } else if (currentRect.value.state !== 8) { |
| | | canSelectProject1.value = true; |
| | | } |
| | | if (currentRect.value.state == 9) { |
| | | cantakea.value = false; |
| | | } else if (currentRect.value.state !== 9) { |
| | | cantakea.value = true; |
| | | } |
| | | } |
| | | function showDialog2(rect) { |
| | | const index = adjustedRects2.value.findIndex(r => r.glassId === rect.glassId); |
| | | if (index !== -1) { |
| | | adjustedRects2.value[index].isActive = true; |
| | | } |
| | | currentGlassId.value = rect.glassId; |
| | | currenttemperingFeedSequence.value = rect.temperingFeedSequence; |
| | | blind2.value = true; |
| | | currentRect.value = rect; |
| | | if (currentRect.value.state == 8) { |
| | | canSelectProject2.value = false; |
| | | } else if (currentRect.value.state !== 8) { |
| | | canSelectProject2.value = true; |
| | | } |
| | | if (currentRect.value.state == 9) { |
| | | cantakea.value = false; |
| | | } else if (currentRect.value.state !== 9) { |
| | | cantakea.value = true; |
| | | } |
| | | } |
| | | function showDialoga(rect) { |
| | | const index = adjustedRectsa.value.findIndex(r => r.glassId === rect.glassId); |
| | | if (index !== -1) { |
| | | adjustedRectsa.value[index].isActive = true; |
| | | } |
| | | currentGlassId.value = rect.glassId; |
| | | currenttemperingFeedSequence.value = rect.temperingFeedSequence; |
| | | blinda.value = true; |
| | | currentRect.value = rect; |
| | | if (currentRect.value.state == 8) { |
| | | canSelectProjecta.value = false; |
| | | } else if (currentRect.value.state !== 8) { |
| | | canSelectProjecta.value = true; |
| | | } |
| | | if (currentRect.value.state == 9) { |
| | | cantakea.value = false; |
| | | } else if (currentRect.value.state !== 9) { |
| | | cantakea.value = true; |
| | | } |
| | | if (currentRect.value.state == 1) { |
| | | canona.value = false; |
| | | } else if (currentRect.value.state == 0) { |
| | | canona.value = true; |
| | | } |
| | | } |
| | | function showDialogb(rect) { |
| | | const index = adjustedRectsb.value.findIndex(r => r.glassId === rect.glassId); |
| | | if (index !== -1) { |
| | | adjustedRectsb.value[index].isActive = true; |
| | | } |
| | | currentGlassId.value = rect.glassId; |
| | | currenttemperingFeedSequence.value = rect.temperingFeedSequence; |
| | | blindb.value = true; |
| | | currentRect.value = rect; |
| | | if (currentRect.value.state == 8) { |
| | | canSelectProjectb.value = false; |
| | | } else if (currentRect.value.state !== 8) { |
| | | canSelectProjectb.value = true; |
| | | } |
| | | if (currentRect.value.state == 9) { |
| | | cantakeb.value = false; |
| | | } else if (currentRect.value.state !== 9) { |
| | | cantakeb.value = true; |
| | | } |
| | | if (currentRect.value.state == 3) { |
| | | canonb.value = false; |
| | | } else if (currentRect.value.state !== 3) { |
| | | canonb.value = true; |
| | | } |
| | | } |
| | | const handleDialogClose1 = () => { |
| | | adjustedRects1.value.forEach(rect => { |
| | | rect.isActive = false; |
| | | }); |
| | | blind1.value = false; |
| | | }; |
| | | const handleDialogClose2 = () => { |
| | | adjustedRects2.value.forEach(rect => { |
| | | rect.isActive = false; |
| | | }); |
| | | blind2.value = false; |
| | | }; |
| | | const handleDialogClosea = () => { |
| | | adjustedRectsa.value.forEach(rect => { |
| | | rect.isActive = false; |
| | | }); |
| | | blinda.value = false; |
| | | }; |
| | | const handleDialogCloseb = () => { |
| | | adjustedRectsb.value.forEach(rect => { |
| | | rect.isActive = false; |
| | | }); |
| | | blindb.value = false; |
| | | }; |
| | | // 破损 |
| | | const handleDamage1 = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | // temperingFeedSequence: currenttemperingFeedSequence.value, |
| | | line: 4001, |
| | | state: 8, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blind1.value = false; |
| | | updateRectColors1(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | const handleDamage2 = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 8, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blind2.value = false; |
| | | updateRectColors2(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 进炉前破损 |
| | | const handleDamagea = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 8, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blinda.value = false; |
| | | updateRectColorsa(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 进炉前人工拿走 |
| | | const takeouta = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 9, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blinda.value = false; |
| | | updateoutColorsa(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 进炉前放回 |
| | | const takeona = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 1, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blinda.value = false; |
| | | updateonColorsa(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 进炉中人工拿走 |
| | | const takeoutc = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 9, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blind1.value = false; |
| | | updateoutColorsc(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 进炉中人工拿走 |
| | | const takeoutd = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 9, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blind2.value = false; |
| | | updateoutColorsd(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 已出炉破损 |
| | | const handleDamageb = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 8, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blindb.value = false; |
| | | updateRectColorsb(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 已出炉人工拿走 |
| | | const takeoutb = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 9, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blindb.value = false; |
| | | updateoutColorsb(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 已出炉放回 |
| | | const takeonb = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 3, |
| | | workingProcedure: '钢化', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success('成功!'); |
| | | blindb.value = false; |
| | | updateonColorsb(); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <div style="margin-top: 10px;"> |
| | | <el-button style="margin-left: 15px;" id="searchButton" type="primary" |
| | | @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;"> |
| | | {{ $t('processCard.beforefurnace') }} |
| | | </el-button> |
| | | <el-button style="margin-left: 15px;" id="searchButton" type="primary" |
| | | @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;"> |
| | | {{ $t('processCard.intofurnace') }} |
| | | </el-button> |
| | | <el-button id="searchButton" type="success" |
| | | @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false;"> |
| | | {{ $t('processCard.outfurnace') }} |
| | | </el-button> |
| | | <div v-if="dialogFormVisible"> |
| | | <!-- 进炉中右 --> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;"> |
| | | <!-- <div style="width:900px;background-color: #f4f4f5;height: 420px;"> --> |
| | | <!-- <div v-if="adjustedRects1.length > 0"> --> |
| | | <div v-if="currentPage === 1 && adjustedRects1.length > 0"> |
| | | <!-- <div style="text-align: center;">炉号:{{ engineerIdDisplay }}-{{ adjustedRects[0].temperingLayoutId }}</div> --> |
| | | <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ |
| | | adjustedRects1[0].engineerId |
| | | }}-{{ adjustedRects1[0].temperingLayoutId }} |
| | | </div> |
| | | <el-scrollbar height="750px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;max-width: 1400px;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRects1" |
| | | :key="index" |
| | | @click="showDialog1(rect)" |
| | | class="rect" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.y}px`, |
| | | left: `${rect.x}px`, |
| | | width: `${rect.width}px`, |
| | | height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor1(rect.state) }"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | </div> |
| | | <!-- </div> --> |
| | | <!-- 进炉中左 --> |
| | | <!-- <div style="width: 750px;float: left;background-color: #f4f4f5;height: 350px;"> --> |
| | | <!-- <div v-if="adjustedRects2.length > 0"> --> |
| | | <div v-else-if="currentPage === 2 && adjustedRects2.length > 0"> |
| | | <div style="text-align: center;"> {{ $t('processCard.temperinglayout') }}:{{ adjustedRects2[0].engineerId }}-{{ adjustedRects2[0].temperingLayoutId }} </div> |
| | | <el-scrollbar height="750px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;max-width: 1400px;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRects2" |
| | | :key="index" |
| | | @click="showDialog2(rect)" |
| | | class="rect" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.y}px`, |
| | | left: `${rect.x}px`, |
| | | width: `${rect.width}px`, |
| | | height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor2(rect.state) }"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | </div> |
| | | <!-- </div> --> |
| | | </el-card> |
| | | <div style="display: flex;margin-left: 40%;margin-bottom: 10px;"> |
| | | <el-pagination |
| | | size="small" |
| | | background |
| | | layout="prev, pager, next" |
| | | :total="20" |
| | | @current-change="handlePageChange" |
| | | /> |
| | | </div> |
| | | </div> |
| | | <div v-if="dialogFormVisiblea"> |
| | | <!-- 进炉前 --> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;"> |
| | | <div v-if="adjustedRectsa.length > 0"> |
| | | <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;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRectsa" |
| | | :key="index" |
| | | @click="showDialoga(rect)" |
| | | class="rect" |
| | | :style="{ position: 'absolute', top: `${rect.y}px`, left: `${rect.x}px`, |
| | | width: `${rect.width}px`, height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColora(rect.state) }"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | <div v-if="dialogFormVisibleb"> |
| | | <!-- 已出炉 --> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;"> |
| | | <div v-if="adjustedRectsb.length > 0"> |
| | | <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;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRectsb" |
| | | :key="index" |
| | | @click="showDialogb(rect)" |
| | | class="rect" |
| | | :style="{ position: 'absolute', top: `${rect.y}px`, left: `${rect.x}px`, |
| | | width: `${rect.width}px`, height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColorb(rect.state) }"> |
| | | <!-- backgroundColor: rect.state === 4 ? '#911005' : '#f8e3c5' }"> --> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | <!-- 进炉中 --> |
| | | <el-dialog v-model="blind1" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose1"> |
| | | <el-button :disabled="!canSelectProject1" type="warning" plain @click="handleDamage1" style="width: 150px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="!cantakea" type="danger" plain @click="takeoutc" style="width: 150px;margin-left: 10px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"><Upload /></el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | </el-dialog> |
| | | <el-dialog v-model="blind2" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose2"> |
| | | <el-button :disabled="!canSelectProject2" type="warning" plain @click="handleDamage2" style="width: 150px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="!cantakea" type="danger" plain @click="takeoutd" style="width: 150px;margin-left: 10px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"><Upload /></el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | </el-dialog> |
| | | <!-- 进炉前 --> |
| | | <el-dialog v-model="blinda" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClosea"> |
| | | <el-button type="warning" plain @click="handleDamagea" :disabled="!canSelectProjecta" style="width: 150px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="!cantakea" type="danger" plain @click="takeouta" style="width: 150px;margin-left: 10px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"><Upload /></el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | <el-button type="success" plain @click="takeona" :disabled="!canona" style="width: 150px;margin-left: 10px;margin-top: 10px;"> |
| | | {{ $t('order.takeon') }} |
| | | </el-button> |
| | | </el-dialog> |
| | | <!-- 已出炉 --> |
| | | <el-dialog v-model="blindb" top="30vh" width="15%" style="text-align: center;" @close="handleDialogCloseb"> |
| | | <el-button :disabled="!canSelectProjectb" type="warning" plain @click="handleDamageb" style="width: 150px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="!cantakeb" type="danger" plain @click="takeoutb" style="width: 150px;margin-left: 10px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"><Upload /></el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | <!-- <el-button type="success" plain @click="takeonb" :disabled="!canonb" style="width: 150px;margin-left: 10px;margin-top: 10px;"> |
| | | {{ $t('order.takeon') }} |
| | | </el-button> --> |
| | | </el-dialog> |
| | | <el-dialog |
| | | v-model="dialogVisible" |
| | | width="100%" |
| | | top="0vh" |
| | | :show-close="false" |
| | | > |
| | | <div class="custom-title" style="text-align: center; margin-bottom: 20px;"> |
| | | {{ $t('processCard.glasstakeout') }} |
| | | </div> |
| | | <el-table |
| | | :data="tableData" |
| | | style="width: 100%;height: 760px" |
| | | > |
| | | <el-table-column prop="flowCardId" :label="$t('processCard.flowcard')" width="140" align="center"/> |
| | | <el-table-column prop="layer" :label="$t('processCard.layer')" align="center" width="52"/> |
| | | <el-table-column prop="engineerId" :label="$t('processCard.project')" align="center" width="110"/> |
| | | <el-table-column prop="temperingLayoutId" :label="$t('processCard.temperinglayout')" align="center" width="52"/> |
| | | <el-table-column prop="temperingFeedSequence" :label="$t('processCard.temperingfeed')" align="center" width="52"/> |
| | | <el-table-column prop="width" :label="$t('processCard.width')" align="center" width="80"/> |
| | | <el-table-column prop="height" :label="$t('processCard.height')" align="center" width="80"/> |
| | | <el-table-column prop="thickness" :label="$t('processCard.thickness')" align="center" width="52"/> |
| | | </el-table> |
| | | </el-dialog> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | #boxa{ |
| | | border: 1px solid rgb(119, 116, 116); |
| | | background-color: #529b2e; |
| | | text-align: center; |
| | | display: inline-block; |
| | | /* align-items:center; */ |
| | | /* justify-content:center; */ |
| | | margin-left: 20px; |
| | | } |
| | | #boxb{ |
| | | border: 1px solid rgb(119, 116, 116); |
| | | background-color: #a0cfff; |
| | | /* display:flex; */ |
| | | text-align: center; |
| | | display: inline-block; |
| | | align-items:center; |
| | | justify-content:center; |
| | | margin-left: 20px; |
| | | } |
| | | #box{ |
| | | border: 1px solid black; |
| | | background-color: #337ecc; |
| | | display:flex; |
| | | align-items:center; |
| | | justify-content:center; |
| | | } |
| | | #home-card { |
| | | width: 100%; |
| | | overflow: hidden; |
| | | padding: 10px 0px; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | #home-item { |
| | | border-style: solid; |
| | | border-width: 1px; |
| | | border-color: #E4E4E4; |
| | | width: calc(34% - 20px); |
| | | padding: 20px 0px 20px 20px; |
| | | margin-right: 10px; |
| | | margin-bottom: 10px; |
| | | display: flex; |
| | | justify-content: center; |
| | | /* align-items: center; */ |
| | | background: #fff; |
| | | #home-img { |
| | | display: inline-block; |
| | | width: 160px; |
| | | height: 60px; |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | #home-right { |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: flex-start; |
| | | margin-left: 10px; |
| | | #home-num { |
| | | font-size: 40px; |
| | | margin: 5px 0; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .rect { |
| | | border: 1px solid black; /* 设置矩形的边框 */ |
| | | /* background-color: lightblue; 设置矩形的背景色 */ |
| | | } |
| | | #rect { |
| | | position: relative; /* 确保箭头可以相对于矩形定位 */ |
| | | } |
| | | .centered-text { |
| | | /* 设置文字居中样式 */ |
| | | /* display: flex; */ |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 100%; /* 确保div占据整个矩形的高度 */ |
| | | /* font-size: small; */ |
| | | } |
| | | .custom-title { |
| | | font-size: 20px; |
| | | font-weight: bold; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <div style="display: flex;"> |
| | | <el-input v-model="engineerId" style="margin-left: 15px;margin-top: 10px;width: 240px" :placeholder="$t('order.projectnumber')"/> |
| | | <el-button type="primary" style="margin-left: 10px;margin-top: 10px;" @click="sethistorical()">{{$t('reportmanage.inquire')}}</el-button> |
| | | <el-pagination |
| | | v-model:current-page="currentPage" |
| | | :page-size="pageSize" |
| | | :size="size" |
| | | :disabled="disabled" |
| | | layout="prev, pager, next, jumper" |
| | | :total="totalPages" |
| | | @current-change="handleCurrentChange" |
| | | style="margin-top: 10px;" |
| | | /> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;"> |
| | | <el-scrollbar height="750px" width="1400px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;"> |
| | | <div |
| | | v-for="(rect, index) in adjustedRects" |
| | | :key="rect.glassId" |
| | | class="rect" |
| | | @click="showDialog(rect.glassId)" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.y}px`, left: `${rect.x}px`, width: `${rect.width}px`, height: `${rect.height}px`, |
| | | backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor(rect.state) |
| | | }" |
| | | > |
| | | <div class="centered-text"> |
| | | <div style="font-size: 20px;font-weight: bold;">{{ rect.glassId }}</div> |
| | | <div style="font-size: 20px;font-weight: bold;">{{ rect.flowCardId }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose"> |
| | | <el-button :disabled="currentGlassRect?.state === 8 || currentGlassRect?.state === 9" type="warning" |
| | | plain @click="handleDamage(currentGlassId)" style="width: 140px;margin-left: 10px;"> |
| | | {{ $t('order.dilapidation') }} |
| | | </el-button> |
| | | <el-button :disabled="currentGlassRect?.state === 9 || currentGlassRect?.state === 8" type="danger" |
| | | plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;"> |
| | | <el-icon class="el-icon--right"> |
| | | <Upload/> |
| | | </el-icon> |
| | | {{ $t('order.takeaway') }} |
| | | </el-button> |
| | | </el-dialog> |
| | | </el-card> |
| | | </div> |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import {ElMessage} from 'element-plus' |
| | | import {computed, onMounted, onUnmounted, ref} from 'vue'; |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {useI18n} from 'vue-i18n' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const blind = ref(false) |
| | | const engineerId = ref(); |
| | | const currentGlassId = ref(null); |
| | | const temperingLayoutId = ref(null); |
| | | const adjustedRects = ref([]); |
| | | const raw = ref([]); |
| | | let webSocket: WebSocket | null = null; |
| | | const totalPages = ref(0); |
| | | const pageSize = ref(1); |
| | | const currentPage = ref(''); |
| | | const disabled = false; |
| | | const size = 'small'; |
| | | const rawData = ref([]); |
| | | // 显示对话框并设置当前 glassId |
| | | const currentGlassRect = computed(() => { |
| | | return adjustedRects.value.find(rect => rect.glassId === currentGlassId.value); |
| | | }); |
| | | function showDialog(glassId: number) { |
| | | currentGlassId.value = glassId; |
| | | blind.value = true; |
| | | adjustedRects.value = adjustedRects.value.map(rect => |
| | | rect.glassId === glassId ? { ...rect, isActive: true } : rect |
| | | ); |
| | | } |
| | | const handleDialogClose = () => { |
| | | adjustedRects.value = adjustedRects.value.map(rect => ({ |
| | | ...rect, |
| | | isActive: false |
| | | })); |
| | | } |
| | | // 破损 |
| | | const handleDamage = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 8, |
| | | workingProcedure: '钢化', |
| | | temperingLayoutId: currentPage.value, |
| | | engineerId: engineerId.value, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blind.value = false; |
| | | updateRectstate(currentGlassId.value, 8); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | catch (error) { |
| | | // 处理错误 |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 人工拿走 |
| | | const handleManualTake = async () => { |
| | | try { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { |
| | | glassId: currentGlassId.value, |
| | | line: 4001, |
| | | state: 9, |
| | | workingProcedure: '钢化', |
| | | temperingLayoutId: currentPage.value, |
| | | engineerId: engineerId.value, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blind.value = false; |
| | | updateRectstate(currentGlassId.value, 9); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | const sethistorical = async () => { |
| | | search() |
| | | fetchTableData() |
| | | } |
| | | const fetchTableData = async () => { |
| | | try { |
| | | const response = await request.post("/temperingGlass/temperingGlassInfo/selectTempering", { |
| | | engineerId: engineerId.value, |
| | | }) |
| | | if (response.code === 200) { |
| | | totalPages.value = response.data.id; |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | const search = async () => { |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/selectTemperingGlass', { |
| | | engineerId: engineerId.value, |
| | | temperingLayoutId: 1 |
| | | }) |
| | | if (response.code === 200) { |
| | | const scaleFactor = 1621.78/6000; |
| | | const scaleFactory = 750/2800; |
| | | const adjustedRectsData = response.data.map(rect => { |
| | | const scaleFactor = 1621.78/6000; |
| | | const scaleFactorY = 750/2800; |
| | | let adjustedWidth, adjustedHeight,widtha,heighta;; |
| | | let newX = rect.ycoordinate; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | | heighta = rect.width; |
| | | }else { |
| | | widtha = rect.width; |
| | | heighta = rect.height; |
| | | } |
| | | if (rect.angle === 0) { |
| | | adjustedWidth = widtha * scaleFactor; |
| | | adjustedHeight = heighta * scaleFactorY; |
| | | newX = 6000 - (rect.ycoordinate + widtha); |
| | | } else { |
| | | adjustedWidth = heighta * scaleFactor; |
| | | adjustedHeight = widtha * scaleFactorY; |
| | | newX = 6000 - (rect.ycoordinate + heighta); |
| | | } |
| | | return { |
| | | ...rect, |
| | | x: newX * scaleFactor, |
| | | y: rect.xcoordinate* scaleFactorY, |
| | | width: adjustedWidth, |
| | | height: adjustedHeight, |
| | | widtha: rect.width, |
| | | heighta: rect.height, |
| | | } |
| | | }); |
| | | adjustedRects.value = adjustedRectsData; |
| | | currentPage.value = 1; |
| | | } |
| | | }; |
| | | const handleCurrentChange = async(val: number) => { |
| | | currentPage.value = val; |
| | | const response = await request.post('/temperingGlass/temperingGlassInfo/selectTemperingGlass', { |
| | | engineerId: engineerId.value, |
| | | temperingLayoutId: currentPage.value |
| | | }) |
| | | if (response.code === 200) { |
| | | const scaleFactor = 1621.78/6000; |
| | | const scaleFactory = 750/2800; |
| | | const adjustedRectsData = response.data.map(rect => { |
| | | const scaleFactor = 1621.78/6000; |
| | | const scaleFactorY = 750/2800; |
| | | let adjustedWidth, adjustedHeight,widtha,heighta;; |
| | | let newX = rect.ycoordinate; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | | heighta = rect.width; |
| | | }else { |
| | | widtha = rect.width; |
| | | heighta = rect.height; |
| | | } |
| | | if (rect.angle === 0) { |
| | | adjustedWidth = widtha * scaleFactor; |
| | | adjustedHeight = heighta * scaleFactorY; |
| | | newX = 6000 - (rect.ycoordinate + widtha); |
| | | } else { |
| | | adjustedWidth = heighta * scaleFactor; |
| | | adjustedHeight = widtha * scaleFactorY; |
| | | newX = 6000 - (rect.ycoordinate + heighta); |
| | | } |
| | | return { |
| | | ...rect, |
| | | x: newX * scaleFactor, |
| | | y: rect.xcoordinate* scaleFactorY, |
| | | width: adjustedWidth, |
| | | height: adjustedHeight, |
| | | widtha: rect.width, |
| | | heighta: rect.height, |
| | | } |
| | | }); |
| | | adjustedRects.value = adjustedRectsData; |
| | | } |
| | | }; |
| | | function getRectColor(state: number): string { |
| | | switch (state) { |
| | | // case -1: |
| | | // return '#CDAF95'; |
| | | // case 0: |
| | | // return '#7AC5CD'; |
| | | // case 1: |
| | | // return '#95d475'; |
| | | // case 2: |
| | | // return 'lightblue'; |
| | | // case 3: |
| | | // return '#eebe77'; |
| | | case 4: |
| | | return '#CD6090'; |
| | | case 8: |
| | | return '#911005'; |
| | | case 9: |
| | | return '#4682B4'; |
| | | default: |
| | | return '#CDAF95'; |
| | | } |
| | | } |
| | | // 更新矩形状态 |
| | | function updateRectstate(glassId: string, state: number) { |
| | | adjustedRects.value.forEach(rect => { |
| | | if (rect.glassId === glassId) { |
| | | rect.state = state; // 更新矩形的状态 |
| | | } |
| | | }); |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .rect { |
| | | border: 1px solid black; /* 设置矩形的边框 */ |
| | | } |
| | | .centered-text { |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 100%; |
| | | /* font-size: large; */ |
| | | } |
| | | #rect { |
| | | position: relative; /* 确保箭头可以相对于矩形定位 */ |
| | | } |
| | | |
| | | #arrow { |
| | | position: absolute; |
| | | top: 70%; /* 箭头位于矩形中间 */ |
| | | left: 200px; /* 箭头在矩形左侧一些距离 */ |
| | | transform: translateY(-50%); /* 垂直居中 */ |
| | | width: 0; |
| | | height: 0; |
| | | border-top: 10px solid transparent; /* 上边框 */ |
| | | border-bottom: 10px solid transparent; /* 下边框 */ |
| | | border-right: 20px solid #911005; /* 右边框,形成箭头 */ |
| | | } |
| | | |
| | | #line { |
| | | position: absolute; |
| | | top: 70%; /* 直线位于矩形中间 */ |
| | | left: 210px; /* 直线在箭头右侧一些距离 */ |
| | | transform: translateY(-50%); /* 垂直居中 */ |
| | | height: 2px; /* 直线的高度 */ |
| | | width: 240px; /* 直线的长度,根据需要调整 */ |
| | | background-color: #911005; /* 直线的颜色 */ |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script setup lang="ts"> |
| | | import {useRouter,useRoute} from 'vue-router' |
| | | import { reactive, ref } from 'vue' |
| | | import type { FormProps,FormInstance, FormRules } from 'element-plus' |
| | | import {ElMessage,ElMessageBox} from "element-plus"; |
| | | import request from "@/utils/request"; |
| | | import { Lock,Avatar } from '@element-plus/icons-vue' |
| | | // import {Avatar, UserFilled} from "@element-plus/icons-vue"; |
| | | import { useI18n } from 'vue-i18n' |
| | | const { t } = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | | let loginLoadings= ref(false) |
| | | const labelPosition = ref<FormProps['labelPosition']>('right') |
| | | //注册用户参数 |
| | | const register = reactive({ |
| | | userName: '', |
| | | // loginName: '', |
| | | passWord: '', |
| | | confirmPassword:'' |
| | | }) |
| | | /*方法*/ |
| | | const checkName = (rule: any, value: any, callback: any) => { |
| | | if (value.trim() === '') { |
| | | callback(new Error(t('login.namea'))) |
| | | }else if(value.length>16){ |
| | | callback(new Error(t('login.len'))) |
| | | }else{ |
| | | callback() |
| | | } |
| | | } |
| | | const checkPassword = (rule: any, value: any, callback: any) => { |
| | | if (value.trim() === '') { |
| | | callback(new Error(t('login.passnull'))) |
| | | }else if(value.length>16 || value.length<6){ |
| | | callback(new Error(t('login.leng'))) |
| | | }else{ |
| | | callback() |
| | | } |
| | | } |
| | | const checkConfirmPassword = (rule: any, value: any, callback: any) => { |
| | | if (value.trim() === '') { |
| | | callback(new Error(t('login.spwn'))) |
| | | }else if(value !== register.passWord){ |
| | | callback(new Error(t('login.depass'))) |
| | | }else if(value.length>16 || value.length<6){ |
| | | callback(new Error(t('login.leng'))) |
| | | }else{ |
| | | callback() |
| | | } |
| | | } |
| | | const ruleFormRef = ref<FormInstance>() |
| | | const rules = reactive<FormRules<typeof register>>({ |
| | | userName: [{ validator: checkName, trigger: 'blur' }], |
| | | passWord:[{ validator: checkPassword, trigger: 'blur' }], |
| | | confirmPassword:[{ validator: checkConfirmPassword, trigger: 'blur' }], |
| | | // loginName: [{ validator: validateString, trigger: 'blur' }] |
| | | }) |
| | | const submitForm = (formEl: FormInstance | undefined) => { |
| | | if (!formEl) return |
| | | formEl.validate((valid) => { |
| | | if (valid) { |
| | | loginLoadings.value=true |
| | | request.post('/user/register', |
| | | register).then((res) => { |
| | | if(res['code']==200){ |
| | | ElMessageBox.alert( |
| | | `<strong>用户:<i style="color: #1890FF;">'${res.data.userName}</i>' |
| | | <br>账号ID:<i style="color: #1890FF;">${res.data.loginName}</i> </strong>`, |
| | | '注册提示:', |
| | | { |
| | | dangerouslyUseHTMLString: true, |
| | | confirmButtonText: '登陆', |
| | | center: true, |
| | | } |
| | | ).then(()=>{ |
| | | router.push({ |
| | | path:'/login', |
| | | query: { |
| | | id: res.data.loginName |
| | | } |
| | | }) |
| | | }) |
| | | ElMessage.success(t('register.registerSuccessful')) |
| | | loginLoadings.value=false |
| | | } else { |
| | | ElMessage.error(res['msg']) |
| | | return false |
| | | } |
| | | }).catch(error => { |
| | | ElMessage.error(t('main.connectErr')) |
| | | loginLoadings.value=false |
| | | return false |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | const toLogin = () => { |
| | | router.push({ |
| | | path:'/login', |
| | | }) |
| | | } |
| | | </script> |
| | | <template> |
| | | <div class="mainDiv" > |
| | | <div id="main-login"> |
| | | <div> |
| | | <div style="position: absolute; left: 8vw; top: 6vw; "> |
| | | <img src="../../src/assets/3.png"> |
| | | </div> |
| | | <div style="position: absolute; left: 15vw; top: 22vw; font-size: 55px;color: rgba(29, 33, 41, 1);"> |
| | | {{ $t('northglassMESsystem') }} |
| | | </div> |
| | | </div> |
| | | <div id="div-login"> |
| | | <el-form |
| | | @submit.native.prevent |
| | | ref="ruleFormRef" |
| | | :model="register" |
| | | status-icon |
| | | :rules="rules" |
| | | label-width="75px" |
| | | > |
| | | <div id="title">{{ $t('register.newuserregister') }}</div> |
| | | <div id="center"> |
| | | <!-- <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">姓名</div> --> |
| | | <el-form-item prop="userName" :label="$t('register.name')"> |
| | | <el-input |
| | | style="width: 200px;" |
| | | v-model="register.userName" |
| | | type="text" |
| | | autocomplete="off" |
| | | :prefix-icon="Avatar" |
| | | :placeholder="$t('register.inputname')" |
| | | /> |
| | | </el-form-item> |
| | | <!-- <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">密码</div> --> |
| | | <el-form-item prop="passWord" :label="$t('register.password')"> |
| | | <el-input |
| | | style="width: 200px;" |
| | | v-model="register.passWord" |
| | | type="password" |
| | | autocomplete="off" |
| | | :prefix-icon="Lock" |
| | | :placeholder="$t('register.pwErr')" |
| | | show-password |
| | | /> |
| | | </el-form-item> |
| | | <!-- <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">确认密码</div> --> |
| | | <el-form-item prop="confirmPassword" :label="$t('register.passwordation')"> |
| | | <el-input |
| | | style="width: 200px;" |
| | | v-model="register.confirmPassword" |
| | | type="password" |
| | | :prefix-icon="Lock" |
| | | autocomplete="off" |
| | | show-password |
| | | :placeholder="$t('register.pwErration')" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item id="submitForm"> |
| | | <el-button |
| | | :loading="loginLoadings" |
| | | type="primary" |
| | | @click="submitForm(ruleFormRef)" |
| | | plain |
| | | >{{ $t('register.registration') }} |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | | @click="toLogin" |
| | | plain |
| | | >{{ $t('register.false') }} |
| | | </el-button> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | #div-login{ |
| | | margin-top: 5%; |
| | | /* margin-top: 20%; */ |
| | | /* margin-left: 650px; */ |
| | | background-color: #fff; |
| | | border-radius: 4px; |
| | | float: right; |
| | | width: 40%; |
| | | height: 60%; |
| | | min-width: 318px; |
| | | box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19); |
| | | } |
| | | #center{ |
| | | margin-top: 45px; |
| | | margin-left: 100px; |
| | | } |
| | | .mainDiv{ |
| | | overflow: hidden; |
| | | min-width: 718px; |
| | | background-image: url("../../src/assets/background.jpg"); |
| | | } |
| | | #main-login{ |
| | | margin: 150px auto 0 auto; |
| | | height: 70vh; |
| | | width: 80vw; |
| | | } |
| | | #submitForm{ |
| | | margin-top: 30px; |
| | | margin-left: -10px; |
| | | } |
| | | #title{ |
| | | font-size: 25px; |
| | | text-align: center; |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div style="height: 600px;"> |
| | | <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;"> |
| | | <span style="margin-left: 10px;" class="demonstration">{{ $t('reportmanage.productiontime') }}</span> |
| | | <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" :start-placeholder="$t('reportmanage.starttime')" |
| | | style="margin-left: 15px;" value-format = "YYYY-MM-DD hh:mm:ss" |
| | | :end-placeholder="$t('reportmanage.endtime')"> |
| | | </el-date-picker> |
| | | <el-select v-model="report.type" :placeholder="$t('reportmanage.ctype')" style="margin-left: 10px;"> |
| | | <el-option :label="$t('reportmanage.broke')" value="8"></el-option> |
| | | <el-option :label="$t('reportmanage.takeout')" value="9"></el-option> |
| | | </el-select> |
| | | <el-select v-model="report.status" :placeholder="$t('reportmanage.cstate')" style="margin-left: 10px;"> |
| | | <!-- <el-option :label="$t('reportmanage.all')" value="0"></el-option> --> |
| | | <el-option :label="$t('reportmanage.dreportwork')" value="1"></el-option> |
| | | <el-option :label="$t('reportmanage.pendingwork')" value="7"></el-option> |
| | | <el-option :label="$t('reportmanage.reportwork')" value="3"></el-option> |
| | | <el-option :label="$t('reportmanage.reportworked')" value="8"></el-option> |
| | | </el-select> |
| | | <el-select v-model="report.workingProcedure" :placeholder="$t('reportmanage.cprocess')" |
| | | style="margin-left: 10px;"> |
| | | <el-option :label="$t('reportmanage.all')" value="0"></el-option> |
| | | <el-option :label="$t('reportmanage.incise')" value="切割"></el-option> |
| | | <el-option :label="$t('reportmanage.edging')" value="磨边"></el-option> |
| | | <el-option :label="$t('reportmanage.steel')" value="钢化"></el-option> |
| | | </el-select> |
| | | <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('reportmanage.inquire') |
| | | }}</el-button> |
| | | <el-button type="success" style="margin-left: 10px;" :disabled="(!selectedStatus)" @click="handleConfirm">{{ |
| | | $t('reportmanage.signingwork') |
| | | }}</el-button> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" > |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> |
| | | <el-table height="740" ref="table" :data="reportData" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="teamsGroupsName" align="center" :label="$t('reportmanage.reporteam')" |
| | | min-width="135" /> |
| | | <el-table-column prop="deviceName" align="center" :label="$t('reportmanage.reportingequipment')" |
| | | min-width="156" /> |
| | | <el-table-column prop="line" align="center" :label="$t('reportmanage.line')" min-width="120" /> |
| | | <el-table-column prop="workingProcedure" align="center" :label="$t('reportmanage.process')" min-width="120" /> |
| | | <el-table-column prop="glassId" align="center" :label="$t('reportmanage.glassID')" min-width="130" /> |
| | | <el-table-column prop="engineerId" align="center" :label="$t('reportmanage.projectnumber')" min-width="120" /> |
| | | <el-table-column prop="temperingLayoutId" align="center" :label="$t('reportmanage.layoutID')" |
| | | min-width="120" /> |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('reportmanage.productiontime')" |
| | | min-width="230" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('reportmanage.type')" |
| | | min-width="120" |
| | | prop="type" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="gettypeType(scope.row.type)"> |
| | | {{ gettypeText(scope.row.type) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('reportmanage.state')" |
| | | min-width="120" |
| | | prop="status" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusType(scope.row.status)"> |
| | | {{ getStatusText(scope.row.status) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="processId" align="center" :label="$t('reportmanage.processcards')" min-width="140" /> |
| | | <el-table-column prop="orderNumber" align="center" :label="$t('reportmanage.number')" min-width="120" /> |
| | | <el-table-column prop="technologyNumber" align="center" :label="$t('reportmanage.layer')" min-width="120" /> |
| | | <el-table-column prop="breakageType" align="center" :label="$t('reportmanage.typebreakage')" min-width="180"> |
| | | <template #default="{ row }"> |
| | | <el-select v-model="row.breakageType" filterable :placeholder="$t('reportmanage.pcausebreakage')" :disabled="selectedType" |
| | | clearable @input="handleInputChangea($event, row.id)"> |
| | | <el-option v-for="item in selectOptionsa" :key="item.basicName" :label="item.basicName" |
| | | :value="item.basicName" /> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="breakageReason" align="center" :label="$t('reportmanage.causebreakage')" |
| | | min-width="180"> |
| | | <template #default="{ row }"> |
| | | <el-select v-model="row.breakageReason" filterable :placeholder="$t('reportmanage.ptypebreakage')" :disabled="selectedType" |
| | | clearable @input="handleInputChangea($event, row.id)"> |
| | | <el-option v-for="item in selectOptionsb" :key="item.basicName" :label="item.basicName" |
| | | :value="item.basicName" /> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" :label="$t('reportmanage.responsibleprocess')" min-width="120"> |
| | | <template #default="{ row }"> |
| | | <el-select v-model="row.responsibleProcess" filterable :placeholder="$t('reportmanage.ptypebreakage')" :disabled="selectedType" |
| | | clearable @input="handleInputChangea($event, row.id)"> |
| | | <el-option :label="$t('reportmanage.incise')" value="切割"></el-option> |
| | | <el-option :label="$t('reportmanage.edging')" value="磨边"></el-option> |
| | | <el-option :label="$t('reportmanage.steel')" value="钢化"></el-option> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="responsiblePersonnel" align="center" :label="$t('reportmanage.responsiblepersonnel')" |
| | | min-width="180"> |
| | | <template #default="{ row }"> |
| | | <el-input :placeholder="$t('reportmanage.presponsiblepersonnel')" v-model="row.responsiblePersonnel" :disabled="selectedType" |
| | | autocomplete="off" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="responsibleTeam" align="center" :label="$t('reportmanage.responsibleteam')" |
| | | min-width="180"> |
| | | <template #default="{ row }"> |
| | | <el-select v-model="row.responsibleTeam" filterable :placeholder="$t('reportmanage.presponsibleteam')" :disabled="selectedType" |
| | | clearable @input="handleInputChangea($event, row.id)"> |
| | | <el-option v-for="item in selectOptionsc" :key="item.basicName" :label="item.basicName" |
| | | :value="item.basicName" /> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="responsibleEquipment" align="center" :label="$t('reportmanage.responsibleequipment')" :disabled="selectedType" |
| | | min-width="180"> |
| | | <template #default="{ row }"> |
| | | <el-select v-model="row.responsibleEquipment" filterable |
| | | :placeholder="$t('reportmanage.presponsibleequipment')" clearable :disabled="selectedType" |
| | | @input="handleInputChangea($event, row.id)"> |
| | | <el-option v-for="item in selectOptionsd" :key="item.basicName" :label="item.basicName" |
| | | :value="item.basicName" /> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="remark" align="center" :label="$t('reportmanage.remark')" min-width="180"> |
| | | <template #default="{ row }"> |
| | | <el-input :placeholder="$t('reportmanage.premark')" v-model="row.remark" autocomplete="off" :disabled="selectedType" /> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import { Delete, Upload } from '@element-plus/icons-vue' |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { ref, onMounted, onBeforeUnmount, reactive, computed, shallowRef, onUnmounted, watchEffect } from "vue"; |
| | | import request from "@/utils/request" |
| | | import { WebSocketHost, host } from '@/utils/constants' |
| | | import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; |
| | | import { useI18n } from 'vue-i18n' |
| | | import { inject } from 'vue'; |
| | | const globalDate = inject('globalDate'); |
| | | const timeRange = ref([]) |
| | | const { t } = useI18n() |
| | | const report = ref({ |
| | | type: '8', |
| | | status: '1', |
| | | workingProcedure: '0', |
| | | }); |
| | | const reportData = ref([]) |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(globalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | // const timeRange = ref([formatTimestamp(startDate), formatTimestamp(globalDate)]); |
| | | const selectOptionsa = ref([]); |
| | | const selectOptionsb = ref([]); |
| | | const selectOptionsc = ref([]); |
| | | const selectOptionsd = ref([]); |
| | | const selectValuesa = reactive({}); |
| | | const selectValuesb = reactive({}); |
| | | const selectValuesc = reactive({}); |
| | | const selectValuesd = reactive({}); |
| | | const selectValuese = reactive({}); |
| | | const inputValuesa = reactive({}); |
| | | const inputValuesb = reactive({}); |
| | | const selectedType = ref(true); |
| | | const selectedStatus = ref(false); |
| | | // 查询数据 |
| | | const selectReportData = async () => { |
| | | const response = await request.post("/cacheVerticalGlass/damage/selectDamage", { |
| | | startTime: (timeRange.value && timeRange.value[0]) || '', |
| | | endTime: (timeRange.value && timeRange.value[1]) || '', |
| | | type: report.value.type, |
| | | status: report.value.status, |
| | | workingProcedure: report.value.workingProcedure |
| | | }) |
| | | if (report.value.type == 8) { |
| | | selectedType.value = false; |
| | | }else{ |
| | | selectedType.value = true; |
| | | } |
| | | if ((report.value.status == 1||report.value.status == 7)&&(report.value.type == 8||report.value.type == 1)) { |
| | | selectedStatus.value = true; |
| | | }else{ |
| | | selectedStatus.value = false; |
| | | } |
| | | if (response.code === 200) { |
| | | const formattedData = response.data.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.damageTime), |
| | | })); |
| | | reportData.value = formattedData; |
| | | ElMessage.success(response.message); |
| | | |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | // const responses = await request.post("/cacheVerticalGlass/damage/insertDamage", { |
| | | // glassId:"P24081502|1|1", |
| | | // line:"1001", |
| | | // workingProcedure:"切割", |
| | | // remark:"", |
| | | // status:"0" |
| | | // }) |
| | | }; |
| | | // 报工 |
| | | const handleConfirm = async () => { |
| | | const hasEmptyOrNullBreakType = reportData.value.some( |
| | | item => item.breakageType === null || item.breakageType === '' |
| | | || item.breakageReason === null || item.breakageReason === '' |
| | | || item.responsibleProcess === null || item.responsibleProcess === '' |
| | | || item.responsibleTeam === null || item.responsibleTeam === '' |
| | | || item.responsibleEquipment === null || item.responsibleEquipment === '' |
| | | ); |
| | | if (hasEmptyOrNullBreakType&&selectedType.value==false) { |
| | | // 如果找到了未选择项,显示错误信息 |
| | | ElMessage.error('请填写所有玻璃的破损信息'); |
| | | } else { |
| | | const response = await request.post("/cacheVerticalGlass/damage/submitDamage", reportData.value) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | selectReportData(); |
| | | }; |
| | | const fetchTableData = async () => { |
| | | try { |
| | | const response = await request.post('/cacheVerticalGlass/basic_data_produce/selectBasicDataProduceGroup'); |
| | | if (response.code == 200) { |
| | | selectOptionsa.value = response.data.breakagetype.filter(item => item !== null) |
| | | .map(item => ({ basicName: item.basicName })); |
| | | selectOptionsb.value = response.data.breakagereason.filter(item => item !== null) |
| | | .map(item => ({ basicName: item.basicName })); |
| | | selectOptionsc.value = response.data.teamsgroups.filter(item => item !== null) |
| | | .map(item => ({ basicName: item.basicName })); |
| | | selectOptionsd.value = response.data.device.filter(item => item !== null) |
| | | .map(item => ({ basicName: item.basicName })); |
| | | } else { |
| | | ElMessage.warning(response.data); |
| | | } |
| | | } catch (error) { |
| | | console.error('Error fetching options:', error); |
| | | } |
| | | }; |
| | | const handleInputChangea = (value, rowId) => { |
| | | // 更新对应行的 select 值 |
| | | selectValuesa[rowId] = value; |
| | | selectValuesb[rowId] = value; |
| | | selectValuesc[rowId] = value; |
| | | selectValuesd[rowId] = value; |
| | | selectValuese[rowId] = value; |
| | | inputValuesa[rowId] = value; |
| | | inputValuesb[rowId] = value; |
| | | }; |
| | | fetchTableData(); |
| | | function gettypeType(type: number) { |
| | | switch (type) { |
| | | case 9: |
| | | return 'success'; |
| | | case 8: |
| | | return 'danger'; |
| | | } |
| | | } |
| | | function gettypeText(type: number) { |
| | | switch (type) { |
| | | case 9: |
| | | return t('reportmanage.takeout'); |
| | | case 8: |
| | | return t('reportmanage.broke'); |
| | | } |
| | | } |
| | | function getStatusType(status: number) { |
| | | switch (status) { |
| | | case 1: |
| | | return 'warning'; |
| | | case 3: |
| | | return 'info'; |
| | | case 7: |
| | | return 'success'; |
| | | case 8: |
| | | return 'primary'; |
| | | } |
| | | } |
| | | function getStatusText(status: number) { |
| | | switch (status) { |
| | | case 1: |
| | | return t('reportmanage.dreportwork'); |
| | | case 3: |
| | | return t('reportmanage.reportwork'); |
| | | case 7: |
| | | return t('reportmanage.pendingwork'); |
| | | case 8: |
| | | return t('reportmanage.reportworked'); |
| | | } |
| | | } |
| | | let socket = null; |
| | | // const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`; |
| | | // const handleMessage = (data) => { |
| | | // adjustedRects.value = data.device[0].map(rect => ({ |
| | | // ...rect, |
| | | // completed: rect.completedQuantity, |
| | | // breakage: rect.breakageQuantity, |
| | | // thisProcess: rect.thisProcess, |
| | | // })); |
| | | // }; |
| | | // let socket; |
| | | onUnmounted(() => { |
| | | socket.close(); |
| | | }); |
| | | onMounted(() => { |
| | | fetchTableData(); |
| | | parseAndSetTime(); |
| | | // socket = initializeWebSocket(socketUrl, handleMessage); |
| | | }); |
| | | onUnmounted(() => { |
| | | if (socket) { |
| | | closeWebSocket(socket); |
| | | } |
| | | }); |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | |
| | | <style scoped></style> |
| New file |
| | |
| | | <script setup> |
| | | import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue" |
| | | import {useRouter} from "vue-router"; |
| | | let indexFlag=$ref(1) |
| | | function changeRouter(index){ |
| | | indexFlag=index |
| | | } |
| | | </script> |
| | | <template> |
| | | <div id="main-body"> |
| | | <router-view /> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | #main-div{ |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | #div-title{ |
| | | height: 2%; |
| | | width: 100%; |
| | | } |
| | | #searchButton{ |
| | | margin-top: -5px; |
| | | margin-left: 1rem; |
| | | } |
| | | #main-body{ |
| | | width: 100%; |
| | | height: 95%; |
| | | /* margin-top: 1%; */ |
| | | } |
| | | #select{ |
| | | margin-left:0.5rem; |
| | | } |
| | | :deep(.indexTag .el-breadcrumb__inner){ |
| | | color: #5CADFE !important; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div> |
| | | <div style="display: flex;width: 1770px;"> |
| | | <el-input v-model="rawGlassWidth" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('Mounting.width')" /> |
| | | <el-input v-model="rawGlassHeight" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('Mounting.height')" /> |
| | | <el-input v-model="rawGlassThickness" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('Mounting.thickness')" /> |
| | | <el-input v-model="rawGlassfilmsId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('workOrder.coatingtypesbe')" /> |
| | | <el-input v-model="slot" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('workOrder.upnumber')" /> |
| | | <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('searchOrder.taskstatus')" clearable |
| | | style="width: 200px;margin-left: 10px;"> |
| | | <el-option :label="$t('searchOrder.empty')" value="0"></el-option> |
| | | <el-option :label="$t('film.execution')" value="1"></el-option> |
| | | <el-option :label="$t('searchOrder.endtask')" value="2"></el-option> |
| | | </el-select> |
| | | <el-date-picker |
| | | style="margin-left: 15px;" |
| | | v-model="timeRange" |
| | | type="datetimerange" |
| | | :shortcuts="shortcuts" |
| | | range-separator="至" |
| | | :start-placeholder="$t('reportmanage.starttime')" |
| | | :end-placeholder="$t('reportmanage.endtime')" |
| | | /> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{$t('reportmanage.inquire')}}</el-button> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 580px;width: 1770px;" :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="rawGlassWidth" align="center" :label="$t('Mounting.width')" min-width="70" /> |
| | | <el-table-column prop="rawGlassHeight" align="center" :label="$t('Mounting.height')" min-width="70" /> |
| | | <el-table-column prop="rawGlassThickness" align="center" :label="$t('Mounting.thickness')" min-width="80" /> |
| | | <el-table-column prop="rawGlassFilmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80" /> |
| | | <el-table-column prop="slot" align="center" :label="$t('workOrder.upnumber')" min-width="80" /> |
| | | <el-table-column prop="totalCount" align="center" :label="$t('basicData.tonumber')" min-width="80" /> |
| | | <el-table-column prop="finishCount" align="center" :label="$t('basicData.finishnumber')" min-width="80" /> |
| | | <el-table-column prop="damageCount" align="center" :label="$t('hellow.damagenumber')" min-width="80" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.taskstatus')" |
| | | min-width="80" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypeb(scope.row.taskState)"> |
| | | {{ getStatusTextb(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('reportmanage.starttime')" min-width="100" /> |
| | | <el-table-column prop="formattedUpdateTime" align="center" :label="$t('reportmanage.endtime')" min-width="100" /> |
| | | </el-table> |
| | | <div style="margin-top: 20px;margin-left: 40%;"> |
| | | <el-pagination |
| | | v-model:current-page="currentPage2" |
| | | :page-size="pageSize" |
| | | :size="large" |
| | | :disabled="disabled" |
| | | layout="prev, pager, next, jumper" |
| | | :total="totalRecords" |
| | | @current-change="handlePageChange2" |
| | | style="margin-top: 10px;" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import {useI18n} from 'vue-i18n' |
| | | import {useRouter} from "vue-router" |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {ElMessage, ElMessageBox} from 'element-plus' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | import { inject } from 'vue'; |
| | | const globalDate = inject('globalDate'); |
| | | const router = useRouter() |
| | | const timeRange = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const tableDatax = ref([]) |
| | | const currentPage2 = ref(1) |
| | | const totalRecords = ref(0) |
| | | const rawGlassHeight = ref(''); |
| | | const rawGlassThickness = ref(''); |
| | | const rawGlassWidth = ref(''); |
| | | const rawGlassfilmsId = ref(''); |
| | | const slot = ref(''); |
| | | let getglobalDate = window.localStorage.getItem('getglobalDate') |
| | | const historical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/loadGlass/loadglassdevicetaskhistory/queryLoadGlassHistoryTask", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | rawGlassHeight: '', |
| | | rawGlassThickness: '', |
| | | rawGlassWidth: '', |
| | | rawGlassfilmsId: '', |
| | | slot: 0, |
| | | station: 1, |
| | | taskStateList: [], |
| | | beginDate: startTime, |
| | | endDate: getglobalDate |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | const handlePageChange2 = (newPage) => { |
| | | currentPage2.value = newPage; |
| | | window.localStorage.setItem('pagenumber', currentPage2.value) |
| | | historicala(currentPage2.value); |
| | | }; |
| | | const historicala = async (page) => { |
| | | try { |
| | | let pslot= '' |
| | | let celllist=[] |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(slot.value != ""){ |
| | | pslot = slot.value |
| | | }else{ |
| | | pslot = '0' |
| | | } |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/loadGlass/loadglassdevicetaskhistory/queryLoadGlassHistoryTask", { |
| | | pageNo: page, |
| | | pageSize: 20, |
| | | rawGlassHeight: rawGlassHeight.value, |
| | | rawGlassThickness: rawGlassThickness.value, |
| | | rawGlassWidth: rawGlassWidth.value, |
| | | rawGlassfilmsId: rawGlassfilmsId.value, |
| | | slot: pslot, |
| | | station: 1, |
| | | taskStateList: celllist, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 历史查询点击 |
| | | const sethistorical = async () => { |
| | | try { |
| | | let pslot= '' |
| | | let celllist=[] |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(slot.value != ""){ |
| | | pslot = slot.value |
| | | }else{ |
| | | pslot = '0' |
| | | } |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | const response = await request.post("/loadGlass/loadglassdevicetaskhistory/queryLoadGlassHistoryTask", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | rawGlassHeight: rawGlassHeight.value, |
| | | rawGlassThickness: rawGlassThickness.value, |
| | | rawGlassWidth: rawGlassWidth.value, |
| | | rawGlassfilmsId: rawGlassfilmsId.value, |
| | | slot: pslot, |
| | | station: 1, |
| | | taskStateList: celllist, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | currentPage2.value = 1 |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | const shortcuts = [ |
| | | { |
| | | text: '最近一周', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setDate(oneWeekAgo.getDate() - 7) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近一个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 1) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近三个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 3) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | ] |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(getglobalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | function getStatusTypeb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'primary'; |
| | | case 1: |
| | | return 'success'; |
| | | case 2: |
| | | return 'info'; |
| | | } |
| | | } |
| | | function getStatusTextb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('searchOrder.empty'); |
| | | case 1: |
| | | return t('film.execution'); |
| | | case 2: |
| | | return t('searchOrder.endtask'); |
| | | } |
| | | } |
| | | function getStatusTypea(taskRunning: number) { |
| | | switch (taskRunning) { |
| | | case 0: |
| | | return 'primary'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | onMounted(() => { |
| | | parseAndSetTime(); |
| | | historical(); |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div> |
| | | <div style="display: flex;width: 1770px;"> |
| | | <el-input v-model="rawGlassWidth" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('Mounting.width')" /> |
| | | <el-input v-model="rawGlassHeight" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('Mounting.height')" /> |
| | | <el-input v-model="rawGlassThickness" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('Mounting.thickness')" /> |
| | | <el-input v-model="rawGlassfilmsId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('workOrder.coatingtypesbe')" /> |
| | | <el-input v-model="slot" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('workOrder.upnumber')" /> |
| | | <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('searchOrder.taskstatus')" clearable |
| | | style="width: 200px;margin-left: 10px;"> |
| | | <el-option :label="$t('searchOrder.empty')" value="0"></el-option> |
| | | <el-option :label="$t('film.execution')" value="1"></el-option> |
| | | <el-option :label="$t('searchOrder.endtask')" value="2"></el-option> |
| | | </el-select> |
| | | <el-date-picker |
| | | style="margin-left: 15px;" |
| | | v-model="timeRange" |
| | | type="datetimerange" |
| | | :shortcuts="shortcuts" |
| | | range-separator="至" |
| | | :start-placeholder="$t('reportmanage.starttime')" |
| | | :end-placeholder="$t('reportmanage.endtime')" |
| | | /> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{$t('reportmanage.inquire')}}</el-button> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 580px;width: 1770px;" :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="rawGlassWidth" align="center" :label="$t('Mounting.width')" min-width="70" /> |
| | | <el-table-column prop="rawGlassHeight" align="center" :label="$t('Mounting.height')" min-width="70" /> |
| | | <el-table-column prop="rawGlassThickness" align="center" :label="$t('Mounting.thickness')" min-width="80" /> |
| | | <el-table-column prop="rawGlassFilmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80" /> |
| | | <el-table-column prop="slot" align="center" :label="$t('workOrder.upnumber')" min-width="80" /> |
| | | <el-table-column prop="totalCount" align="center" :label="$t('basicData.tonumber')" min-width="80" /> |
| | | <el-table-column prop="finishCount" align="center" :label="$t('basicData.finishnumber')" min-width="80" /> |
| | | <el-table-column prop="damageCount" align="center" :label="$t('hellow.damagenumber')" min-width="80" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.taskstatus')" |
| | | min-width="80" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypeb(scope.row.taskState)"> |
| | | {{ getStatusTextb(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('reportmanage.starttime')" min-width="100" /> |
| | | <el-table-column prop="formattedUpdateTime" align="center" :label="$t('reportmanage.endtime')" min-width="100" /> |
| | | </el-table> |
| | | <div style="margin-top: 20px;margin-left: 40%;"> |
| | | <el-pagination |
| | | v-model:current-page="currentPage2" |
| | | :page-size="pageSize" |
| | | :size="large" |
| | | :disabled="disabled" |
| | | layout="prev, pager, next, jumper" |
| | | :total="totalRecords" |
| | | @current-change="handlePageChange2" |
| | | style="margin-top: 10px;" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import {useI18n} from 'vue-i18n' |
| | | import {useRouter} from "vue-router" |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {ElMessage, ElMessageBox} from 'element-plus' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | import { inject } from 'vue'; |
| | | const globalDate = inject('globalDate'); |
| | | const router = useRouter() |
| | | const timeRange = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const tableDatax = ref([]) |
| | | const currentPage2 = ref(1) |
| | | const totalRecords = ref(0) |
| | | const rawGlassHeight = ref(''); |
| | | const rawGlassThickness = ref(''); |
| | | const rawGlassWidth = ref(''); |
| | | const rawGlassfilmsId = ref(''); |
| | | const slot = ref(''); |
| | | let getglobalDate = window.localStorage.getItem('getglobalDate') |
| | | const historical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/loadGlass/loadglassdevicetaskhistory/queryLoadGlassHistoryTask", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | rawGlassHeight: '', |
| | | rawGlassThickness: '', |
| | | rawGlassWidth: '', |
| | | rawGlassfilmsId: '', |
| | | slot: 0, |
| | | station: 2, |
| | | taskStateList: [], |
| | | beginDate: startTime, |
| | | endDate: getglobalDate |
| | | }) |
| | | if (response.code == 200) { |
| | | currentPage2.value = 1 |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | const handlePageChange2 = (newPage) => { |
| | | currentPage2.value = newPage; |
| | | window.localStorage.setItem('pagenumber', currentPage2.value) |
| | | historicala(currentPage2.value); |
| | | }; |
| | | const historicala = async (page) => { |
| | | try { |
| | | let pslot= '' |
| | | let celllist=[] |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(slot.value != ""){ |
| | | pslot = slot.value |
| | | }else{ |
| | | pslot = '0' |
| | | } |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/loadGlass/loadglassdevicetaskhistory/queryLoadGlassHistoryTask", { |
| | | pageNo: page, |
| | | pageSize: 20, |
| | | rawGlassHeight: rawGlassHeight.value, |
| | | rawGlassThickness: rawGlassThickness.value, |
| | | rawGlassWidth: rawGlassWidth.value, |
| | | rawGlassfilmsId: rawGlassfilmsId.value, |
| | | slot: pslot, |
| | | station: 2, |
| | | taskStateList: celllist, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 历史查询点击 |
| | | const sethistorical = async () => { |
| | | try { |
| | | let pslot= '' |
| | | let celllist=[] |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(slot.value != ""){ |
| | | pslot = slot.value |
| | | }else{ |
| | | pslot = '0' |
| | | } |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | const response = await request.post("/loadGlass/loadglassdevicetaskhistory/queryLoadGlassHistoryTask", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | rawGlassHeight: rawGlassHeight.value, |
| | | rawGlassThickness: rawGlassThickness.value, |
| | | rawGlassWidth: rawGlassWidth.value, |
| | | rawGlassfilmsId: rawGlassfilmsId.value, |
| | | slot: pslot, |
| | | station: 2, |
| | | taskStateList: celllist, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | const shortcuts = [ |
| | | { |
| | | text: '最近一周', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setDate(oneWeekAgo.getDate() - 7) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近一个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 1) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近三个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 3) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | ] |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(getglobalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | function getStatusTypeb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'primary'; |
| | | case 1: |
| | | return 'success'; |
| | | case 2: |
| | | return 'info'; |
| | | } |
| | | } |
| | | function getStatusTextb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('searchOrder.empty'); |
| | | case 1: |
| | | return t('film.execution'); |
| | | case 2: |
| | | return t('searchOrder.endtask'); |
| | | } |
| | | } |
| | | function getStatusTypea(taskRunning: number) { |
| | | switch (taskRunning) { |
| | | case 0: |
| | | return 'primary'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | onMounted(() => { |
| | | parseAndSetTime(); |
| | | historical(); |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | </style> |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { onBeforeUnmount, onMounted, onUnmounted, reactive, ref, computed } from "vue"; |
| | | import { useRouter } from "vue-router" |
| | | import { ElMessage, ElMessageBox } 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() |
| | | const selectValuesa = reactive([]); |
| | | const selectedProjectNo = ref(''); |
| | | const stationCell = ref('1'); |
| | | const filmRemove = ref(''); |
| | | const dialogFormVisible = ref(false) |
| | | const blind = ref(false) |
| | | const blinda = ref(false) |
| | | const blindb = ref(false) |
| | | const blindbd = ref(false) |
| | | const ReportData = ref(true); |
| | | const canSelectProjecta = ref(true); |
| | | const canSelectProjectb = ref(true); |
| | | const canSelectProjectc = ref(false); |
| | | const tableDatax = ref([]) |
| | | const tableDatad = ref([]) |
| | | const upstatus = ref(t('basicData.machineaa')); |
| | | const cuttingMachineStatusColor = ref('#911005'); |
| | | const tableDataa = ref<any[]>([]); |
| | | const tableDatab = ref<any[]>([]); |
| | | const stationInfos = reactive({}); |
| | | const buttonEnabledStatus = ref({}); |
| | | const globalDate = inject('globalDate'); |
| | | import { inject } from 'vue'; |
| | | import { tr } from "element-plus/es/locale"; |
| | | const tableData = ref([]) |
| | | const titleSelectJson = ref({ |
| | | engineerId: [], |
| | | }) |
| | | request.post("/loadGlass/up-patten-usage/setUpPattenRequest", { |
| | | state: null, |
| | | stationCell: 5 |
| | | }).then((response) => { |
| | | if (response.code == 200) { |
| | | } else { |
| | | // ElMessage.warning(response.msg) |
| | | } |
| | | }); |
| | | const selectproject = () => { |
| | | dialogFormVisible.value = true; |
| | | selectgong(); |
| | | }; |
| | | const markingMachineStatus = ref('#911005'); |
| | | const cuttingMachineStatus = ref('#911005'); |
| | | const confirmMarkingMachine = () => { |
| | | markingMachineStatus.value = 'green'; |
| | | }; |
| | | const confirmCuttingMachine = () => { |
| | | cuttingMachineStatus.value = 'green'; |
| | | }; |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | }); |
| | | onUnmounted(() => { |
| | | if (socket) { |
| | | closeWebSocket(socket); |
| | | } |
| | | }); |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlassOne`; |
| | | const handleMessage = (data: any) => { |
| | | if (data.inkageState != null) { |
| | | cuttingMachineStatusColor.value = data.inkageState[0] === 1 ? 'green' : '#911005'; |
| | | } |
| | | if (data.stationList.length != 0) { |
| | | const processedData = [...data.stationList[0]]; |
| | | if (processedData.length > 0) { |
| | | processedData[0] = { ...processedData[0], workstationId: 1 }; |
| | | } |
| | | if (processedData.length > 1) { |
| | | processedData[1] = { ...processedData[1], workstationId: 2 }; |
| | | } |
| | | tableDataa.value = processedData; |
| | | } else { |
| | | tableDataa.value = [] |
| | | } |
| | | if (data.upPattenUsages.length != 0) { |
| | | tableData.value = data.upPattenUsages[0] |
| | | window.localStorage.setItem('engineeringIda', tableData.value[0].engineeringId) |
| | | canSelectProjecta.value = false; |
| | | canSelectProjectb.value = false; |
| | | canSelectProjectc.value = true; |
| | | } |
| | | else { |
| | | canSelectProjecta.value = true; |
| | | canSelectProjectb.value = true; |
| | | canSelectProjectc.value = false; |
| | | tableData.value = []; |
| | | window.localStorage.setItem('engineeringIda', '') |
| | | } |
| | | }; |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | 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.engineerId = response.data; |
| | | } else { |
| | | // ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | }; |
| | | //选择工程预览确认 |
| | | const handlesure = async () => { |
| | | try { |
| | | const response = await request.post('/loadGlass/up-patten-usage/selectUpPattenUsage', { |
| | | stationCell: 5, |
| | | engineerId: selectedProjectNo.value, |
| | | filmRemove: parseInt(filmRemove.value, 10), |
| | | }) |
| | | window.localStorage.setItem('engineeringIda', selectedProjectNo.value) |
| | | window.localStorage.setItem('filmRemove', filmRemove.value) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | closeWebSocket(socket); |
| | | tableData.value = response.data; |
| | | dialogFormVisible.value = false; |
| | | selectedProjectNo.value = ''; |
| | | filmRemove.value = ''; |
| | | markingMachineStatus.value = '#911005'; |
| | | cuttingMachineStatus.value = '#911005'; |
| | | ReportData.value = false; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 开始上片 |
| | | const handleon = async () => { |
| | | let filmRemove = window.localStorage.getItem('filmRemove') |
| | | let engineeringId = window.localStorage.getItem('engineeringIda') |
| | | if (markingMachineStatus.value === 'green' && cuttingMachineStatus.value === 'green') { |
| | | try { |
| | | const response = await request.post('/loadGlass/engineering/engineering/changeTask', { |
| | | stationCell: 5, |
| | | filmRemove: filmRemove, |
| | | engineerId: engineeringId, |
| | | state: 1, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | canSelectProjecta.value = false; |
| | | canSelectProjectb.value = false; |
| | | canSelectProjectc.value = true; |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | blind.value = false; |
| | | ReportData.value = true; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } else if (markingMachineStatus.value === '#911005' || cuttingMachineStatus.value === '#911005') { |
| | | ElMessage.warning(t('basicData.pausea')); |
| | | } |
| | | } |
| | | // 暂停 |
| | | const handleup = async () => { |
| | | try { |
| | | let filmRemove = window.localStorage.getItem('filmRemove') |
| | | let engineeringId = window.localStorage.getItem('engineeringIda') |
| | | if (engineeringId !== '') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/pause', { |
| | | stationCell: 5, |
| | | filmRemove: filmRemove, |
| | | engineerId: engineeringId, |
| | | state: 0, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blinda.value = false; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } else { |
| | | ElMessage({ |
| | | type: 'info', |
| | | message: t('basicData.infonull'), |
| | | }) |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 查询数据 |
| | | const selectReportData = async () => { |
| | | let stateList = [] |
| | | if (selectValuesa[0] != null && selectValuesa[0] != 'undefined') { |
| | | if (selectValuesa[0] != "") { |
| | | stateList = [selectValuesa[0]]; |
| | | } |
| | | } |
| | | const response = await request.post("/loadGlass/up-patten-usage/setUpPattenRequest", { |
| | | state: selectValuesa[0], |
| | | stationCell: 5 |
| | | }) |
| | | if (response.code === 200) { |
| | | tableData.value = response.data; |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | }; |
| | | // 开始上片 |
| | | const handleBind = (row) => { |
| | | blind.value = true; |
| | | }; |
| | | // 暂停 |
| | | const handleBinda = (row) => { |
| | | blinda.value = true; |
| | | }; |
| | | const toggleEnableState = async (row: any) => { |
| | | if (!row.id) { |
| | | ElMessage.error(t('basicData.updatanull')); |
| | | return; |
| | | } |
| | | const newState = row.state === 100 ? 0 : 100; |
| | | try { |
| | | const response = await request.post('/loadGlass/up-patten-usage/updateGlassState', { id: row.id, state: newState }); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | row.state = newState; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | ElMessage.error(t('basicData.glassnull')); |
| | | } |
| | | }; |
| | | // 破损 |
| | | const opena = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.broke'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/identControls', { |
| | | glassId: row.glassId, |
| | | line: 5, |
| | | status: 1, |
| | | state: 8, |
| | | workingProcedure: '上片', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error('发生错误:', error); |
| | | } |
| | | }; |
| | | // 人工拿走 |
| | | const openb = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('order.takeawaya'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/identControls', { |
| | | glassId: row.glassId, |
| | | line: 5, |
| | | status: 1, |
| | | state: 9, |
| | | workingProcedure: '上片', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error('发生错误:', error); |
| | | } |
| | | }; |
| | | |
| | | // 架子复位 |
| | | const handleptask = async (workstationId: number) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('basicData.prackreset'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | |
| | | const slot = workstationId === 1 ? 101 : (workstationId === 2 ? 102 : null); |
| | | if (slot !== null) { |
| | | const response = await request.post('/glassStorage/rawGlassStorageDetails/shelfReset', { |
| | | slot: slot, |
| | | }) |
| | | // const url = `/loadGlass/rawGlassStorageDetails/shelfReset?slot=${slot}`; |
| | | // const response = await request.post(url); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } else { |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 结束工程 |
| | | const deleteTask = async () => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.pdeleteTask'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | let engineeringId = window.localStorage.getItem('engineeringIda') |
| | | if (engineeringId !== '') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/deleteTask', { |
| | | engineerId: engineeringId, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | canSelectProjecta.value = true; |
| | | canSelectProjectb.value = true; |
| | | canSelectProjectc.value = false; |
| | | blindb.value = true; |
| | | tableDatad.value = response.data; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } else { |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 历史任务 |
| | | const iframeUrl = ref(''); |
| | | const handlehistorical = (row) => { |
| | | blindbd.value = true; |
| | | iframeUrl.value = `${window.location.origin}/#/Returns/upreturnhistory`; |
| | | }; |
| | | function getStatusType2(filmRemove) { |
| | | switch (filmRemove) { |
| | | case 0: |
| | | return 'success'; |
| | | case 1: |
| | | return 'info'; |
| | | case 2: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusText2(filmRemove) { |
| | | switch (filmRemove) { |
| | | case 0: |
| | | return t('Mounting.noremoval');//完成 |
| | | case 1: |
| | | return t('Mounting.coarselyground');//新建 |
| | | case 2: |
| | | return t('Mounting.finegrinding');//执行中 |
| | | } |
| | | } |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <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> |
| | | </div> |
| | | <el-button :disabled="!canSelectProjecta" style="margin-top: 5px;margin-left: 15px;" type="primary" |
| | | @click="selectproject">{{ $t('Mounting.previewproject') }}</el-button> |
| | | <el-button :disabled="!canSelectProjectb" style="margin-top: 5px;margin-left: 20px;" type="success" |
| | | @click="handleBind">{{ $t('basicData.startloading') }}</el-button> |
| | | <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" |
| | | type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button> |
| | | <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" |
| | | type="danger" @click="deleteTask">{{ $t('searchOrder.deleteTask') }}</el-button> |
| | | <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlehistorical">{{ |
| | | $t('searchOrder.historicaltasks') }}</el-button> |
| | | <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.oneloadingline')" |
| | | 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.all')" value="null"></el-option> |
| | | <el-option :label="$t('Mounting.waiting')" value="0"></el-option> |
| | | <el-option :label="$t('Mounting.pass')" value="100"></el-option> |
| | | </el-select> |
| | | <el-button :disabled="!ReportData" type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ |
| | | $t('Mounting.setparameters') }}</el-button> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;"> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> |
| | | <el-table height="400" ref="table" :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }" |
| | | :data="tableData"> |
| | | <el-table-column prop="engineeringId" :label="$t('Mounting.project')" width="120" align="center" /> |
| | | <el-table-column prop="width" :label="$t('Mounting.width')" width="200" align="center" /> |
| | | <el-table-column prop="height" :label="$t('Mounting.height')" align="center" /> |
| | | <el-table-column prop="thickness" :label="$t('Mounting.thickness')" align="center" /> |
| | | <el-table-column prop="filmsId" :label="$t('Mounting.loadinglinea')" align="center" /> |
| | | <el-table-column prop="layoutSequence" :label="$t('Mounting.projectnumber')" align="center" /> |
| | | <el-table-column align="center" :label="$t('Mounting.state')" min-width="80" prop="state"> |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.state === 100 ? 'success' : 'warning'" @click="toggleEnableState(scope.row)"> |
| | | {{ scope.row.state === 100 ? $t('Mounting.pass') : $t('Mounting.waiting') }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | <div style="display: flex;"> |
| | | <div style="width: 49%;float: left;margin-left: 300px;"> |
| | | <div style="display: flex;"> |
| | | <img src="../../assets/shangpianji.png" alt="" |
| | | style="max-width: 20%;max-height: 25%;margin-left: 10%;margin-top: 5%;"> |
| | | <el-table :data="tableDataa" border style="margin-top: 10%;margin-left: 8%;" width="500" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="workstationId" align="center" :label="$t('basicData.station')" min-width="65" /> |
| | | <el-table-column prop="patternWidth" align="center" :label="$t('basicData.width')" min-width="75" /> |
| | | <el-table-column prop="patternHeight" align="center" :label="$t('basicData.height')" min-width="75" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80" /> |
| | | <el-table-column prop="remainQuantity" align="center" :label="$t('basicData.quantity')" min-width="80" /> |
| | | <el-table-column prop="patternThickness" align="center" :label="$t('basicData.thickness')" |
| | | min-width="60" /> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-button :disabled="(!scope.row.patternThickness)" type="text" plain |
| | | @click="handleptask(scope.row.workstationId)">{{ $t('basicData.rackreset') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-dialog v-model="blind" top="30vh" width="25%" :title="$t('basicData.startfilm')"> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleon"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="blind = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <!-- 结束工程 --> |
| | | <el-dialog v-model="blindb" top="10vh" width="80%"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 450px;" :data="tableDatad" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="engineerId" fixed align="center" :label="$t('basicData.projectnumber')" /> |
| | | <el-table-column prop="glassId" fixed align="center" :label="$t('searchOrder.glassID')" /> |
| | | <el-table-column prop="temperingLayoutId" fixed align="center" :label="$t('searchOrder.layoutID')" /> |
| | | <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" /> |
| | | <el-table-column prop="width" align="center" :label="$t('basicData.width')" /> |
| | | <el-table-column prop="height" align="center" :label="$t('basicData.height')" /> |
| | | <el-table-column prop="thickness" align="center" :label="$t('basicData.thickness')" /> |
| | | <el-table-column prop="filmsid" align="center" :label="$t('basicData.coatingtypes')" /> |
| | | <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.processcards')" /> |
| | | <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="200"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="opena(scope.row)">{{ $t('order.dilapidation') }}</el-button> |
| | | <el-button type="text" plain @click="openb(scope.row)">{{ $t('order.takeaway') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button @click="blindb = false">{{ $t('large.close') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="blinda" top="24vh" width="30%" :title="$t('basicData.whetherpause')"> |
| | | <div style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('Mounting.loadingline')" :required="true"> |
| | | <el-select disabled v-model="stationCell" clearable :placeholder="$t('Mounting.inloadingline')" |
| | | style="margin-left: 20px;"> |
| | | <el-option :label="$t('Mounting.all')" value="0"></el-option> |
| | | <el-option :label="$t('Mounting.oneloadingline')" value="1"></el-option> |
| | | <el-option :label="$t('Mounting.twoloadingline')" value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleup"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="blinda = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | <el-dialog v-model="dialogFormVisible" top="24vh" width="70%"> |
| | | <div class="flex-container" style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('Mounting.loadingline')" :required="true"> |
| | | <el-select disabled v-model="stationCell" 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['engineerId']" :key="item.id" :label="item.projectNo" |
| | | :value="item.projectNo" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item :label="$t('Mounting.removalmethoda')" :required="true"> |
| | | <el-select v-model="filmRemove" clearable :placeholder="$t('Mounting.removalmethod')"> |
| | | <el-option :label="$t('Mounting.noremoval')" value="0"></el-option> |
| | | <el-option :label="$t('Mounting.coarselyground')" value="1"></el-option> |
| | | <el-option :label="$t('Mounting.finegrinding')" value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handlesure"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="dialogFormVisible = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <!-- 历史任务 --> |
| | | <el-dialog v-model="blindbd" top="5vh" width="95%" @close="iframeUrl=''"> |
| | | <iframe :src="iframeUrl" marginwidth="2000px" marginheight="2000px" width="100%" height="750px" |
| | | frameborder="0"></iframe> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | .flex-container { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .flex-container .el-form-item { |
| | | flex: 1; |
| | | margin-right: 0; |
| | | /* 移除默认的右侧边距 */ |
| | | } |
| | | |
| | | .flex-container .el-form-item:last-child { |
| | | margin-left: 20px; |
| | | /* 为第二个表单项添加左侧边距 */ |
| | | } |
| | | |
| | | #dt { |
| | | display: block; |
| | | float: left; |
| | | line-height: 20px; |
| | | margin-left: 100px; |
| | | } |
| | | |
| | | #dta { |
| | | display: block; |
| | | float: left; |
| | | line-height: 20px; |
| | | margin-left: 80%; |
| | | } |
| | | |
| | | #dialog-footer { |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | |
| | | #dotClass { |
| | | display: flex; |
| | | margin-left: 20px; |
| | | size: 50px; |
| | | margin-top: 20px; |
| | | margin-bottom: 10px; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref, computed} from "vue"; |
| | | import {useRouter} from "vue-router" |
| | | import { ElMessage, ElMessageBox } 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() |
| | | const selectValuesa = reactive([]); |
| | | const selectedProjectNo = ref(''); |
| | | const stationCell = ref('2'); |
| | | const filmRemove = ref(''); |
| | | const dialogFormVisible = ref(false) |
| | | const blind = ref(false) |
| | | const blinda = ref(false) |
| | | const ReportData = ref(true); |
| | | const blindb = ref(false) |
| | | const blindbd = ref(false) |
| | | const canSelectProjecta = ref(true); |
| | | const canSelectProjectb = ref(true); |
| | | const canSelectProjectc = ref(false); |
| | | const tableDatad = ref([]) |
| | | const upstatus = ref(t('basicData.machineaa')); |
| | | const cuttingMachineStatusColor = ref('#911005'); |
| | | const tableDataa = ref<any[]>([]); |
| | | const tableDatab = ref<any[]>([]); |
| | | const tableData = ref([]) |
| | | const titleSelectJson = ref({ |
| | | engineerId: [], |
| | | }) |
| | | request.post("/loadGlass/up-patten-usage/setUpPattenRequest",{ |
| | | state: null, |
| | | stationCell: 6 |
| | | }).then((response) => { |
| | | if (response.code == 200) { |
| | | } else { |
| | | // ElMessage.warning(response.msg) |
| | | } |
| | | }); |
| | | const selectproject = () => { |
| | | dialogFormVisible.value = true; |
| | | selectgong(); |
| | | }; |
| | | const markingMachineStatus = ref('#911005'); |
| | | const cuttingMachineStatus = ref('#911005'); |
| | | const confirmMarkingMachine = () => { |
| | | markingMachineStatus.value = 'green'; |
| | | }; |
| | | const confirmCuttingMachine = () => { |
| | | cuttingMachineStatus.value = 'green'; |
| | | }; |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | }); |
| | | onUnmounted(() => { |
| | | if (socket) { |
| | | closeWebSocket(socket); |
| | | } |
| | | }); |
| | | const fetchTableData = async () => { |
| | | try { |
| | | const response = await request.get("/loadGlass/up-patten-usage/prioritylist"); |
| | | if (response.code === 200) { |
| | | tableData.splice(0, tableData.length, ...response.data); |
| | | // ElMessage.error(response.message); |
| | | window.localStorage.setItem('engineeringIda', tableData[0].engineeringId) |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlassTwo`; |
| | | const handleMessage = (data: any) => { |
| | | if (data.stationList.length != 0) { |
| | | const processedData = [...data.stationList[0]]; |
| | | if (processedData.length > 0) { |
| | | processedData[0] = { ...processedData[0], workstationId: 1 }; |
| | | } |
| | | if (processedData.length > 1) { |
| | | processedData[1] = { ...processedData[1], workstationId: 2 }; |
| | | } |
| | | tableDataa.value = processedData; |
| | | }else { |
| | | tableDataa.value = [] |
| | | } |
| | | if (data.inkageState != null) { |
| | | cuttingMachineStatusColor.value = data.inkageState[0] === 1 ? 'green' : '#911005'; |
| | | } |
| | | if (data.upPattenUsages.length != 0) { |
| | | tableData.value = data.upPattenUsages[0] |
| | | window.localStorage.setItem('engineeringIda', tableData.value[0].engineeringId) |
| | | canSelectProjecta.value = false; |
| | | canSelectProjectb.value = false; |
| | | canSelectProjectc.value = true; |
| | | } |
| | | else { |
| | | tableData.value = []; |
| | | canSelectProjecta.value = true; |
| | | canSelectProjectb.value = true; |
| | | canSelectProjectc.value = false; |
| | | } |
| | | }; |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | // 结束工程 |
| | | const handledelete = (row) => { |
| | | blindb.value = true; |
| | | }; |
| | | 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.engineerId = response.data; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | }; |
| | | // 架子复位 |
| | | const handleptask = async (workstationId: number) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('basicData.prackreset'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | |
| | | const slot = workstationId === 3 ? 103 : (workstationId === 4 ? 104 : null); |
| | | if (slot !== null) { |
| | | const response = await request.post('/glassStorage/rawGlassStorageDetails/shelfReset', { |
| | | slot: slot, |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } else { |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | //选择工程预览确认 |
| | | const handlesure = async () => { |
| | | try { |
| | | const response = await request.post('/loadGlass/up-patten-usage/selectUpPattenUsage', { |
| | | stationCell: 6, |
| | | engineerId: selectedProjectNo.value, |
| | | filmRemove: parseInt(filmRemove.value, 10), |
| | | }) |
| | | window.localStorage.setItem('engineeringIda', selectedProjectNo.value) |
| | | window.localStorage.setItem('filmRemove', filmRemove.value) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | closeWebSocket(socket); |
| | | tableData.value = response.data; |
| | | dialogFormVisible.value = false; |
| | | selectedProjectNo.value = ''; |
| | | filmRemove.value = ''; |
| | | markingMachineStatus.value = '#911005'; |
| | | cuttingMachineStatus.value = '#911005'; |
| | | ReportData.value = false; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 结束工程 |
| | | const deleteTask = async () => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.pdeleteTask'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | let engineeringId = window.localStorage.getItem('engineeringIda') |
| | | if (engineeringId !== '') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/deleteTask', { |
| | | engineerId: engineeringId, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | canSelectProjecta.value = true; |
| | | canSelectProjectb.value = true; |
| | | canSelectProjectc.value = false; |
| | | blindb.value = true; |
| | | tableDatad.value = response.data; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } else { |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 开始上片 |
| | | const handleon = async () => { |
| | | let filmRemove = window.localStorage.getItem('filmRemove') |
| | | let engineeringIda = window.localStorage.getItem('engineeringIda') |
| | | if (markingMachineStatus.value === 'green' && cuttingMachineStatus.value === 'green') { |
| | | try { |
| | | const response = await request.post('/loadGlass/engineering/engineering/changeTask', { |
| | | stationCell: 6, |
| | | filmRemove: filmRemove, |
| | | engineerId: engineeringIda, |
| | | state: 1, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | canSelectProjecta.value = false; |
| | | canSelectProjectb.value = false; |
| | | canSelectProjectc.value = true; |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | blind.value = false; |
| | | ReportData.value = true; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } else if (markingMachineStatus.value === '#911005' || cuttingMachineStatus.value === '#911005') { |
| | | ElMessage.warning(t('basicData.pausea')); |
| | | } |
| | | } |
| | | // 暂停 |
| | | const handleup = async () => { |
| | | try { |
| | | let filmRemove = window.localStorage.getItem('filmRemove') |
| | | let engineeringId = window.localStorage.getItem('engineeringIda') |
| | | if (engineeringId !== '') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/pause', { |
| | | stationCell: 6, |
| | | filmRemove: filmRemove, |
| | | engineerId: engineeringId, |
| | | state: 0, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blinda.value = false; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } else { |
| | | ElMessage({ |
| | | type: 'info', |
| | | message: t('basicData.infonull'), |
| | | }) |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 查询数据 |
| | | const selectReportData = async () => { |
| | | let stateList = [] |
| | | if (selectValuesa[0] != null && selectValuesa[0] != 'undefined') { |
| | | if (selectValuesa[0] != "") { |
| | | stateList = [selectValuesa[0]]; |
| | | } |
| | | } |
| | | const response = await request.post("/loadGlass/up-patten-usage/setUpPattenRequest", { |
| | | state: selectValuesa[0], |
| | | stationCell: 6 |
| | | }) |
| | | if (response.code === 200) { |
| | | tableData.value = response.data; |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | }; |
| | | onMounted(fetchTableData); |
| | | // 开始上片 |
| | | const handleBind = (row) => { |
| | | blind.value = true; |
| | | }; |
| | | // 暂停 |
| | | const handleBinda = (row) => { |
| | | blinda.value = true; |
| | | }; |
| | | const toggleEnableState = async (row: any) => { |
| | | if (!row.id) { |
| | | ElMessage.error(t('basicData.updatanull')); |
| | | return; |
| | | } |
| | | const newState = row.state === 100 ? 0 : 100; |
| | | try { |
| | | const response = await request.post('/loadGlass/up-patten-usage/updateGlassState', {id: row.id, state: newState}); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | row.state = newState; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | ElMessage.error(t('basicData.glassnull')); |
| | | } |
| | | }; |
| | | // 破损 |
| | | const opena = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.broke'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/identControls', { |
| | | glassId: row.glassId, |
| | | line: 6, |
| | | status: 1, |
| | | state: 8, |
| | | workingProcedure: '上片', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error('发生错误:', error); |
| | | } |
| | | }; |
| | | // 人工拿走 |
| | | const openb = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('order.takeawaya'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/identControls', { |
| | | glassId: row.glassId, |
| | | line: 6, |
| | | status: 1, |
| | | state: 9, |
| | | workingProcedure: '上片', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error('发生错误:', error); |
| | | } |
| | | }; |
| | | // 历史任务 |
| | | const iframeUrl = ref(''); |
| | | const handlehistorical = (row) => { |
| | | blindbd.value = true; |
| | | iframeUrl.value = `${window.location.origin}/#/Returns/upreturnhistory`; |
| | | }; |
| | | function getStatusType2(filmRemove) { |
| | | switch (filmRemove) { |
| | | case 0: |
| | | return 'success'; |
| | | case 1: |
| | | return 'info'; |
| | | case 2: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusText2(filmRemove) { |
| | | switch (filmRemove) { |
| | | case 0: |
| | | return t('Mounting.noremoval');//完成 |
| | | case 1: |
| | | return t('Mounting.coarselyground');//新建 |
| | | case 2: |
| | | return t('Mounting.finegrinding');//执行中 |
| | | } |
| | | } |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <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> |
| | | </div> |
| | | <el-button :disabled="!canSelectProjecta" style="margin-top: 5px;margin-left: 15px;" type="primary" @click="selectproject">{{ $t('Mounting.previewproject') }}</el-button> |
| | | <el-button :disabled="!canSelectProjectb" style="margin-top: 5px;margin-left: 20px;" type="success" @click="handleBind">{{ $t('basicData.startloading') }}</el-button> |
| | | <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button> |
| | | <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="deleteTask">{{ $t('searchOrder.deleteTask') }}</el-button> |
| | | <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlehistorical">{{ $t('searchOrder.historicaltasks') }}</el-button> |
| | | <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.twoloadingline')" |
| | | 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.all')" value="null"></el-option> |
| | | <el-option :label="$t('Mounting.waiting')" value="0"></el-option> |
| | | <el-option :label="$t('Mounting.pass')" value="100"></el-option> |
| | | </el-select> |
| | | <el-button :disabled="!ReportData" type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('Mounting.setparameters') }}</el-button> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;"> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> |
| | | <el-table |
| | | height="400" |
| | | ref="table" |
| | | :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" |
| | | :data="tableData" |
| | | > |
| | | <el-table-column prop="engineeringId" :label="$t('Mounting.project')" width="120" align="center"/> |
| | | <el-table-column prop="width" :label="$t('Mounting.width')" width="200" align="center"/> |
| | | <el-table-column prop="height" :label="$t('Mounting.height')" align="center"/> |
| | | <el-table-column prop="thickness" :label="$t('Mounting.thickness')" align="center"/> |
| | | <el-table-column prop="filmsId" :label="$t('Mounting.loadinglinea')" align="center"/> |
| | | <el-table-column prop="layoutSequence" :label="$t('Mounting.projectnumber')" align="center"/> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('Mounting.state')" |
| | | min-width="80" |
| | | prop="state" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag |
| | | :type="scope.row.state === 100 ? 'success' : 'warning'" |
| | | @click="toggleEnableState(scope.row)" |
| | | > |
| | | {{ scope.row.state === 100 ? $t('Mounting.pass') : $t('Mounting.waiting') }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | <div style="display: flex;"> |
| | | <div style="width: 49%;float: left;margin-left: 300px;"> |
| | | <div style="display: flex;"> |
| | | <img src="../../assets/shangpianji.png" alt="" |
| | | style="max-width: 20%;max-height: 25%;margin-left: 10%;margin-top: 5%;"> |
| | | <el-table :data="tableDataa" border style="margin-top: 10%;margin-left: 8%;" width="500" |
| | | :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" > |
| | | <el-table-column prop="workstationId" align="center" :label="$t('basicData.station')" min-width="65"/> |
| | | <el-table-column prop="patternWidth" align="center" :label="$t('basicData.width')" min-width="75"/> |
| | | <el-table-column prop="patternHeight" align="center" :label="$t('basicData.height')" min-width="75"/> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80"/> |
| | | <el-table-column prop="remainQuantity" align="center" :label="$t('basicData.quantity')" min-width="80"/> |
| | | <el-table-column prop="patternThickness" align="center" :label="$t('basicData.thickness')" min-width="60"/> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-button :disabled="(!scope.row.patternThickness)" type="text" plain @click="handleptask(scope.row.workstationId)">{{ $t('basicData.rackreset') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- 历史任务 --> |
| | | <el-dialog v-model="blindbd" top="5vh" width="95%" @close="iframeUrl=''"> |
| | | <iframe |
| | | :src="iframeUrl" |
| | | marginwidth="2000px" |
| | | marginheight="2000px" |
| | | width="100%" |
| | | height="750px" |
| | | frameborder="0" |
| | | ></iframe> |
| | | </el-dialog> |
| | | <el-dialog v-model="blind" top="30vh" width="25%" :title="$t('basicData.startfilm')"> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleon"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="blind = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <!-- 结束工程 --> |
| | | <el-dialog v-model="blindb" top="10vh" width="80%"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 450px;" :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="engineerId" fixed align="center" :label="$t('basicData.projectnumber')"/> |
| | | <el-table-column prop="glassId" fixed align="center" :label="$t('searchOrder.glassID')"/> |
| | | <el-table-column prop="temperingLayoutId" fixed align="center" :label="$t('searchOrder.layoutID')"/> |
| | | <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')"/> |
| | | <el-table-column prop="width" align="center" :label="$t('basicData.width')"/> |
| | | <el-table-column prop="height" align="center" :label="$t('basicData.height')"/> |
| | | <el-table-column prop="thickness" align="center" :label="$t('basicData.thickness')"/> |
| | | <el-table-column prop="filmsid" align="center" :label="$t('basicData.coatingtypes')"/> |
| | | <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.processcards')"/> |
| | | <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="200"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="opena(scope.row)">{{ $t('order.dilapidation') }}</el-button> |
| | | <el-button type="text" plain @click="openb(scope.row)">{{ $t('order.takeaway') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="danger" @click="deleteTask()">{{ $t('searchOrder.deleteTask') }}</el-button> |
| | | <el-button @click="blindb = false">{{ $t('large.close') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="blinda" top="24vh" width="30%" :title="$t('basicData.whetherpause')"> |
| | | <div style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('Mounting.loadingline')" :required="true"> |
| | | <el-select disabled v-model="stationCell" clearable :placeholder="$t('Mounting.inloadingline')" style="margin-left: 20px;"> |
| | | <el-option :label="$t('Mounting.all')" value="0"></el-option> |
| | | <el-option :label="$t('Mounting.oneloadingline')" value="1"></el-option> |
| | | <el-option :label="$t('Mounting.twoloadingline')" value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleup"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="blinda = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | <el-dialog v-model="dialogFormVisible" top="24vh" width="70%"> |
| | | <div class="flex-container" style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('Mounting.loadingline')" :required="true"> |
| | | <el-select disabled v-model="stationCell" 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['engineerId']" |
| | | :key="item.id" |
| | | :label="item.projectNo" |
| | | :value="item.projectNo" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item :label="$t('Mounting.removalmethoda')" :required="true"> |
| | | <el-select v-model="filmRemove" clearable :placeholder="$t('Mounting.removalmethod')"> |
| | | <el-option :label="$t('Mounting.noremoval')" value="0"></el-option> |
| | | <el-option :label="$t('Mounting.coarselyground')" value="1"></el-option> |
| | | <el-option :label="$t('Mounting.finegrinding')" value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handlesure"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="dialogFormVisible = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | .flex-container { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | .flex-container .el-form-item { |
| | | flex: 1; |
| | | margin-right: 0; /* 移除默认的右侧边距 */ |
| | | } |
| | | .flex-container .el-form-item:last-child { |
| | | margin-left: 20px; /* 为第二个表单项添加左侧边距 */ |
| | | } |
| | | #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} |
| | | #dta { display:block; float:left;line-height: 20px;margin-left: 80%;} |
| | | #dialog-footer{ |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | #dotClass { |
| | | display: flex; |
| | | margin-left: 20px; |
| | | size: 50px; |
| | | margin-top: 20px; |
| | | margin-bottom: 10px; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { onBeforeUnmount, onMounted, onUnmounted, reactive, ref, computed } from "vue"; |
| | | import { useRouter } from "vue-router" |
| | | import { ElMessage, ElMessageBox } 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() |
| | | const selectValuesa = reactive([]); |
| | | const selectedProjectNo = ref(''); |
| | | const stationCell = ref('1'); |
| | | const filmRemove = ref(''); |
| | | const dialogFormVisible = ref(false) |
| | | const blind = ref(false) |
| | | const blinda = ref(false) |
| | | const ReportData = ref(true); |
| | | const blindb = ref(false) |
| | | const blindbd = ref(false) |
| | | const canSelectProjecta = ref(true); |
| | | const canSelectProjectb = ref(true); |
| | | const canSelectProjectc = ref(false); |
| | | const tableDatad = ref([]) |
| | | const upstatus = ref(t('basicData.machineaa')); |
| | | const cuttingMachineStatusColor = ref('#911005'); |
| | | const tableDataa = ref<any[]>([]); |
| | | const tableDatab = ref<any[]>([]); |
| | | const tableData = ref([]) |
| | | |
| | | const dialogFormVisiblea = ref(false) |
| | | |
| | | |
| | | const titleSelectJson = ref({ |
| | | engineerId: [], |
| | | }) |
| | | request.post("/loadGlass/up-patten-usage/setUpPattenRequest", { |
| | | state: null, |
| | | stationCell: 5 |
| | | }).then((response) => { |
| | | if (response.code == 200) { |
| | | } else { |
| | | // ElMessage.warning(response.msg) |
| | | } |
| | | }); |
| | | const selectproject = () => { |
| | | dialogFormVisible.value = true; |
| | | selectgong(); |
| | | }; |
| | | const markingMachineStatus = ref('#911005'); |
| | | const cuttingMachineStatus = ref('#911005'); |
| | | const confirmMarkingMachine = () => { |
| | | markingMachineStatus.value = 'green'; |
| | | }; |
| | | const confirmCuttingMachine = () => { |
| | | cuttingMachineStatus.value = 'green'; |
| | | }; |
| | | |
| | | //获取原片仓储信息 |
| | | let socketB = null; |
| | | const socketUrlB = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/rawGlass`; |
| | | |
| | | // 添加新的消息处理函数 |
| | | const handleMessageB = (data) => { |
| | | if (data.rawStationDetailsList != null) { |
| | | tableDatab.value = data.rawStationDetailsList[0]; |
| | | } |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | socketB = initializeWebSocket(socketUrlB, handleMessageB); |
| | | }); |
| | | onUnmounted(() => { |
| | | if (socket) { |
| | | closeWebSocket(socket); |
| | | } |
| | | if (socketB) { |
| | | closeWebSocket(socketB); |
| | | } |
| | | }); |
| | | const fetchTableData = async () => { |
| | | try { |
| | | const response = await request.get("/loadGlass/up-patten-usage/prioritylist"); |
| | | if (response.code === 200) { |
| | | tableData.splice(0, tableData.length, ...response.data); |
| | | // ElMessage.error(response.message); |
| | | window.localStorage.setItem('engineeringIda', tableData[0].engineeringId) |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlassOne`; |
| | | const handleMessage = (data: any) => { |
| | | if (data.inkageState != null) { |
| | | cuttingMachineStatusColor.value = data.inkageState[0] === 1 ? 'green' : '#911005'; |
| | | } |
| | | if (data.stationList.length != 0) { |
| | | const processedData = [...data.stationList[0]]; |
| | | if (processedData.length > 0) { |
| | | processedData[0] = { ...processedData[0], workstationId: 1 }; |
| | | } |
| | | if (processedData.length > 1) { |
| | | processedData[1] = { ...processedData[1], workstationId: 2 }; |
| | | } |
| | | tableDataa.value = processedData; |
| | | } else { |
| | | tableDataa.value = [] |
| | | } |
| | | if (data.upPattenUsages.length != 0) { |
| | | tableData.value = data.upPattenUsages[0] |
| | | window.localStorage.setItem('engineeringIda', tableData.value[0].engineeringId) |
| | | canSelectProjecta.value = false; |
| | | canSelectProjectb.value = false; |
| | | canSelectProjectc.value = true; |
| | | } |
| | | else { |
| | | canSelectProjecta.value = true; |
| | | canSelectProjectb.value = true; |
| | | canSelectProjectc.value = false; |
| | | tableData.value = []; |
| | | window.localStorage.setItem('engineeringIda', '') |
| | | } |
| | | }; |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | // // 结束工程 |
| | | // const handledelete = (row) => { |
| | | // blindb.value = true; |
| | | // }; |
| | | // const requestData = { |
| | | // state: 100 |
| | | // }; |
| | | // const selectgong = async (queryString: string) => { |
| | | // try { |
| | | // const response = await request.post('/up-patten-usage/deleteTask', { |
| | | // ...requestData, |
| | | // query: queryString |
| | | // }); |
| | | // if (response.code == 200) { |
| | | // titleSelectJson.value.engineerId = response.data; |
| | | // } else { |
| | | // ElMessage.error(response.message); |
| | | // } |
| | | // } catch (error) { |
| | | // console.error(error); |
| | | // } |
| | | // }; |
| | | // 架子复位 |
| | | const handleptask = async (workstationId: number) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('basicData.prackreset'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | |
| | | const slot = workstationId === 3 ? 103 : (workstationId === 4 ? 104 : null); |
| | | if (slot !== null) { |
| | | const response = await request.post('/glassStorage/rawGlassStorageDetails/shelfReset', { |
| | | slot: slot, |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } else { |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | //选择工程预览确认 |
| | | // const handlesure = async () => { |
| | | // try { |
| | | // const response = await request.post('/loadGlass/up-patten-usage/selectUpPattenUsage', { |
| | | // stationCell: 5, |
| | | // engineerId: selectedProjectNo.value, |
| | | // filmRemove: parseInt(filmRemove.value, 10), |
| | | // }) |
| | | // window.localStorage.setItem('engineeringIda', selectedProjectNo.value) |
| | | // window.localStorage.setItem('filmRemove', filmRemove.value) |
| | | // if (response.code == 200) { |
| | | // ElMessage.success(response.message); |
| | | // closeWebSocket(socket); |
| | | // tableData.value = response.data; |
| | | // dialogFormVisible.value = false; |
| | | // selectedProjectNo.value = ''; |
| | | // filmRemove.value = ''; |
| | | // markingMachineStatus.value = '#911005'; |
| | | // cuttingMachineStatus.value = '#911005'; |
| | | // ReportData.value = false; |
| | | // } else { |
| | | // ElMessage.error(response.message); |
| | | // } |
| | | // } catch (error) { |
| | | // console.error(error); |
| | | // } |
| | | // } |
| | | // 结束工程 |
| | | const deleteTask = async () => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.pdeleteTask'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | let engineeringId = window.localStorage.getItem('engineeringIda') |
| | | if (engineeringId !== '') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/deleteTask', { |
| | | engineerId: engineeringId, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | canSelectProjecta.value = true; |
| | | canSelectProjectb.value = true; |
| | | canSelectProjectc.value = false; |
| | | blindb.value = true; |
| | | tableDatad.value = response.data; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } else { |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 开始上片按钮 |
| | | const handleBind = (row) => { |
| | | const quantity = inputQuantities.value[row.slot]; |
| | | if (!quantity) { |
| | | ElMessage.warning('请输入数量'); |
| | | return; |
| | | } |
| | | handleon(parseInt(row.slot), quantity); |
| | | }; |
| | | const inputQuantities = ref<{ [key: string]: string }>({}); // 用于存储输入数量 |
| | | const currentRow = ref(null); |
| | | |
| | | // 开始上片 |
| | | const handleon = async (slot: number, quantity: string) => { |
| | | try { |
| | | // 转换为整数 |
| | | const quantityNum = Number(quantity); |
| | | const slotNum = Number(slot); |
| | | |
| | | // 验证是否为有效整数 |
| | | if (!Number.isInteger(quantityNum) || !Number.isInteger(slotNum)) { |
| | | ElMessage.warning('数量和架位号必须是整数'); |
| | | return; |
| | | } |
| | | |
| | | const response = await request.post('/loadGlass/up-patten-usage/insertTask?quantity=' + quantityNum + '&slot=' + slotNum); |
| | | |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blind.value = false; |
| | | dialogFormVisiblea.value = false; |
| | | inputQuantities.value[slot] = ''; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | ElMessage.error('操作失败'); |
| | | } |
| | | }; |
| | | |
| | | // 暂停 |
| | | const handleup = async () => { |
| | | try { |
| | | let filmRemove = window.localStorage.getItem('filmRemove') |
| | | let engineeringId = window.localStorage.getItem('engineeringIda') |
| | | if (engineeringId !== '') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/pause', { |
| | | stationCell: 5, |
| | | filmRemove: filmRemove, |
| | | engineerId: engineeringId, |
| | | state: 0, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | blinda.value = false; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } else { |
| | | ElMessage({ |
| | | type: 'info', |
| | | message: t('basicData.infonull'), |
| | | }) |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 查询数据 |
| | | const selectReportData = async () => { |
| | | let stateList = [] |
| | | if (selectValuesa[0] != null && selectValuesa[0] != 'undefined') { |
| | | if (selectValuesa[0] != "") { |
| | | stateList = [selectValuesa[0]]; |
| | | } |
| | | } |
| | | const response = await request.post("/loadGlass/up-patten-usage/setUpPattenRequest", { |
| | | state: selectValuesa[0], |
| | | stationCell: 5 |
| | | }) |
| | | if (response.code === 200) { |
| | | tableData.value = response.data; |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | }; |
| | | onMounted(fetchTableData); |
| | | |
| | | |
| | | // 暂停 |
| | | const handleBinda = (row) => { |
| | | blinda.value = true; |
| | | }; |
| | | const toggleEnableState = async (row: any) => { |
| | | if (!row.id) { |
| | | ElMessage.error(t('basicData.updatanull')); |
| | | return; |
| | | } |
| | | const newState = row.state === 100 ? 0 : 100; |
| | | try { |
| | | const response = await request.post('/loadGlass/up-patten-usage/updateGlassState', { id: row.id, state: newState }); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | row.state = newState; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | ElMessage.error(t('basicData.glassnull')); |
| | | } |
| | | }; |
| | | // 破损 |
| | | const opena = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.broke'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/identControls', { |
| | | glassId: row.glassId, |
| | | line: 6, |
| | | status: 1, |
| | | state: 8, |
| | | workingProcedure: '上片', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error('发生错误:', error); |
| | | } |
| | | }; |
| | | // 人工拿走 |
| | | const openb = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('order.takeawaya'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/loadGlass/engineering/engineering/identControls', { |
| | | glassId: row.glassId, |
| | | line: 6, |
| | | status: 1, |
| | | state: 9, |
| | | workingProcedure: '上片', |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error('发生错误:', error); |
| | | } |
| | | }; |
| | | // 历史任务 |
| | | const iframeUrl = ref(''); |
| | | const handlehistorical = (row) => { |
| | | blindbd.value = true; |
| | | iframeUrl.value = `${window.location.origin}/#/Returns/upreturnhistory`; |
| | | }; |
| | | function getStatusType2(filmRemove) { |
| | | switch (filmRemove) { |
| | | case 0: |
| | | return 'success'; |
| | | case 1: |
| | | return 'info'; |
| | | case 2: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusText2(filmRemove) { |
| | | switch (filmRemove) { |
| | | case 0: |
| | | return t('Mounting.noremoval');//完成 |
| | | case 1: |
| | | return t('Mounting.coarselyground');//新建 |
| | | case 2: |
| | | return t('Mounting.finegrinding');//执行中 |
| | | } |
| | | } |
| | | |
| | | // 输入框限制 |
| | | const handleInput = (row) => { |
| | | const inputValue = parseInt(row.filmRemove); |
| | | const maxValue = row.remainQuantity; |
| | | if (inputValue > maxValue) { |
| | | row.filmRemove = maxValue; |
| | | } |
| | | }; |
| | | |
| | | |
| | | // 架子数据对比 (任意一行比匹配都显示红色) |
| | | // const tableRowClassName = ({ |
| | | // row, |
| | | // rowIndex: number |
| | | // }) => { |
| | | // // 获取第一条数据 |
| | | // const firstData = tableData.value[0]; |
| | | |
| | | // // 如果第一条数据存在且状态不是100 |
| | | // if (firstData && firstData.state !== 100) { |
| | | // // 获取当前行与第一条数据 |
| | | // const previousRow = tableDataa.value.slice(0, rowIndex).reverse().find(item => |
| | | // item && item.patternWidth && item.patternHeight && item.patternThickness && item.filmsId |
| | | // ); |
| | | |
| | | // // 如果当前行有数据,进行比对 |
| | | // if (row && row.patternWidth) { |
| | | // const isMatch = |
| | | // row.patternWidth === firstData.width && |
| | | // row.patternHeight === firstData.height && |
| | | // row.patternThickness === firstData.thickness && |
| | | // row.filmsId === firstData.filmsId; |
| | | |
| | | // return !isMatch ? 'danger-row' : ''; |
| | | // } |
| | | // } |
| | | |
| | | // return ''; |
| | | // } |
| | | |
| | | |
| | | // 架子数据对比 (料架1第一行有数据,进行比对,料架2第一行没有数据,进行比对) |
| | | const tableRowClassName = ({ |
| | | row, |
| | | rowIndex |
| | | }: { |
| | | row: any; |
| | | rowIndex: number; |
| | | }) => { |
| | | // 获取第一条数据 |
| | | const firstData = tableData.value[0]; |
| | | |
| | | // 如果第一条数据存在且状态不是100 |
| | | if (firstData && firstData.state !== 100) { |
| | | // 料架1 |
| | | if (rowIndex === 0) { |
| | | // 料架1第一行有数据,进行比对 |
| | | if (row && row.patternWidth) { |
| | | const isMatch = |
| | | row.patternWidth === firstData.width && |
| | | row.patternHeight === firstData.height && |
| | | row.patternThickness === firstData.thickness && |
| | | row.filmsId === firstData.filmsId; |
| | | |
| | | return !isMatch ? 'danger-row' : ''; |
| | | } |
| | | } |
| | | // 料架2 |
| | | else if (rowIndex === 1) { |
| | | const firstRow = tableDataa.value[0]; |
| | | if (!firstRow || !firstRow.patternWidth) { |
| | | if (row && row.patternWidth) { |
| | | const isMatch = |
| | | row.patternWidth === firstData.width && |
| | | row.patternHeight === firstData.height && |
| | | row.patternThickness === firstData.thickness && |
| | | row.filmsId === firstData.filmsId; |
| | | |
| | | return !isMatch ? 'danger-row' : ''; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | return ''; |
| | | } |
| | | |
| | | // 删除任务 |
| | | const deleteWarehousing = async (row: any) => { |
| | | try { |
| | | // 确认提示 |
| | | await ElMessageBox.confirm( |
| | | t('basicData.deletemessage'), |
| | | t('sorter.prompt'), |
| | | { |
| | | confirmButtonText: t('basicData.confirm'), |
| | | cancelButtonText: t('basicData.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | |
| | | // 转换为整数 |
| | | const id = Number(row.id); |
| | | |
| | | const response = await request.post('/loadGlass/up-patten-usage/deleteTask?id=' + id); |
| | | |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | console.error(error); |
| | | // 如果是用户取消操作,不显示错误提示 |
| | | if (error !== 'cancel') { |
| | | ElMessage.error('删除失败'); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <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> |
| | | --> |
| | | </div> |
| | | <!-- <el-button :disabled="!canSelectProjecta" 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="primary" @click="dialogFormVisiblea = true">{{ |
| | | $t('basicData.startloading') }}</el-button> |
| | | <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 700px;" :data="tableDatab" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="deviceId" fixed align="center" :label="$t('film.station')" min-width="80" /> |
| | | <el-table-column prop="slot" fixed align="center" :label="$t('film.slot')" min-width="80" /> |
| | | <el-table-column prop="patternWidth" align="center" :label="$t('film.width')" min-width="80" /> |
| | | <el-table-column prop="patternHeight" align="center" :label="$t('film.height')" min-width="80" /> |
| | | <el-table-column prop="patternThickness" align="center" :label="$t('film.thickness')" min-width="80" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('film.films')" min-width="80" /> |
| | | <el-table-column prop="remainQuantity" align="center" :label="$t('film.remainquantity')" min-width="120" /> |
| | | <el-table-column align="center" :label="$t('film.enablestate')" min-width="80" prop="state"> |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.state == 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)"> |
| | | {{ scope.row.state == 1 ? $t('film.start') : $t('film.disable') }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="270"> |
| | | <template #default="scope"> |
| | | <el-input v-model="inputQuantities[scope.row.slot]" type="number" min="0" @input="handleInput(scope.row)" |
| | | :placeholder="$t('basicData.selectquantity')" :disabled="scope.row.slot > 100" style="width: 120px; margin-right: 10px;"> |
| | | </el-input> |
| | | <el-button type="text" :disabled="scope.row.slot > 100" @click="handleBind(scope.row)"> |
| | | {{ $t('basicData.startloading') }} </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | |
| | | <!--暂停--> |
| | | <el-button :disabled="!canSelectProjectc" 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="handlehistorical">{{ |
| | | $t('searchOrder.historicaltasks') }}</el-button> |
| | | <!-- <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.twoloadingline')" |
| | | 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.all')" value="null"></el-option> |
| | | <el-option :label="$t('Mounting.waiting')" value="0"></el-option> |
| | | <el-option :label="$t('Mounting.pass')" value="100"></el-option> |
| | | </el-select> |
| | | <el-button :disabled="!ReportData" type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ |
| | | $t('Mounting.setparameters') }}</el-button>--> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;"> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> |
| | | <el-table height="400" ref="table" :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }" |
| | | :data="tableData"> |
| | | <el-table-column prop="engineeringId" :label="$t('Mounting.project')" width="120" align="center" /> |
| | | <el-table-column prop="width" :label="$t('film.width')" width="200" align="center" /> |
| | | <el-table-column prop="height" :label="$t('film.height')" align="center" /> |
| | | <el-table-column prop="thickness" :label="$t('film.thickness')" align="center" /> |
| | | <el-table-column prop="filmsId" :label="$t('film.films')" align="center" /> |
| | | <el-table-column prop="layoutSequence" :label="$t('Mounting.projectnumber')" align="center" /> |
| | | <el-table-column align="center" :label="$t('Mounting.state')" min-width="80" prop="state"> |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.state === 100 ? 'success' : 'warning'" @click="toggleEnableState(scope.row)"> |
| | | {{ scope.row.state === 100 ? $t('Mounting.pass') : $t('Mounting.waiting') }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" :label="$t('film.operate')" min-width="80" prop="state"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="deleteWarehousing(scope.row)">{{ |
| | | $t('film.delete') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | |
| | | <!--架子--> |
| | | <div style="display: flex;"> |
| | | <div style="width: 49%;float: left;margin-left: 300px;"> |
| | | <div style="display: flex;"> |
| | | <img src="../../assets/shangpianji.png" alt="" |
| | | style="max-width: 20%;max-height: 25%;margin-left: 10%;margin-top: 5%;"> |
| | | <el-table :data="tableDataa" border style="margin-top: 10%;margin-left: 8%;" width="500" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }" :row-class-name="tableRowClassName"> |
| | | <el-table-column prop="workstationId" align="center" :label="$t('basicData.station')" min-width="65" /> |
| | | <el-table-column prop="patternWidth" align="center" :label="$t('basicData.width')" min-width="75" /> |
| | | <el-table-column prop="patternHeight" align="center" :label="$t('basicData.height')" min-width="75" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80" /> |
| | | <el-table-column prop="remainQuantity" align="center" :label="$t('basicData.quantity')" min-width="80" /> |
| | | <el-table-column prop="patternThickness" align="center" :label="$t('basicData.thickness')" |
| | | min-width="60" /> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-button :disabled="(!scope.row.patternThickness)" type="text" plain |
| | | @click="handleptask(scope.row.workstationId)">{{ $t('basicData.rackreset') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 历史任务 --> |
| | | <el-dialog v-model="blindbd" top="5vh" width="95%" @close="iframeUrl = ''"> |
| | | <iframe :src="iframeUrl" marginwidth="2000px" marginheight="2000px" width="100%" height="750px" |
| | | frameborder="0"></iframe> |
| | | </el-dialog> |
| | | <el-dialog v-model="blind" top="30vh" width="25%" :title="$t('basicData.startfilm')"> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleon"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="blind = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <!-- 结束工程 --> |
| | | <!-- <el-dialog v-model="blindb" top="10vh" width="80%"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 450px;" :data="tableDatad" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="engineerId" fixed align="center" :label="$t('basicData.projectnumber')" /> |
| | | <el-table-column prop="glassId" fixed align="center" :label="$t('searchOrder.glassID')" /> |
| | | <el-table-column prop="temperingLayoutId" fixed align="center" :label="$t('searchOrder.layoutID')" /> |
| | | <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" /> |
| | | <el-table-column prop="width" align="center" :label="$t('basicData.width')" /> |
| | | <el-table-column prop="height" align="center" :label="$t('basicData.height')" /> |
| | | <el-table-column prop="thickness" align="center" :label="$t('basicData.thickness')" /> |
| | | <el-table-column prop="filmsid" align="center" :label="$t('basicData.coatingtypes')" /> |
| | | <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.processcards')" /> |
| | | <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="200"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="opena(scope.row)">{{ $t('order.dilapidation') }}</el-button> |
| | | <el-button type="text" plain @click="openb(scope.row)">{{ $t('order.takeaway') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="danger" @click="deleteTask()">{{ $t('searchOrder.deleteTask') }}</el-button> |
| | | <el-button @click="blindb = false">{{ $t('large.close') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> --> |
| | | <el-dialog v-model="blinda" top="24vh" width="30%" :title="$t('basicData.whetherpause')"> |
| | | <div style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('Mounting.loadingline')" :required="true"> |
| | | <el-select disabled v-model="stationCell" clearable :placeholder="$t('Mounting.inloadingline')" |
| | | style="margin-left: 20px;"> |
| | | <el-option :label="$t('Mounting.all')" value="0"></el-option> |
| | | <el-option :label="$t('Mounting.oneloadingline')" value="1"></el-option> |
| | | <el-option :label="$t('Mounting.twoloadingline')" value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handleup"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="blinda = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | <el-dialog v-model="dialogFormVisible" top="24vh" width="70%"> |
| | | <div class="flex-container" style="margin-left: 50px;margin-bottom: 10px;"> |
| | | <el-form-item :label="$t('Mounting.loadingline')" :required="true"> |
| | | <el-select disabled v-model="stationCell" 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['engineerId']" :key="item.id" :label="item.projectNo" |
| | | :value="item.projectNo" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item :label="$t('Mounting.removalmethoda')" :required="true"> |
| | | <el-select v-model="filmRemove" clearable :placeholder="$t('Mounting.removalmethod')"> |
| | | <el-option :label="$t('Mounting.noremoval')" value="0"></el-option> |
| | | <el-option :label="$t('Mounting.coarselyground')" value="1"></el-option> |
| | | <el-option :label="$t('Mounting.finegrinding')" value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <div id="dialog-footer"> |
| | | <el-button type="primary" @click="handlesure"> |
| | | {{ $t('basicData.confirm') }} |
| | | </el-button> |
| | | <el-button @click="dialogFormVisible = false">{{ $t('basicData.cancel') }}</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <style scoped> |
| | | |
| | | :deep(.el-table .danger-row) { |
| | | background-color: var(--el-color-danger-light-9); |
| | | } |
| | | |
| | | .flex-container { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .flex-container .el-form-item { |
| | | flex: 1; |
| | | margin-right: 0; |
| | | /* 移除默认的右侧边距 */ |
| | | } |
| | | |
| | | .flex-container .el-form-item:last-child { |
| | | margin-left: 20px; |
| | | /* 为第二个表单项添加左侧边距 */ |
| | | } |
| | | |
| | | #dt { |
| | | display: block; |
| | | float: left; |
| | | line-height: 20px; |
| | | margin-left: 100px; |
| | | } |
| | | |
| | | #dta { |
| | | display: block; |
| | | float: left; |
| | | line-height: 20px; |
| | | margin-left: 80%; |
| | | } |
| | | |
| | | #dialog-footer { |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | |
| | | #dotClass { |
| | | display: flex; |
| | | margin-left: 20px; |
| | | size: 50px; |
| | | margin-top: 20px; |
| | | margin-bottom: 10px; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import {useI18n} from 'vue-i18n' |
| | | import {useRouter} from "vue-router" |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {ElMessage, ElMessageBox} from 'element-plus' |
| | | const scanGlass = ref([]) |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | import { inject } from 'vue'; |
| | | const router = useRouter() |
| | | const timeRange = ref([]) |
| | | const dialogFormVisiblea = ref(false) |
| | | const dialogFormVisiblec = ref(false) |
| | | const dialogFormVisibled = ref(false) |
| | | const dialogFormVisiblee = ref(false) |
| | | const dialogFormVisiblef = ref(false) |
| | | const dialogFormVisibles = ref(false) |
| | | const blindb = ref(false) |
| | | const inkageEntity = ref('#911005'); |
| | | const requestEntity = ref('#911005'); |
| | | const mesReplyEntity = ref('#911005'); |
| | | const outInkageEntity = ref('#911005'); |
| | | const outRequestEntity = ref('#911005'); |
| | | const tableDataa = ref([]) |
| | | const tableDatagh = ref([]) |
| | | const tableDatab = ref([]) |
| | | const tableDatac = ref([]) |
| | | const tableDatad = ref([]) |
| | | const tableDataf = ref([]) |
| | | const tableDatae = ref([]) |
| | | const tableDatas = ref([]) |
| | | const tableDatass = ref([]) |
| | | const tableDatax = ref([]); |
| | | const tableDatalack = ref([]) |
| | | const tableDataspecify = ref([]) |
| | | const tableDatacagedetails = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const carPosition = ref([]) |
| | | const ganghua = ref('') |
| | | const diaodu = ref('') |
| | | const flowCardId = ref('') |
| | | const filmsId = ref('') |
| | | const adjust = ref([]); |
| | | const adjusta = ref([]); |
| | | const adjustedRects = ref([]); |
| | | const adjustedRectsa = ref([]); |
| | | const adjustedRectsb = ref([]); |
| | | const adjustedRectsc = ref([]); |
| | | const subRectsCounts = ref([]); |
| | | const subRectsCountsa = ref([]); |
| | | const subRectsCountsb = ref([]); |
| | | const subRectsCountsc = ref([]); |
| | | const currentRow = reactive({}); // 当前行的数据 |
| | | const currentPage2 = ref(1) |
| | | const globalDate = inject('globalDate'); |
| | | const inputValuesa = reactive({}); |
| | | const add = ref(false) |
| | | const gap = ref(''); |
| | | const glassId = ref(''); |
| | | const startSlot = ref(''); |
| | | const targetSlot = ref(''); |
| | | const taskStateList = ref(''); |
| | | const taskTypeList = ref(''); |
| | | const beginDate = ref(''); |
| | | const endDate = ref(''); |
| | | const thickness = ref(''); |
| | | const width = ref(''); |
| | | const cell1=ref(true); |
| | | const cell2=ref(true); |
| | | const cell3=ref(true); |
| | | const cell4=ref(true); |
| | | const canEdit = ref(true); |
| | | const selectedRow = ref(null); |
| | | const temperingtotal = ref(0); |
| | | const glasstotal = ref(0); |
| | | const fulltotals = ref(0); |
| | | const temperingengineerId=ref(''); |
| | | const printFlowCardId = ref('') |
| | | const printLayer = ref('') |
| | | const printGlassId = ref('') |
| | | const open1 = async (row) => { |
| | | printFlowCardId.value = row.flowCardId; |
| | | printLayer.value = row.layer |
| | | printGlassId.value = row.glassId |
| | | } |
| | | // setInterval(() => { |
| | | // localStorage.clear(); // 清除所有localStorage数据 |
| | | // }, 60000); |
| | | // function cleanUp() { |
| | | // } |
| | | // // 假设我们每2分钟执行一次清理 |
| | | // setInterval(cleanUp, 1 * 60 * 1000); |
| | | const getTableRow = (row,type) =>{ |
| | | switch (type) { |
| | | case 'edit' :{ |
| | | router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }}) |
| | | break |
| | | } |
| | | case 'delete':{ |
| | | alert('我接收到子组件传送的删除信息') |
| | | break |
| | | } |
| | | } |
| | | } |
| | | const handlePageChange2 = (newPage) => { |
| | | currentPage2.value = newPage; |
| | | window.localStorage.setItem('pagenumber', currentPage2.value) |
| | | fetchxiang(currentPage2.value); |
| | | }; |
| | | const handleBindRack = (row) => { |
| | | selectedRow.value = row; // 更新选中的行数据 |
| | | currentRow.deviceId = row.deviceId; // 直接设置响应式属性 |
| | | currentRow.slot = row.slot; |
| | | window.localStorage.setItem('deviceId', row.deviceId) |
| | | window.localStorage.setItem('slot', row.slot) |
| | | add.value = true; |
| | | }; |
| | | // 搜索 |
| | | const searchout = async () => { |
| | | try { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/selectBigStorageCageDetails',{ |
| | | glassId:glassId.value |
| | | }); |
| | | if (response.code == 200) { |
| | | tableDataf.value = response.data; |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 是否禁用 |
| | | const toggleEnableState = async (row) => { |
| | | const newState = row.enableState === 1 ? 0 : 1; |
| | | var url="/cacheVerticalGlass/bigStorageCage/updateStorageCageDisabled?slot="+row.slot + "&enableState=" + newState; |
| | | const response = await request.get(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | row.enableState = newState; |
| | | }; |
| | | // 是否破损 |
| | | const broken = async (row) => { |
| | | try { |
| | | const newState = row.isDamage === 1 ? 0 : 1; |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/bigStorageGlassDamageByGlassId', { glassId: row.glassId }); |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | row.isDamage = newState; |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 删除 |
| | | const opena = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.deletemessage'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/deleteBigStorageCageDetails",row) |
| | | if (response.code === 200) { |
| | | tableDataa.value = response.data; |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 破损 |
| | | const broke = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.broke'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+8, row) |
| | | if (response.code === 200) { |
| | | tableDataa.value = response.data; |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 历史任务 |
| | | const iframeUrl = ref(''); |
| | | const handlehistorical = (row) => { |
| | | blindb.value = true; |
| | | iframeUrl.value = `${window.location.origin}/#/Slicecage/slicecagehistory`; |
| | | }; |
| | | // 拿走 |
| | | const brokec = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.brokeb'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+9, row) |
| | | if (response.code === 200) { |
| | | tableDataa.value = response.data; |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 出片 |
| | | const outfil = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.outfil'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/outBigStorageCageDetails", row) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 出片队列破损 |
| | | const brokea = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.broke'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+8, row) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 指定钢化 |
| | | 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', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/TemperingGlass",{ |
| | | engineerId: row.engineerId, |
| | | temperingLayoutId: row.temperingLayoutId, |
| | | temperingFeedSequence:temperingFeedSequence |
| | | }); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | handleganghua(); |
| | | }; |
| | | // 指定工程 |
| | | const brokek = async(row) => { |
| | | try { |
| | | 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/appointTemperingEngineerId?engineerId=" + row.engineerId); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 取消指定 |
| | | const broked = async() => { |
| | | try { |
| | | 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/cancelTemperingTask"); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 指定流程卡 |
| | | const brokes = async(row) => { |
| | | try { |
| | | 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/appointFlowCard",{ |
| | | flowCardId: row.flow_card_id, |
| | | layer: row.layer, |
| | | }); |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 出片队列拿走 |
| | | const brokeb = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.brokeb'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+9, row) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 出片队列删除 |
| | | const deletea = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.deletemessage'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const dataToSend = { |
| | | ...row, |
| | | status: 1 |
| | | }; |
| | | const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/deleteTemperingGlassInfo", dataToSend) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 完成任务 |
| | | const finish = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.fin'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/finishBigStorageCageDetails", row) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // 确认添加 |
| | | const finisha = async(row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.sureadda'), |
| | | t('searchOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('searchOrder.yes'), |
| | | cancelButtonText: t('searchOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | let deviceId = window.localStorage.getItem('deviceId') |
| | | let slot = window.localStorage.getItem('slot') |
| | | const dataToSend = { |
| | | ...row, |
| | | deviceId: deviceId, |
| | | slot: slot |
| | | }; |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/insertBigStorageCageDetails", dataToSend) |
| | | if (response.code === 200) { |
| | | tableDataa.value = response.data; |
| | | add.value = false; |
| | | ElMessage.success(response.message); |
| | | glassId.value = ''; |
| | | tableDataf.value = ''; |
| | | |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | const handleganghua = () => { |
| | | dialogFormVisiblec.value = true; |
| | | fetchFlow(); |
| | | }; |
| | | const handlexiang = () => { |
| | | dialogFormVisiblea.value = true; |
| | | fetchxiang(); |
| | | currentPage2.value = 1; |
| | | window.localStorage.setItem('pagenumber', currentPage2.value) |
| | | filmsId.value = '' |
| | | flowCardId.value = '' |
| | | }; |
| | | // 缺片数量 |
| | | const handlelack = (row) => { |
| | | const { engineerId, temperingLayoutId } = row; |
| | | fetchlack(engineerId, temperingLayoutId); |
| | | dialogFormVisibled.value = true; |
| | | }; |
| | | // 笼内详情 |
| | | const handlecagedetails = (row) => { |
| | | const { engineerId, temperingLayoutId } = row; |
| | | fetchcagedetails(engineerId, temperingLayoutId); |
| | | dialogFormVisiblef.value = true; |
| | | }; |
| | | // 钢化查询 |
| | | onMounted(async () => { |
| | | try { |
| | | var url="/cacheVerticalGlass/bigStorageCageDetails/selectTemperingGlass?isTempering="+1; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatagh.value = response.data |
| | | } else { |
| | | ElMessage.warning(response.msg) |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }); |
| | | // 理片笼信息 |
| | | const fetchxiang = async () => { |
| | | try { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCage/querybigStorageCageDetail',{ |
| | | // deviceId: page, |
| | | filmsId: filmsId.value, |
| | | flowCardId: flowCardId.value, |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | tableDataa.value = response.data |
| | | } else { |
| | | ElMessage.warning(response.msg) |
| | | } |
| | | } catch (error) { |
| | | } |
| | | } |
| | | const fetchxianga = async () => { |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | try { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCage/querybigStorageCageDetail',{ |
| | | deviceId: page, |
| | | filmsId: filmsId.value, |
| | | flowCardId: flowCardId.value, |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | tableDataa.value = response.data |
| | | // filmsId.value = '' |
| | | // flowCardId.value = '' |
| | | } else { |
| | | ElMessage.warning(response.msg) |
| | | } |
| | | } catch (error) { |
| | | } |
| | | } |
| | | // 非钢化流程卡 |
| | | const fetchFlows = async () => { |
| | | try { |
| | | var url="/cacheVerticalGlass/bigStorageCageDetails/selectTemperingGlass?isTempering="+0; |
| | | const response = await request.post(url) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatas.value = response.data |
| | | } else { |
| | | ElMessage.warning(response.msg) |
| | | } |
| | | } catch (error) { |
| | | } |
| | | } |
| | | // 缺片数量 |
| | | const fetchlack = async (engineerId, temperingLayoutId) => { |
| | | try { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/queryLackGlassInfo',{ |
| | | engineerId: engineerId, |
| | | temperingLayoutId: temperingLayoutId, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatalack.value = response.data |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | // 处理错误 |
| | | } |
| | | } |
| | | // 笼内详情 |
| | | const fetchcagedetails = async (engineerId, temperingLayoutId) => { |
| | | try { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/queryRealGlassInfo',{ |
| | | engineerId: engineerId, |
| | | temperingLayoutId: temperingLayoutId, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatacagedetails.value = response.data |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const fetchFlow = async () => { |
| | | try { |
| | | var url="/cacheVerticalGlass/bigStorageCageDetails/selectTemperingGlass?isTempering="+1; |
| | | const response = await request.post(url) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | tableDatagh.value = response.data |
| | | temperingtotal.value = response.data.length |
| | | let totalCount = 0; |
| | | let fullCount = 0; |
| | | response.data.forEach(item => { |
| | | totalCount += item.realCount || 0; |
| | | if(item.lackCount==0){ |
| | | fullCount+=1; |
| | | } |
| | | }); |
| | | glasstotal.value = totalCount; |
| | | fulltotals.value = fullCount; |
| | | |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | function handleRowClick(row) { |
| | | selectedRow.value = row; // 更新选中的行数据 |
| | | } |
| | | // 钢化开关 |
| | | const handleChange = async () => { |
| | | try { |
| | | const body = { |
| | | flag: ganghua.value, |
| | | }; |
| | | |
| | | var url="/cacheVerticalGlass/bigStorageCageDetails/temperingSwitch?flag="+ganghua.value; |
| | | const response = await request.post(url) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | ganghua.value = response.data |
| | | }else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 调度开关 |
| | | const handlediaodu = async () => { |
| | | try { |
| | | const body = { |
| | | flag: diaodu.value, |
| | | }; |
| | | var url="/cacheVerticalGlass/bigStorageCageDetails/dispatchSwitch?flag="+diaodu.value; |
| | | const response = await request.post(url) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | diaodu.value = response.data |
| | | }else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | // 任务重置 |
| | | const handleptask = async() => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('searchOrder.partasks'), |
| | | t('workOrder.prompt'), |
| | | { |
| | | confirmButtonText: t('workOrder.yes'), |
| | | cancelButtonText: t('workOrder.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCage/resetCage') |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`; |
| | | const handleMessage = (data) => { |
| | | if(data.bigStorageSummary!=null){ |
| | | tableDatass.value = data.bigStorageSummary[0] |
| | | }else{ |
| | | tableDatass.value = '' |
| | | } |
| | | if (data.inkageEntity != null) { |
| | | inkageEntity.value = data.inkageEntity[0] == true ? 'green' : '#911005'; |
| | | } |
| | | if (data.requestEntity != null) { |
| | | requestEntity.value = data.requestEntity == 1 ? 'green' : '#911005'; |
| | | } |
| | | if (data.mesReplyEntity != null) { |
| | | mesReplyEntity.value = data.mesReplyEntity == 1 ? 'green' : '#911005'; |
| | | } |
| | | if (data.outInkageEntity != null) { |
| | | outInkageEntity.value = data.outInkageEntity[0] == true ? 'green' : '#911005'; |
| | | } |
| | | if (data.outRequestEntity != null) { |
| | | outRequestEntity.value = data.outRequestEntity == 1 ? 'green' : '#911005'; |
| | | } |
| | | if (data.scanGlass != null) { |
| | | scanGlass.value = data.scanGlass[0]; |
| | | let width = scanGlass.value.width; |
| | | let height = scanGlass.value.height; |
| | | if (width < height) { |
| | | scanGlass.value.width = height; |
| | | scanGlass.value.height = width; |
| | | } |
| | | if (autoPrint.value == true && browser.value == true) { |
| | | open1(scanGlass); |
| | | } |
| | | } |
| | | //当前指定工程 |
| | | if(data.bigStorageCageDetailsOutTask!=null){ |
| | | temperingengineerId.value=data.temperingengineerId[0]; |
| | | } |
| | | if(data.bigStorageCageDetailsOutTask!=null){ |
| | | tableDatac.value = data.bigStorageCageDetailsOutTask[0] |
| | | adjusta.value = data.bigStorageCageDetailsOutTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined); |
| | | } else { |
| | | tableDatac.value = '', |
| | | adjusta.value = '' |
| | | } |
| | | if(data.bigStorageCageDetailsFeedTask!=null){ |
| | | tableDatax.value = data.bigStorageCageDetailsFeedTask[0] |
| | | } else { |
| | | tableDatax.value = '' |
| | | } |
| | | if(data.bigStorageCageDetailsFeedTask!=null){ |
| | | tableDatad.value = data.bigStorageCageDetailsFeedTask[0] |
| | | adjust.value = data.bigStorageCageDetailsFeedTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined); |
| | | }else{ |
| | | tableDatad.value = '' |
| | | } |
| | | if(data.temperingGlassInfoList!=null){ |
| | | tableDatab.value = data.temperingGlassInfoList[0] |
| | | }else{ |
| | | tableDatab.value = '' |
| | | } |
| | | if(data.bigStorageCageUsage!=null){ |
| | | tableDatae.value = data.bigStorageCageUsage[0] |
| | | }else{ |
| | | tableDatae.value = '' |
| | | } |
| | | if(data.carPostion!=null){ |
| | | carPosition.value = data.carPostion[0] |
| | | }else{ |
| | | carPosition.value = '' |
| | | } |
| | | if(data.temperingSwitch!=null){ |
| | | ganghua.value = data.temperingSwitch[0] |
| | | }else{ |
| | | ganghua.value = '' |
| | | } |
| | | if(data.dispatchSwitch!=null){ |
| | | diaodu.value = data.dispatchSwitch[0] |
| | | }else{ |
| | | diaodu.value = '' |
| | | } |
| | | if(data.bigStorageCageInfos!=null){ |
| | | adjustedRects.value = data.bigStorageCageInfos[0][1].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 20/55, |
| | | top: 53/55, |
| | | })); |
| | | subRectsCounts.value = data.bigStorageCageInfos[0][1].map(rect => rect.count); |
| | | adjustedRectsa.value = data.bigStorageCageInfos[0][2].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 20/55, |
| | | top: 53/55, |
| | | })); |
| | | subRectsCountsa.value = data.bigStorageCageInfos[0][2].map(rect => rect.count); |
| | | adjustedRectsb.value = data.bigStorageCageInfos[0][3].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 20/55, |
| | | top: 53/55, |
| | | })); |
| | | subRectsCountsb.value = data.bigStorageCageInfos[0][3].map(rect => rect.count); |
| | | adjustedRectsc.value = data.bigStorageCageInfos[0][4].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 20/55, |
| | | top: 53/55, |
| | | })); |
| | | subRectsCountsc.value = data.bigStorageCageInfos[0][4].map(rect => rect.count); |
| | | }else{ |
| | | adjustedRects.value = '', |
| | | adjustedRectsa.value = '', |
| | | adjustedRectsb.value = '', |
| | | adjustedRectsc.value = '' |
| | | } |
| | | }; |
| | | // 计算每个大矩形的样式 |
| | | const rectStyle = (rect, index) => ({ |
| | | position: 'absolute', |
| | | width: '170px', |
| | | right: '0px', |
| | | top: `${index*rect.top}px`, |
| | | height: `${rect.height}px`, |
| | | }); |
| | | // 计算每个小矩形的样式和数量 |
| | | const getSubRects = (rectIndex) => { |
| | | const count = subRectsCounts.value[rectIndex]; |
| | | const subRects = []; |
| | | for (let i = 0; i < count; i++) { |
| | | subRects.push({}); |
| | | } |
| | | return subRects; |
| | | }; |
| | | // 计算每个小矩形的样式 |
| | | const subRectStyle = (rectIndex, subIndex) => { |
| | | const width = '18px'; |
| | | const marginRight = '8px'; |
| | | const totalWidth = 6 * (parseInt(width) + parseInt(marginRight)); |
| | | const right = `${(subIndex * (parseInt(width) + parseInt(marginRight))) / totalWidth * 100}%`; |
| | | return { |
| | | position: 'absolute', |
| | | width, |
| | | height: '100%', |
| | | marginRight, |
| | | top: '0px', |
| | | backgroundColor: '#911005', |
| | | right, |
| | | }; |
| | | }; |
| | | // 计算每个大矩形的样式 |
| | | const rectStylea = (rect, index) => ({ |
| | | position: 'absolute', |
| | | width: '170px', |
| | | right: '0px', |
| | | top: `${index*rect.top}px`, |
| | | height: `${rect.height}px`, |
| | | }); |
| | | // 计算每个小矩形的样式和数量 |
| | | const getSubRectsa = (rectIndex) => { |
| | | const count = subRectsCountsa.value[rectIndex]; |
| | | const subRects = []; |
| | | for (let i = 0; i < count; i++) { |
| | | subRects.push({}); |
| | | } |
| | | return subRects; |
| | | }; |
| | | // 计算每个小矩形的样式 |
| | | const subRectStylea = (rectIndex, subIndex) => { |
| | | const width = '18px'; |
| | | const marginRight = '8px'; |
| | | const totalWidth = 6 * (parseInt(width) + parseInt(marginRight)); |
| | | const right = `${(subIndex * (parseInt(width) + parseInt(marginRight))) / totalWidth * 100}%`; |
| | | return { |
| | | position: 'absolute', |
| | | width, |
| | | height: '100%', |
| | | marginRight, |
| | | top: '0px', |
| | | backgroundColor: '#911005', |
| | | right, |
| | | }; |
| | | }; |
| | | // 计算每个大矩形的样式 |
| | | const rectStyleb = (rect, index) => ({ |
| | | position: 'absolute', |
| | | width: '170px', |
| | | right: '0px', |
| | | top: `${index*rect.top}px`, |
| | | height: `${rect.height}px`, |
| | | }); |
| | | // 计算每个小矩形的样式和数量 |
| | | const getSubRectsb = (rectIndex) => { |
| | | const count = subRectsCountsb.value[rectIndex]; |
| | | const subRects = []; |
| | | for (let i = 0; i < count; i++) { |
| | | subRects.push({}); |
| | | } |
| | | return subRects; |
| | | }; |
| | | // 计算每个小矩形的样式 |
| | | const subRectStyleb = (rectIndex, subIndex) => { |
| | | const width = '18px'; |
| | | const marginRight = '8px'; |
| | | const totalWidth = 6 * (parseInt(width) + parseInt(marginRight)); |
| | | const right = `${(subIndex * (parseInt(width) + parseInt(marginRight))) / totalWidth * 100}%`; |
| | | return { |
| | | position: 'absolute', |
| | | width, |
| | | height: '100%', |
| | | marginRight, |
| | | top: '0px', |
| | | backgroundColor: '#911005', |
| | | right, |
| | | }; |
| | | }; |
| | | // 计算每个大矩形的样式 |
| | | const rectStylec = (rect, index) => ({ |
| | | position: 'absolute', |
| | | width: '170px', |
| | | right: '0px', |
| | | top: `${index*rect.top}px`, |
| | | height: `${rect.height}px`, |
| | | }); |
| | | // 计算每个小矩形的样式和数量 |
| | | const getSubRectsc = (rectIndex) => { |
| | | const count = subRectsCountsc.value[rectIndex]; |
| | | const subRects = []; |
| | | for (let i = 0; i < count; i++) { |
| | | subRects.push({}); |
| | | } |
| | | return subRects; |
| | | }; |
| | | // 计算每个小矩形的样式 |
| | | const subRectStylec = (rectIndex, subIndex) => { |
| | | const width = '18px'; |
| | | const marginRight = '8px'; |
| | | const totalWidth = 6 * (parseInt(width) + parseInt(marginRight)); |
| | | const right = `${(subIndex * (parseInt(width) + parseInt(marginRight))) / totalWidth * 100}%`; |
| | | return { |
| | | position: 'absolute', |
| | | width, |
| | | height: '100%', |
| | | marginRight, |
| | | top: '0px', |
| | | backgroundColor: '#911005', |
| | | right, |
| | | }; |
| | | }; |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(globalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | onMounted(() => { |
| | | socket = initializeWebSocket(socketUrl, handleMessage); |
| | | parseAndSetTime(); |
| | | }); |
| | | onUnmounted(() => { |
| | | if (socket) { |
| | | closeWebSocket(socket); |
| | | } |
| | | }); |
| | | function getStatusType(enableState: number) { |
| | | switch (enableState) { |
| | | case 100: |
| | | return 'success'; |
| | | case 102: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusText(enableState: number) { |
| | | switch (enableState) { |
| | | case 100: |
| | | return t('searchOrder.zailong'); |
| | | case 102: |
| | | return t('searchOrder.rengongxp'); |
| | | } |
| | | } |
| | | function getStatusTypea(ishorizontal: number) { |
| | | switch (ishorizontal) { |
| | | case 0: |
| | | return 'warning'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | function getStatusTexta(ishorizontal: number) { |
| | | switch (ishorizontal) { |
| | | case 0: |
| | | return t('searchOrder.noaccept'); |
| | | case 1: |
| | | return t('searchOrder.accept'); |
| | | } |
| | | } |
| | | function getStatusTypeb(state: number) { |
| | | switch (state) { |
| | | case 0: |
| | | return 'success'; |
| | | case 1: |
| | | return 'primary'; |
| | | } |
| | | } |
| | | function getStatusTextb(state: number) { |
| | | switch (state) { |
| | | case 0: |
| | | return t('searchOrder.filmcomplete'); |
| | | case 1: |
| | | return t('searchOrder.waiting'); |
| | | case 2: |
| | | return t('searchOrder.waiting'); |
| | | } |
| | | } |
| | | function getcasOnea(isSame) { |
| | | switch (isSame) { |
| | | case 1: |
| | | return 'danger'; |
| | | case 0: |
| | | return 'info'; |
| | | } |
| | | } |
| | | function getStatuscasOnea(isSame) { |
| | | switch (isSame) { |
| | | case 1: |
| | | return t('searchOrder.same'); |
| | | case 0: |
| | | return t('searchOrder.notsame'); |
| | | } |
| | | } |
| | | function tableRowClassName({ row }) { |
| | | if (row.isSame === 1) { |
| | | return 'row-red-background'; |
| | | } |
| | | return ''; |
| | | } |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | onBeforeUnmount(() => { |
| | | closeWebSocket(); |
| | | }); |
| | | </script> |
| | | <template> |
| | | <div style="height: 600px;"> |
| | | <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="primary" @click="handlexiang">{{ $t('searchOrder.cageinformation') }}</el-button> |
| | | <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="success" @click="handlehistorical">{{ $t('searchOrder.historicaltasks') }}</el-button> |
| | | <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="warning" @click="handleganghua">{{ $t('searchOrder.temperingqueries') }}</el-button> |
| | | <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="info" @click="dialogFormVisibles=true;fetchFlows()">{{ $t('searchOrder.searchlayout') }}</el-button> |
| | | <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="danger" @click="handleptask()">{{ $t('searchOrder.partask') }}</el-button> |
| | | <el-switch style="margin-top: 7px;margin-left: 10px;" v-model="ganghua" class="mb-2" :inactive-text="$t('searchOrder.temperedswitch')" @change="handleChange" /> |
| | | <el-switch style="margin-top: 7px;margin-left: 10px;" v-model="diaodu" class="mb-2" :inactive-text="$t('searchOrder.Schedulingswitch')" @change="handlediaodu" /> |
| | | <div id="dotClass"> |
| | | <div>{{ $t('searchOrder.inkageEntity') }}</div> |
| | | <i :style="{ marginTop: '2px', backgroundColor: inkageEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i> |
| | | <div style="margin-left: 70px;">{{ $t('searchOrder.requestEntity') }}</div> |
| | | <i :style="{ marginTop: '2px', backgroundColor: requestEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i> |
| | | <div style="margin-left: 70px;">{{ $t('searchOrder.mesReplyEntity') }}</div> |
| | | <i :style="{ marginTop: '2px', backgroundColor: mesReplyEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i> |
| | | <div style="margin-left: 70px;">{{ $t('searchOrder.outInkageEntity') }}</div> |
| | | <i :style="{ marginTop: '2px', backgroundColor: outInkageEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i> |
| | | <div style="margin-left: 70px;">{{ $t('searchOrder.outRequestEntity') }}</div> |
| | | <i :style="{ marginTop: '2px', backgroundColor: outRequestEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i> |
| | | </div> |
| | | <div class="table-container"> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;"> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 300px;"> |
| | | <el-table height="300px" ref="table" |
| | | :row-class-name="tableRowClassName" |
| | | :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="glassId" align="center" :label="$t('searchOrder.intoglassid')" min-width="140" /> |
| | | <el-table-column prop="startSlot" align="center" :label="$t('searchOrder.startposition')" min-width="120" /> |
| | | <el-table-column prop="targetSlot" align="center" :label="$t('searchOrder.targetlocation')" min-width="120" /> |
| | | <el-table-column prop="taskState" align="center" :label="$t('searchOrder.taskstatus')" min-width="120"> |
| | | <template #default="scope"> |
| | | <el-tag type="success" >{{ scope.row.taskState==0? $t('searchOrder.filmenter') : $t('searchOrder.infilm') }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="isSame" align="center" :label="$t('searchOrder.whethersame')" min-width="120"> |
| | | <template #default="scope"> |
| | | <el-tag :type="getcasOnea(scope.row.isSame)"> |
| | | {{ getStatuscasOnea(scope.row.isSame) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;"> |
| | | <el-table height="300px" ref="table" |
| | | :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="glassId" align="center" :label="$t('searchOrder.outputglassID')" min-width="140" /> |
| | | <el-table-column prop="startSlot" align="center" :label="$t('searchOrder.startposition')" min-width="120" /> |
| | | <el-table-column prop="targetSlot" align="center" :label="$t('searchOrder.targetlocation')" min-width="120" /> |
| | | <el-table-column prop="taskState" align="center" :label="$t('searchOrder.taskstatus')" min-width="157"> |
| | | <template #default="scope"> |
| | | <el-tag type="success" >{{ scope.row.taskState==0? $t('searchOrder.filmenter') : $t('searchOrder.infilm') }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-card> |
| | | </div> |
| | | <div style="padding: 10px;display: flex;height:130px;"> |
| | | <div v-for="(item, index) in tableDatae" :key="index" id="occupy"> |
| | | <el-col style="text-align:left;font-weight: bold;">#{{ item.device_id }}</el-col> |
| | | <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> |
| | | <span>{{ $t('searchOrder.Usage') }}</span><span>{{ item.percentage }}%</span> |
| | | </el-col> |
| | | <hr style="width:80%;margin: 0 auto;" /> |
| | | <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> |
| | | <span>{{ $t('searchOrder.free') }}</span><span>{{ item.count }}</span> |
| | | </el-col> |
| | | </div> |
| | | </div> |
| | | <!-- // 父级框 --> |
| | | <div class="img-dlpl" > |
| | | <div class="img-car1" :style="'z-index:999;left:290px;top:' + 350*carPosition[0] + 'px;position:absolute;'"> |
| | | <div |
| | | v-for="(rect, index) in adjusta" |
| | | :key="rect.id" |
| | | :style="{ |
| | | width: '30px', |
| | | height: '5px', |
| | | backgroundColor: '#409EFF', |
| | | marginLeft: 5+ `px`, |
| | | top: '10px', |
| | | }" |
| | | > |
| | | </div> |
| | | </div> |
| | | <div class="img-car4" :style="'z-index:999;left:735px;top:' + 350*carPosition[1] + 'px;position:absolute;'"> |
| | | <div |
| | | v-for="(rect, index) in adjust" |
| | | :key="rect.id" |
| | | :style="{ |
| | | width: '30px', |
| | | height: '5px', |
| | | backgroundColor: '#409EFF', |
| | | marginLeft: 5+ `px`, |
| | | top: '10px', |
| | | }" |
| | | > |
| | | </div> |
| | | </div> |
| | | <div style="position: relative;"> |
| | | <div v-show="cell1" style="width: 170px;height: 53px;position: relative;top:63px;left: 525px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRects" :key="rect.id" :style="rectStyle(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRects(rectIndex)" |
| | | :key="subIndex" |
| | | :style="subRectStyle(rectIndex, subIndex)" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell2" style="width: 170px;height: 53px;position: relative;top:67px;left: 525px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsa" :key="rect.id" :style="rectStylea(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsa(rectIndex)" |
| | | :key="subIndex" |
| | | :style="subRectStylea(rectIndex, subIndex)" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell3" style="width: 170px;height: 53px;position: relative;top:72px;left: 525px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsb" :key="rect.id" :style="rectStyleb(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsb(rectIndex)" |
| | | :key="subIndex" |
| | | :style="subRectStyleb(rectIndex, subIndex)" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell4" style="width: 170px;height: 53px;position: relative;top:77px;left: 525px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsc" :key="rect.id" :style="rectStylec(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsc(rectIndex)" |
| | | :key="subIndex" |
| | | :style="subRectStylec(rectIndex, subIndex)" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 1220px;margin-top: -510px;"> |
| | | <div style="width: 100%; height: calc(100% - 35px); overflow-y: auto;max-height: 420px;"> |
| | | <el-table height="420px" ref="table" border |
| | | :data="tableDatass" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column fixed prop="engineerId" align="center" :label="$t('Mounting.project')" min-width="100" /> |
| | | <el-table-column prop="countTemp" align="center" :label="$t('searchOrder.totalfurnaces')" min-width="68" /> |
| | | <el-table-column prop="fullTemp" align="center" :label="$t('searchOrder.furnaces')" min-width="82" /> |
| | | <el-table-column prop="countGlass" align="center" :label="$t('searchOrder.cagesnumber')" min-width="82" /> |
| | | <el-table-column prop="area" align="center" :label="$t('large.are')" min-width="70" /> |
| | | <el-table-column prop="countSlot" align="center" :label="$t('searchOrder.slotnumber')" min-width="96" /> |
| | | <el-table-column prop="percent" align="center" :label="$t('searchOrder.progress')" min-width="80" /> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | |
| | | </div> |
| | | <el-dialog v-model="add" top="10vh" width="70%" :title="$t('searchOrder.addcage')" > |
| | | <div style="margin-bottom: 20px"> |
| | | <el-form> |
| | | <el-row style="margin-top: -15px;margin-bottom: -2px;"> |
| | | <el-col :span="4"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('searchOrder.tida')" style="width: 14vw"> |
| | | {{ currentRow.deviceId }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('searchOrder.gridnumbera')" style="width: 14vw"> |
| | | {{ currentRow.slot }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <div style="margin-top: -20px;margin-bottom: 40px;margin-left: 30px"> |
| | | <el-input v-model="glassId" :placeholder="$t('searchOrder.inputid')" clearable style="width: 200px;"> |
| | | </el-input> |
| | | <el-button type="primary" plain style="margin-left: 10px;" @click="searchout">{{ $t('searchOrder.search') }}</el-button> |
| | | </div> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;"> |
| | | <el-table height="100%" ref="table" |
| | | :data="tableDataf" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="120" /> |
| | | <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="180" /> |
| | | <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="150" /> |
| | | <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="150"/> |
| | | <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="150"/> |
| | | <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="150"/> |
| | | <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="150"/> |
| | | <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="150"/> |
| | | <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="150"/> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('searchOrder.startstatus')" |
| | | min-width="80" |
| | | prop="state" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag |
| | | :type="scope.row.state === 1 ? 'success' : 'danger'" |
| | | > |
| | | {{ scope.row.state === 1 ? $t('searchOrder.enable') : $t('searchOrder.disable') }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="150"/> |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="finisha(scope.row)">{{ $t('searchOrder.sureadd') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisiblea" top="2vh" width="95%" :title="$t('searchOrder.cageinformation')"> |
| | | <div style="display: flex;"> |
| | | <el-input v-model="flowCardId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.incardnumber')" /> |
| | | <el-input v-model="filmsId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('film.infilms')"/> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="fetchxianga"> |
| | | {{$t('reportmanage.inquire')}}</el-button> |
| | | </div> |
| | | <el-table |
| | | :data="tableDataa" |
| | | @row-click="handleRowClick" |
| | | height="700" |
| | | @expand-change="handleExpandChange" |
| | | row-key="id" |
| | | default-expand-all |
| | | :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" |
| | | > |
| | | <el-table-column type="expand"> |
| | | <template #default="props"> |
| | | <div v-if="props.row.bigStorageCageDetails && props.row.bigStorageCageDetails.length"> |
| | | <el-table |
| | | :data="props.row.bigStorageCageDetails" |
| | | border |
| | | style="width: 98%;margin-left: 20px;" |
| | | row-key="id" |
| | | :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" |
| | | > |
| | | <!-- <el-table-column prop="menuName" label="二级菜单栏" align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/> --> |
| | | <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="120"/> |
| | | <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="130" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('searchOrder.coatingtypes')" min-width="80" /> |
| | | <!-- <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="80" /> --> |
| | | <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="80" /> |
| | | <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="80" /> |
| | | <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="80" /> |
| | | <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100" /> |
| | | <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('searchOrder.startstatus')" |
| | | 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> |
| | | <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="80" /> |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" min-width="220"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="broke(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> |
| | | <el-button type="text" plain @click="brokec(scope.row)">{{ $t('searchOrder.takeout') }}</el-button> |
| | | <el-button type="text" plain @click="opena(scope.row)">{{ $t('searchOrder.delete') }}</el-button> |
| | | <el-button type="text" |
| | | :disabled="!((props.row.bigStorageCageDetails[0].state !== 102 && scope.$index == 0 ) || (props.row.bigStorageCageDetails[(scope.$index - 1)<0?0:scope.$index-1].state==102)&&(scope.row.state!=102))" |
| | | plain @click="outfil(scope.row)"> |
| | | {{ $t('searchOrder.outfilm') }} |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="id" :label="$t('searchOrder.cagetableID')" align="center" min-width="90"/> |
| | | <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.cagenumber')" min-width="100" /> |
| | | <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="150" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('searchOrder.startstatus')" |
| | | min-width="80" |
| | | prop="enableState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag |
| | | :type="scope.row.enableState === 1 ? 'success' : 'danger'" |
| | | @click="toggleEnableState(scope.row)" |
| | | > |
| | | {{ scope.row.enableState === 1 ? $t('searchOrder.enable') : $t('searchOrder.disable')}} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="remainWidth" align="center" :label="$t('searchOrder.remainingwidth')" min-width="120" /> |
| | | |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="handleBindRack(scope.row)">{{ $t('searchOrder.add') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div> |
| | | <!-- <div style="margin-top: 20px;margin-left: 40%;"> |
| | | <el-pagination |
| | | background |
| | | size="large" |
| | | layout="prev, pager, next" |
| | | :total="40" |
| | | :current-page.sync="currentPage2" |
| | | @current-change="handlePageChange2" |
| | | /> |
| | | </div> --> |
| | | </div> |
| | | </el-dialog> |
| | | <!-- 历史任务 --> |
| | | <el-dialog v-model="blindb" top="5vh" width="95%" @close="iframeUrl=''"> |
| | | <iframe |
| | | :src="iframeUrl" |
| | | marginwidth="2000px" |
| | | marginheight="2000px" |
| | | width="100%" |
| | | height="750px" |
| | | frameborder="0" |
| | | ></iframe> |
| | | </el-dialog> |
| | | <!-- 钢化查询 --> |
| | | <el-dialog v-model="dialogFormVisiblec" top="5vh" width="85%" :title="$t('searchOrder.temperingqueries')"> |
| | | <div style="margin-bottom: 20px"> |
| | | <el-form> |
| | | <el-row style="margin-top: -15px;margin-bottom: -2px;"> |
| | | <el-col :span="2"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('searchOrder.temperingtotal')" style="width: 14vw"> |
| | | {{ temperingtotal }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('searchOrder.glasstotal')" style="width: 14vw"> |
| | | {{ glasstotal }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <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('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 type="text" plain @click="broked()">{{ $t('searchOrder.undesignate') }}</el-button> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 500px;" |
| | | :data="tableDatagh" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="engineerId" fixed align="center" :label="$t('searchOrder.projectnumber')" min-width="150"/> |
| | | <el-table-column prop="thickness" align="center" :label="$t('basicData.thickness')" min-width="150" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="150" /> |
| | | <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutnumber')" min-width="120" /> |
| | | <el-table-column prop="totalCount" align="center" :label="$t('searchOrder.allnumber')" min-width="150" /> |
| | | <el-table-column prop="realCount" align="center" :label="$t('searchOrder.numbercages')" min-width="150" /> |
| | | <el-table-column prop="lackCount" align="center" :label="$t('searchOrder.missingquantity')" min-width="150" /> |
| | | <el-table-column prop="damageCount" align="center" :label="$t('searchOrder.breakquantity')" min-width="150" /> |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="500"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="brokee(scope.row,1)">{{ $t('searchOrder.specifytempering') }}</el-button> |
| | | <el-button type="text" plain @click="brokee(scope.row,0)">{{ $t('searchOrder.specifyout') }}</el-button> |
| | | <el-button type="text" plain @click="brokek(scope.row)">{{ $t('searchOrder.specifyengineerid') }}</el-button> |
| | | <el-button type="text" plain @click="handlelack(scope.row)">{{ $t('searchOrder.lacknumber') }}</el-button> |
| | | <el-button type="text" plain @click="handlecagedetails(scope.row)">{{ $t('searchOrder.cagedetails') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisibled" top="5vh" width="85%" :title="$t('hellow.missingnumber')"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 600px;" |
| | | :data="tableDatalack" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="engineerId" fixed align="center" :label="$t('searchOrder.projectnumber')" min-width="150"/> |
| | | <el-table-column prop="flowCardId" fixed align="center" :label="$t('searchOrder.cardnumber')" min-width="150" /> |
| | | <el-table-column prop="glassId" fixed align="center" :label="$t('searchOrder.glassID')" min-width="150" /> |
| | | <el-table-column prop="temperingLayoutId" fixed align="center" :label="$t('searchOrder.layoutID')" min-width="100" /> |
| | | <el-table-column prop="temperingFeedSequence" fixed align="center" :label="$t('searchOrder.picturesequence')" min-width="120" /> |
| | | <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="80" /> |
| | | <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="80" /> |
| | | <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="80" /> |
| | | <el-table-column prop="filmsid" align="center" :label="$t('searchOrder.coatingtypes')" min-width="80" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('searchOrder.state')" |
| | | min-width="80" |
| | | prop="isDamage" |
| | | > |
| | | <template #default="scope"> |
| | | <div |
| | | @click="scope.row.isDamage === 1 ? null : broken(scope.row)" |
| | | style="position: relative; display: inline-block;" |
| | | > |
| | | <el-tag |
| | | :type="scope.row.isDamage === 1 ? 'danger' : 'success'" |
| | | style="pointer-events: {{ scope.row.isDamage === 1 ? 'none' : 'auto' }};" |
| | | > |
| | | {{ scope.row.isDamage === 1 ? $t('searchOrder.breakage') : $t('searchOrder.breakagn') }} |
| | | </el-tag> |
| | | <div |
| | | v-if="scope.row.isDamage === 1" |
| | | style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: transparent; z-index: 1;" |
| | | ></div> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="layer" align="center" :label="$t('processCard.layer')" min-width="80" /> |
| | | <el-table-column prop="xcoordinate" align="center" :label="$t('searchOrder.xcoordinates')" min-width="80" /> |
| | | <el-table-column prop="ycoordinate" align="center" :label="$t('searchOrder.ycoordinates')" min-width="80" /> |
| | | </el-table> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisiblee" top="5vh" width="85%" :title="$t('searchOrder.specifyengineerid')"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 600px;" |
| | | :data="tableDataspecify" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="engineerId" fixed align="center" :label="$t('searchOrder.projectnumber')" min-width="150"/> |
| | | <el-table-column prop="flowCardId" fixed align="center" :label="$t('searchOrder.cardnumber')" min-width="150" /> |
| | | <el-table-column prop="glassId" fixed align="center" :label="$t('searchOrder.glassID')" min-width="150" /> |
| | | <el-table-column prop="temperingLayoutId" fixed align="center" :label="$t('searchOrder.layoutID')" min-width="100" /> |
| | | <el-table-column prop="temperingFeedSequence" fixed align="center" :label="$t('searchOrder.picturesequence')" min-width="120" /> |
| | | <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="80" /> |
| | | <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="80" /> |
| | | <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="80" /> |
| | | <el-table-column prop="filmsid" align="center" :label="$t('searchOrder.coatingtypes')" min-width="80" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('searchOrder.state')" |
| | | min-width="80" |
| | | prop="isDamage" |
| | | > |
| | | <template #default="scope"> |
| | | <div |
| | | @click="scope.row.isDamage === 1 ? null : broken(scope.row)" |
| | | style="position: relative; display: inline-block;" |
| | | > |
| | | <el-tag |
| | | :type="scope.row.isDamage === 1 ? 'danger' : 'success'" |
| | | style="pointer-events: {{ scope.row.isDamage === 1 ? 'none' : 'auto' }};" |
| | | > |
| | | {{ scope.row.isDamage === 1 ? $t('searchOrder.breakage') : $t('searchOrder.breakagn') }} |
| | | </el-tag> |
| | | <div |
| | | v-if="scope.row.isDamage === 1" |
| | | style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: transparent; z-index: 1;" |
| | | ></div> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="layer" align="center" :label="$t('processCard.layer')" min-width="80" /> |
| | | <el-table-column prop="xcoordinate" align="center" :label="$t('searchOrder.xcoordinates')" min-width="80" /> |
| | | <el-table-column prop="ycoordinate" align="center" :label="$t('searchOrder.ycoordinates')" min-width="80" /> |
| | | </el-table> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogFormVisiblef" top="5vh" width="85%" :title="$t('searchOrder.cagedetails')"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 600px;" |
| | | :data="tableDatacagedetails" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="engineerId" fixed align="center" :label="$t('searchOrder.projectnumber')" min-width="150"/> |
| | | <el-table-column prop="flowCardId" fixed align="center" :label="$t('searchOrder.cardnumber')" min-width="150" /> |
| | | <el-table-column prop="glassId" fixed align="center" :label="$t('searchOrder.glassID')" min-width="150" /> |
| | | <el-table-column prop="slot" fixed align="center" :label="$t('film.slot')" min-width="150" /> |
| | | <el-table-column prop="temperingLayoutId" fixed align="center" :label="$t('searchOrder.layoutID')" min-width="100" /> |
| | | <el-table-column prop="temperingFeedSequence" fixed align="center" :label="$t('searchOrder.picturesequence')" min-width="120" /> |
| | | <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="80" /> |
| | | <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="80" /> |
| | | <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="80" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('searchOrder.coatingtypes')" min-width="80" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('searchOrder.state')" |
| | | min-width="80" |
| | | prop="isDamage" |
| | | > |
| | | <template #default="scope"> |
| | | <div |
| | | @click="scope.row.isDamage === 1 ? null : broken(scope.row)" |
| | | style="position: relative; display: inline-block;" |
| | | > |
| | | <el-tag |
| | | :type="scope.row.isDamage === 1 ? 'danger' : 'success'" |
| | | style="pointer-events: {{ scope.row.isDamage === 1 ? 'none' : 'auto' }};" |
| | | > |
| | | {{ scope.row.isDamage === 1 ? $t('searchOrder.breakage') : $t('searchOrder.breakagn') }} |
| | | </el-tag> |
| | | <div |
| | | v-if="scope.row.isDamage === 1" |
| | | style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: transparent; z-index: 1;" |
| | | ></div> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="layer" align="center" :label="$t('processCard.layer')" min-width="80" /> |
| | | <el-table-column prop="xcoordinate" align="center" :label="$t('searchOrder.xcoordinates')" min-width="80" /> |
| | | <el-table-column prop="ycoordinate" align="center" :label="$t('searchOrder.ycoordinates')" min-width="80" /> |
| | | </el-table> |
| | | </el-dialog> |
| | | <!-- 非钢化 --> |
| | | <el-dialog v-model="dialogFormVisibles" top="5vh" width="85%" :title="$t('searchOrder.searchlayout')"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 500px;" |
| | | :data="tableDatas" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="engineerId" fixed align="center" :label="$t('searchOrder.projectnumber')" min-width="150"/> |
| | | <el-table-column prop="thickness" align="center" :label="$t('basicData.thickness')" min-width="150" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="150" /> |
| | | <el-table-column prop="temperingLayoutId" fixed align="center" :label="$t('searchOrder.layoutnumber')" min-width="120" /> |
| | | <el-table-column prop="totalCount" align="center" :label="$t('searchOrder.allnumber')" min-width="150" /> |
| | | <el-table-column prop="realCount" align="center" :label="$t('searchOrder.numbercages')" min-width="150" /> |
| | | <el-table-column prop="lackCount" align="center" :label="$t('searchOrder.missingquantity')" min-width="150" /> |
| | | <el-table-column prop="damageCount" align="center" :label="$t('searchOrder.breakquantity')" min-width="150" /> |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="500"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="brokee(scope.row,1)">{{ $t('searchOrder.specifytempering') }}</el-button> |
| | | <el-button type="text" plain @click="brokee(scope.row,0)">{{ $t('searchOrder.specifyout') }}</el-button> |
| | | <el-button type="text" plain @click="brokek(scope.row)">{{ $t('searchOrder.specifyengineerid') }}</el-button> |
| | | <el-button type="text" plain @click="handlelack(scope.row)">{{ $t('hellow.missingnumber') }}</el-button> |
| | | <el-button type="text" plain @click="handlecagedetails(scope.row)">{{ $t('searchOrder.cagedetails') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <!-- <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="$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"> |
| | | <el-button type="text" plain @click="brokes(scope.row)">{{ $t('searchOrder.processcard') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> --> |
| | | </el-dialog> |
| | | </template> |
| | | <style> |
| | | #dt { display:block; float:left;line-height: 20px;margin-left: 150px;} |
| | | #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; |
| | | color: black; |
| | | width: 200px; |
| | | height: 100px; |
| | | background-color: #337ecc; |
| | | margin-left: 28%; |
| | | } |
| | | #awatch{ |
| | | height: 450px; |
| | | } |
| | | #occupy { |
| | | height: 100%; |
| | | width: 15%; |
| | | background-color: white; |
| | | margin: 0px 8px 0px 8px; |
| | | border: 1px #EBEEF5 solid; |
| | | text-align: center; |
| | | padding: 5px; |
| | | } |
| | | #biao { |
| | | font-size: 12px; |
| | | } |
| | | #zhi { |
| | | font-size: 18px; |
| | | font-weight: bold; |
| | | } |
| | | #demo-pagination-block + #demo-pagination-block { |
| | | margin-top: 10px; |
| | | } |
| | | #demo-pagination-block #demonstration { |
| | | margin-bottom: 16px; |
| | | } |
| | | ::-webkit-scrollbar { |
| | | width: 0 !important; |
| | | } |
| | | ::-webkit-scrollbar { |
| | | width: 0 !important;height: 0; |
| | | } |
| | | .img-list{ |
| | | position:relative; |
| | | } |
| | | .data-img{ |
| | | @apply float-none ; |
| | | width:100%; |
| | | height:16rem; |
| | | background: rgba(0, 0, 0, 0); |
| | | opacity: 1; |
| | | border-radius: 0.5rem 0.5rem 0px 0px; |
| | | } |
| | | .check-img{ |
| | | position: absolute; |
| | | width: 3.3125rem; |
| | | height: 2.9375rem; |
| | | top:20rem; |
| | | right: 57rem; |
| | | z-index: 10; |
| | | } |
| | | .check-imga{ |
| | | position: absolute; |
| | | width: 3.3125rem; |
| | | height: 2.9375rem; |
| | | top:15rem; |
| | | right: 28.5rem; |
| | | z-index: 10; |
| | | } |
| | | .vertical { |
| | | width: 45px; |
| | | height: 25px; |
| | | background-color: #409EFF; |
| | | top: 485px; /* 初始位置 */ |
| | | left: 899px; /* 水平居中 */ |
| | | transform: translateX(-50%); |
| | | animation: move-vertical 6s infinite; /* 从上到下动画,持续6秒,无限循环 */ |
| | | } |
| | | @keyframes move-vertical { |
| | | 0% { |
| | | top: 485px; /* 起始位置 */ |
| | | } |
| | | 100% { |
| | | top: calc(100% - 210px); /* 从上到下结束位置 */ |
| | | } |
| | | } |
| | | .img-dlpl{ |
| | | margin-left: 20px; |
| | | margin-top: 0px; |
| | | background-image:url('../../assets/ganghuaqian.png'); |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 400px; |
| | | width: 1200px; |
| | | max-width: 100%; |
| | | background-size: 1200px 400px; |
| | | overflow: hidden; |
| | | position:relative |
| | | } |
| | | .img-car1{ |
| | | display: flex; |
| | | background-image:url('../../assets/xiaoche.png'); |
| | | position: absolute; |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 200px; |
| | | width: 200px; |
| | | max-width: 100%; |
| | | background-size: 200px 70px; |
| | | overflow: hidden; |
| | | position:relative |
| | | } |
| | | .img-car4{ |
| | | display: flex; |
| | | background-image:url('../../assets/xiaoche.png'); |
| | | position: absolute; |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 200px; |
| | | width: 200px; |
| | | max-width: 100%; |
| | | background-size: 200px 70px; |
| | | overflow: hidden; |
| | | position:relative |
| | | } |
| | | .table-container { |
| | | display: flex; |
| | | flex-wrap: nowrap; /* 防止换行 */ |
| | | justify-content: space-between; /* 根据需要调整子元素之间的间距 */ |
| | | } |
| | | .table-container > el-card { |
| | | flex: 1; /* 使两个卡片平分可用空间 */ |
| | | margin-bottom: 10px; /* 可选,根据需要添加底部间距 */ |
| | | } |
| | | #dotClass { |
| | | display: flex; |
| | | margin-left: 20px; |
| | | size: 50px; |
| | | margin-top: 20px; |
| | | margin-bottom: 10px; |
| | | } |
| | | .row-red-background { |
| | | background-color: #CDAF95 !important; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div> |
| | | <div style="display: flex;width: 1770px;"> |
| | | <el-input v-model="glassId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" :placeholder="$t('searchOrder.inglassID')" /> |
| | | <el-input v-model="startSlot" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" @input="handleInputa" :placeholder="$t('film.originateslot')" /> |
| | | <el-input v-model="targetSlot" clearable style="margin-left: 10px;margin-bottom: 10px;width: 200px;" @input="handleInputb" :placeholder="$t('film.endoriginateslot')" /> |
| | | <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('searchOrder.taskstatus')" clearable |
| | | style="width: 200px;margin-left: 10px;"> |
| | | <el-option :label="$t('searchOrder.begin')" value="0"></el-option> |
| | | <el-option :label="$t('searchOrder.finish')" value="2"></el-option> |
| | | <el-option :label="$t('order.dilapidation')" value="3"></el-option> |
| | | <el-option :label="$t('searchOrder.uncar')" value="4"></el-option> |
| | | </el-select> |
| | | <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('film.enabletype')" clearable |
| | | style="width: 200px;margin-left: 10px;"> |
| | | <el-option :label="$t('searchOrder.inkage')" value="1"></el-option> |
| | | <el-option :label="$t('searchOrder.outfilm')" value="2"></el-option> |
| | | <el-option :label="$t('film.dispatch')" value="3"></el-option> |
| | | </el-select> |
| | | <el-date-picker |
| | | style="margin-left: 15px;" |
| | | v-model="timeRange" |
| | | type="datetimerange" |
| | | :shortcuts="shortcuts" |
| | | range-separator="至" |
| | | :start-placeholder="$t('reportmanage.starttime')" |
| | | :end-placeholder="$t('reportmanage.endtime')" |
| | | /> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="handleClick()">{{$t('reportmanage.inquire')}}</el-button> |
| | | </div> |
| | | <div style="margin-bottom: 10px;margin-top: 20px;margin-left: 20px;"> |
| | | <el-form> |
| | | <el-row style="margin-top: -15px;margin-bottom: -2px;"> |
| | | <el-col :span="4"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('hellow.countIn')" style="width: 14vw"> |
| | | {{ countIn }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('hellow.totalAreaIn')" style="width: 14vw"> |
| | | {{ totalAreaIn }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <div id="dta" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('hellow.countOut')" style="width: 14vw"> |
| | | {{ countOut }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <div id="dt" style="font-size: 15px;"> |
| | | <el-form-item :label="$t('hellow.totalAreaOut')" style="width: 14vw"> |
| | | {{ totalAreaOut }} |
| | | </el-form-item> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 580px;width: 1770px;" :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="80" /> |
| | | <el-table-column prop="startSlot" align="center" :label="$t('film.originateslot')" min-width="80" /> |
| | | <el-table-column prop="targetSlot" align="center" :label="$t('film.endoriginateslot')" min-width="80" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.taskstatus')" |
| | | min-width="80" |
| | | prop="taskState" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypeb(scope.row.taskState)"> |
| | | {{ getStatusTextb(scope.row.taskState) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('film.enabletype')" |
| | | min-width="80" |
| | | prop="taskType" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusTypea(scope.row.taskType)"> |
| | | {{ getStatusTexta(scope.row.taskType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('reportmanage.starttime')" min-width="100" /> |
| | | <el-table-column prop="formattedUpdateTime" align="center" :label="$t('reportmanage.endtime')" min-width="100" /> |
| | | </el-table> |
| | | <div style="margin-top: 20px;margin-left: 40%;"> |
| | | <el-pagination |
| | | v-model:current-page="currentPage2" |
| | | :page-size="pageSize" |
| | | :size="large" |
| | | :disabled="disabled" |
| | | layout="prev, pager, next, jumper" |
| | | :total="totalRecords" |
| | | @current-change="handlePageChange2" |
| | | style="margin-top: 10px;" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import {useI18n} from 'vue-i18n' |
| | | import {useRouter} from "vue-router" |
| | | import request from "@/utils/request" |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {ElMessage, ElMessageBox} from 'element-plus' |
| | | const {t} = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | import { inject } from 'vue'; |
| | | const globalDate = inject('globalDate'); |
| | | const router = useRouter() |
| | | const timeRange = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const tableDatax = ref([]) |
| | | const currentPage2 = ref(1) |
| | | const totalRecords = ref(0) |
| | | const countIn = ref(0) |
| | | const countOut = ref(0) |
| | | const totalAreaIn = ref(0) |
| | | const totalAreaOut = ref(0) |
| | | const glassId = ref(''); |
| | | const startSlot = ref(''); |
| | | const targetSlot = ref(''); |
| | | let getglobalDate = window.localStorage.getItem('getglobalDate') |
| | | const historical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageHistoryTask/queryBigStorageCageHistoryTask", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | startSlot: 0, |
| | | targetSlot: 0, |
| | | taskStateList: [], |
| | | taskTypeList: [], |
| | | beginDate: startTime, |
| | | endDate: getglobalDate |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const Daily = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageHistoryTask/queryBigDailyProduction", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | startSlot: 0, |
| | | targetSlot: 0, |
| | | taskStateList: [], |
| | | taskTypeList: [], |
| | | beginDate: startTime, |
| | | endDate: getglobalDate |
| | | }) |
| | | if (response.code == 200) { |
| | | countIn.value = response.data.countIn |
| | | countOut.value = response.data.countOut |
| | | totalAreaIn.value = response.data.totalAreaIn |
| | | totalAreaOut.value = response.data.totalAreaOut |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const handlePageChange2 = (newPage) => { |
| | | currentPage2.value = newPage; |
| | | window.localStorage.setItem('pagenumber', currentPage2.value) |
| | | historicala(currentPage2.value); |
| | | Dailya(currentPage2.value); |
| | | }; |
| | | const historicala = async (page) => { |
| | | try { |
| | | let celllist=[] |
| | | let stateList=[] |
| | | let pstartSlot= '' |
| | | let ptargetSlot='' |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(selectValuesa[1]!=null&&selectValuesa[1]!='undefined'){ |
| | | if(selectValuesa[1]!=""){ |
| | | stateList=[selectValuesa[1]]; |
| | | } |
| | | } |
| | | if(startSlot.value != ""){ |
| | | pstartSlot = startSlot.value |
| | | }else{ |
| | | pstartSlot = '0' |
| | | } |
| | | if(targetSlot.value != ""){ |
| | | ptargetSlot = targetSlot.value |
| | | }else{ |
| | | ptargetSlot = '0' |
| | | } |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageHistoryTask/queryBigStorageCageHistoryTask", { |
| | | pageNo: page, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | startSlot: pstartSlot, |
| | | targetSlot: ptargetSlot, |
| | | taskStateList: celllist, |
| | | taskTypeList: stateList, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | tableDatax.value = formattedData; |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const Dailya = async (page) => { |
| | | try { |
| | | let celllist=[] |
| | | let stateList=[] |
| | | let pstartSlot= '' |
| | | let ptargetSlot='' |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(selectValuesa[1]!=null&&selectValuesa[1]!='undefined'){ |
| | | if(selectValuesa[1]!=""){ |
| | | stateList=[selectValuesa[1]]; |
| | | } |
| | | } |
| | | if(startSlot.value != ""){ |
| | | pstartSlot = startSlot.value |
| | | }else{ |
| | | pstartSlot = '0' |
| | | } |
| | | if(targetSlot.value != ""){ |
| | | ptargetSlot = targetSlot.value |
| | | }else{ |
| | | ptargetSlot = '0' |
| | | } |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageHistoryTask/queryBigDailyProduction", { |
| | | pageNo: page, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | startSlot: pstartSlot, |
| | | targetSlot: ptargetSlot, |
| | | taskStateList: celllist, |
| | | taskTypeList: stateList, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | countIn.value = response.data.countIn |
| | | countOut.value = response.data.countOut |
| | | totalAreaIn.value = response.data.totalAreaIn |
| | | totalAreaOut.value = response.data.totalAreaOut |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const handleClick = async () => { |
| | | await sethistorical(); |
| | | await Dailyhistorical(); |
| | | }; |
| | | // 历史查询点击 |
| | | const sethistorical = async () => { |
| | | try { |
| | | let celllist=[] |
| | | let stateList=[] |
| | | let pstartSlot= '' |
| | | let ptargetSlot='' |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(selectValuesa[1]!=null&&selectValuesa[1]!='undefined'){ |
| | | if(selectValuesa[1]!=""){ |
| | | stateList=[selectValuesa[1]]; |
| | | } |
| | | } |
| | | if(startSlot.value != ""){ |
| | | pstartSlot = startSlot.value |
| | | }else{ |
| | | pstartSlot = '0' |
| | | } |
| | | if(targetSlot.value != ""){ |
| | | ptargetSlot = targetSlot.value |
| | | }else{ |
| | | ptargetSlot = '0' |
| | | } |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageHistoryTask/queryBigStorageCageHistoryTask", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | startSlot: pstartSlot, |
| | | targetSlot: ptargetSlot, |
| | | taskStateList: celllist, |
| | | taskTypeList: stateList, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | currentPage2.value = 1 |
| | | totalRecords.value = response.data.total/2 || 0 |
| | | const formattedData = response.data.records.map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const Dailyhistorical = async () => { |
| | | try { |
| | | let celllist=[] |
| | | let stateList=[] |
| | | let pstartSlot= '' |
| | | let ptargetSlot='' |
| | | if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){ |
| | | if(selectValuesa[0]!=""){ |
| | | celllist=[selectValuesa[0]]; |
| | | } |
| | | } |
| | | if(selectValuesa[1]!=null&&selectValuesa[1]!='undefined'){ |
| | | if(selectValuesa[1]!=""){ |
| | | stateList=[selectValuesa[1]]; |
| | | } |
| | | } |
| | | if(startSlot.value != ""){ |
| | | pstartSlot = startSlot.value |
| | | }else{ |
| | | pstartSlot = '0' |
| | | } |
| | | if(targetSlot.value != ""){ |
| | | ptargetSlot = targetSlot.value |
| | | }else{ |
| | | ptargetSlot = '0' |
| | | } |
| | | const response = await request.post("/cacheVerticalGlass/bigStorageCageHistoryTask/queryBigDailyProduction", { |
| | | pageNo: 1, |
| | | pageSize: 20, |
| | | glassId: glassId.value, |
| | | startSlot: pstartSlot, |
| | | targetSlot: ptargetSlot, |
| | | taskStateList: celllist, |
| | | taskTypeList: stateList, |
| | | beginDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[0])) || '', |
| | | endDate: (formatTimestamp(timeRange.value) && formatTimestamp(timeRange.value[1])) || '', |
| | | }) |
| | | if (response.code == 200) { |
| | | countIn.value = response.data.countIn |
| | | countOut.value = response.data.countOut |
| | | totalAreaIn.value = response.data.totalAreaIn |
| | | totalAreaOut.value = response.data.totalAreaOut |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | } |
| | | } |
| | | const handleInputa = (value: string) => { |
| | | const isNumeric = /^\d*$/.test(value); |
| | | if (isNumeric) { |
| | | startSlot.value = value; |
| | | } else { |
| | | startSlot.value = ''; |
| | | } |
| | | }; |
| | | const handleInputb = (value: string) => { |
| | | const isNumeric = /^\d*$/.test(value); |
| | | if (isNumeric) { |
| | | targetSlot.value = value; |
| | | } else { |
| | | targetSlot.value = ''; |
| | | } |
| | | }; |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | const shortcuts = [ |
| | | { |
| | | text: '最近一周', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setDate(oneWeekAgo.getDate() - 7) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近一个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 1) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | { |
| | | text: '最近三个月', |
| | | value: () => { |
| | | const backendTime = new Date(getglobalDate) |
| | | const oneWeekAgo = new Date(getglobalDate) |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | oneWeekAgo.setMonth(oneWeekAgo.getMonth() - 3) |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)] |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | }, |
| | | }, |
| | | ] |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(getglobalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | function getStatusTypeb(state: number) { |
| | | switch (state) { |
| | | case 0: |
| | | return 'primary'; |
| | | case 2: |
| | | return 'success'; |
| | | case 3: |
| | | return 'danger'; |
| | | case 4: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusTextb(state: number) { |
| | | switch (state) { |
| | | case 0: |
| | | return t('searchOrder.begin'); |
| | | case 2: |
| | | return t('searchOrder.finish'); |
| | | case 3: |
| | | return t('order.dilapidation'); |
| | | case 4: |
| | | return t('searchOrder.uncar'); |
| | | } |
| | | } |
| | | function getStatusTypea(ishorizontal: number) { |
| | | switch (ishorizontal) { |
| | | case 1: |
| | | return 'primary'; |
| | | case 2: |
| | | return 'success'; |
| | | case 3: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusTexta(ishorizontal: number) { |
| | | switch (ishorizontal) { |
| | | case 1: |
| | | return t('searchOrder.inkage'); |
| | | case 2: |
| | | return t('searchOrder.outfilm'); |
| | | case 3: |
| | | return t('film.dispatch'); |
| | | } |
| | | } |
| | | onMounted(() => { |
| | | parseAndSetTime(); |
| | | historical(); |
| | | Daily() |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | </style> |
| UI-Project/src/views/StockBasicData/Select.vue
UI-Project/src/views/StockBasicData/stockBasicData.vue
UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
UI-Project/src/views/StockBasicData/stockBasicyiwu.vue
UI-Project/src/views/StockBasicData/stockhistory.vue
UI-Project/src/views/TL/Temperedlayout/Temperedlayout.vue
UI-Project/src/views/User/permissions.vue
UI-Project/src/views/User/rolelist.vue
UI-Project/src/views/User/user.vue
UI-Project/src/views/User/userlist.vue
UI-Project/src/views/User/userpageNo.vue
UI-Project/src/views/Visualization/screen.vue
UI-Project/src/views/Visualization/screenone.vue
UI-Project/src/views/Visualization/screenthree.vue
UI-Project/src/views/Visualization/screentwo.vue
UI-Project/src/views/hollow/hellowquiphistory.vue
UI-Project/src/views/hollow/hellowquipthreehistory.vue
UI-Project/src/views/hollow/hellowquiptwohistory.vue
UI-Project/src/views/hollow/hellowslicecagehistory.vue
UI-Project/src/views/hollow/hol.vue
UI-Project/src/views/hollow/hollowaluminum.vue
UI-Project/src/views/hollow/hollowaluminumthree.vue
UI-Project/src/views/hollow/hollowaluminumtwo.vue
UI-Project/src/views/hollow/hollowequipment.vue
UI-Project/src/views/hollow/hollowequipmenthree.vue
UI-Project/src/views/hollow/hollowequipmenttwo.vue
UI-Project/src/views/hollow/hollowslicecage.vue
UI-Project/src/views/largescreen/largescreen.vue
UI-Project/src/views/largescreendisplay/screendisplay.vue
UI-Project/src/views/largescreendisplay/statistics.vue
UI-Project/src/views/mm/purchaseOrder/Create.vue
UI-Project/src/views/mm/purchaseOrder/CreateHeader.vue
UI-Project/src/views/mm/purchaseOrder/Details.vue
UI-Project/src/views/mm/purchaseOrder/Payment.vue
UI-Project/src/views/mm/purchaseOrder/PurchaseOrder.vue
UI-Project/src/views/mm/purchaseOrder/Return.vue
UI-Project/src/views/mm/purchaseOrder/Select.vue
UI-Project/src/views/mm/purchaseOrder/Storage.vue
UI-Project/vite.config.js
UI-Project/vue.config.js
hangzhoumesParent/JsonFile/PlcCacheGlass.json
hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
hangzhoumesParent/JsonFile/PlcLoadGlass.json
hangzhoumesParent/JsonFile/PlcTemperingGlass.json
hangzhoumesParent/JsonFile/PlcdownGlass.json
hangzhoumesParent/common/pom.xml
hangzhoumesParent/common/servicebase/pom.xml
hangzhoumesParent/common/servicebase/src/main/java/com/kangaroohy/milo/configuration/MiloAutoConfiguration.java
hangzhoumesParent/common/servicebase/src/main/java/com/kangaroohy/milo/pool/MiloConnectFactory.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/HollowBigStorageCageBaseInfo.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/PageRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/vo/BigStorageVO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/bigstoragecagetask/entity/BigStorageCageTask.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/bigstoragecagetask/entity/BigStorageTaskVO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/bigstoragecagetask/mapper/BigStorageCageTaskMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageTaskService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageTaskServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/ConstSysConfig.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/MybatisPlusConfig.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Swagger2Config.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/WebSocketConfig.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/GlobalExceptionHandler.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/ServiceException.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/handler/MyMetaObjectHandler.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/DamagePrint.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/request/DamageRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitInfo.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitObject.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterInfo.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/entity/Engineering.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/entity/OptimizeEngineering.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/mapper/EngineeringMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/mapper/xml/EngineeringMapper.xml
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/service/EngineeringService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/entity/request/GeneralRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/LoadGlassInfo.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/dto/HollowGlassInfoDTO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/controller/LargenScreenController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/DailyProductionVO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/DateRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/PieChartVO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/mapper/LargenScreenMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTaskHistory.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/entity/request/LoadGlassDeviceTaskHistoryRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskHistoryDao.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskHistoryService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceOneTaskServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceTaskHistoryServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Order.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orderdetail.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orders.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/dto/OrderDTO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/request/OrderRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrderdetailMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/xml/OrderMapper.xml
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/BasicDataProduceController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/DamageDetailsController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/FlowCardController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeLayoutController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkDetailController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/BasicDataProduce.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/DamageDetails.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/FlowCard.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeHeatDetail.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeHeatLayout.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWork.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWorkDetail.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/FlowCardDTO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/FlowCardPercentDTO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/ReportWorkDTO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/AwaitingRepair.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/FlowCardRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/OptimizeRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/OrderDetail.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/ReportWorkRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/Reportingdamage.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/BasicDataProduceMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/FlowCardMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeHeatDetailMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeHeatLayoutMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkDetailMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/AwaitingRepairMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/request/ReportingDamageMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/BasicDataProduceService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/DamageDetailsService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/FlowCardService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeDetailService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatDetailService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatLayoutService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeLayoutService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkDetailService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/BasicDataProduceServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/FlowCardServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeDetailServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatDetailServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatLayoutServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeLayoutServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/entity/RawGlassStorageDetails.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/entity/dto/RawGlassStorageDetailsDTO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/entity/RawGlassStorageTask.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/entity/request/RawGlassTaskRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/mapper/RawGlassStorageTaskMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/mapper/xml/RawGlassStorageTaskMapper.xml
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/RawGlassStorageTaskService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysconfig/controller/SysConfigController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysconfig/entity/SysConfig.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysconfig/entity/request/SysConfigRequest.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysconfig/mapper/SysConfigMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysconfig/service/SysConfigService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysconfig/service/impl/SysConfigServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictData.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictType.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictDataMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictTypeMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictDataService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictTypeService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictDataServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictTypeServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DateUtil.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/InitUtil.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/PageUtil.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/WebSocketServer.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/entity/UpPattenUsage.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/entity/vo/UpPattenUsageVO.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/mapper/UpPattenUsageMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/MD5.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/RedisUtil.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResponseUtil.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/Result.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResultCodeEnum.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/entity/WorkAssignment.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/xml/WorkAssignmentMapper.xml
hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java
hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java
hangzhoumesParent/common/servicebase/src/main/resources/application.yml
hangzhoumesParent/common/servicebase/src/main/resources/banner.txt
hangzhoumesParent/common/servicebase/src/main/resources/mapper/BigStorageCageTaskMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/FlowCardMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/GlassInfoMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/LargenScreenMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/OptimizeProjectMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/OrderMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageStationMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml
hangzhoumesParent/common/servicebase/target/classes/application.yml
hangzhoumesParent/common/servicebase/target/classes/banner.txt
hangzhoumesParent/common/servicebase/target/classes/mapper/BigStorageCageTaskMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/FlowCardMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/GlassInfoMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/LargenScreenMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/LoadGlassDeviceTaskMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/OptimizeProjectMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/OrderMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/RawGlassStorageDetailsMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/RawGlassStorageStationMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/TemperingGlassInfoMapper.xml
hangzhoumesParent/common/servicebase/target/classes/mapper/UpPattenUsageMapper.xml
hangzhoumesParent/common/springsecurity/pom.xml
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/RedisConfig.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/TokenWebSecurityConfig.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtAccessDeniedHandler.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtAuthenticationEntryPoint.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtLogoutSuccessHandler.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/LoginFailureHandler.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/LoginSuccessHandler.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/FastJsonRedisSerializer.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/JwtUtil.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/UserInfoUtils.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/WebUtils.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/SysMenuService.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRole.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRoleMenu.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/vo/SysRoleVO.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMapper.xml
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMenuMapper.xml
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleMenuService.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleService.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleMenuServiceImpl.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/LoginUser.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUser.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUserRole.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/vo/SysUserVO.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserMapper.xml
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserRoleMapper.xml
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserRoleService.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserService.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserRoleServiceImpl.java
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java
hangzhoumesParent/common/springsecurity/src/main/resources/application-dev.yml
hangzhoumesParent/common/springsecurity/src/main/resources/application-loc.yml
hangzhoumesParent/common/springsecurity/src/main/resources/application-prod.yml
hangzhoumesParent/common/springsecurity/src/main/resources/mapper/SysMenuMapper.xml
hangzhoumesParent/common/springsecurity/target/classes/application-dev.yml
hangzhoumesParent/common/springsecurity/target/classes/application-loc.yml
hangzhoumesParent/common/springsecurity/target/classes/application-prod.yml
hangzhoumesParent/common/springsecurity/target/classes/mapper/SysMenuMapper.xml
hangzhoumesParent/gateway/pom.xml
hangzhoumesParent/gateway/src/main/java/com/mes/GateWayApplication.java
hangzhoumesParent/gateway/src/main/java/com/mes/config/MyCorsConfig.java
hangzhoumesParent/gateway/src/main/resources/application.yml
hangzhoumesParent/gateway/target/classes/application.yml
hangzhoumesParent/mesHub/pom.xml
hangzhoumesParent/mesHub/src/main/java/com/mes/MesHubApplication.java
hangzhoumesParent/mesHub/src/main/resources/application-dev.yml
hangzhoumesParent/mesHub/src/main/resources/application.yml
hangzhoumesParent/moduleService/CacheGlassModule/pom.xml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/AppRunnerConfig.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/CacheGlassModuleApplication.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/S7object.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/SmbTool.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/config/S7ConfigWL1.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/controller/EdgGlassTaskInfoController.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/entity/request/EdgGlassInfoRequest.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/mapper/EdgGlassTaskInfoMapper.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageDetailsController.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/CutDrawingVO.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/EdgSlotRemainVO.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/EdgStorageCageVO.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcEdgTask.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/entity/CacheGlassInfo.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceController.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceTaskHistoryController.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTaskHistory.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/request/TaskHistoryRequest.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskHistoryMapper.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskMapper.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskHistoryService.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskService.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskHistoryServiceImpl.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskServiceImpl.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/s7/entity/S7DataWL1.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/s7/job/s7Job.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/entity/TaskCache.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/JsonFile/PlcCacheGlass.json
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-cz.yml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-dev.yml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-prod.yml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-yw.yml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/logback-spring.xml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageMapper.xml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskHistoryMapper.xml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml
hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/JsonFile/PlcCacheGlass.json
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/application-cz.yml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/application-dev.yml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/application-prod.yml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/application-yw.yml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/application.yml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/logback-spring.xml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/mapper/EdgStorageCageDetailsMapper.xml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/mapper/EdgStorageCageMapper.xml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/mapper/EdgStorageDeviceTaskHistoryMapper.xml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/mapper/EdgStorageDeviceTaskMapper.xml
hangzhoumesParent/moduleService/CacheGlassModule/target/classes/mapper/TaskCacheMapper.xml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/pom.xml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/AppRunnerConfig.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/CacheVerticalClassModuleApplication.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageGlassInfoController.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageGlassRelationInfoController.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageGlassInfo.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageGlassRelationInfo.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageAndDetailsDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageRelationDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageSequenceDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageSummaryDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/GlassInfoLackDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingGlassCountDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/vo/BigStorageDetailsQueryVO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/vo/BigStorageQueryVO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageGlassInfoMapper.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageGlassRelationInfoMapper.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageGlassInfoService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageGlassRelationInfoService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageGlassInfoServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageGlassRelationInfoServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/controller/BigStorageCageHistoryTaskController.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/entity/BigStorageCageHistoryTask.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/entity/request/BigStorageCageHistoryRequest.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/mapper/BigStorageCageHistoryTaskMapper.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageHistoryTaskService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageHistoryTaskServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/controller/BigStorageCageFeedTaskController.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/controller/BigStorageCageOutTaskController.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/UpdateBigStorageCageDTO.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/config/S7Config.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/controller/EdgGlassTaskInfoController.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/mapper/EdgGlassTaskInfoMapper.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/opccallback/BigStorageStartCallback.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/s7/entity/S7Data.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/s7/job/s7Job.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/BigStorageBaseService.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/impl/BigStorageBaseServiceImpl.java
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-yw.yml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/logback-spring.xml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageHistoryTaskMapper.xml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageGlassRelationInfoMapper.xml
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
hangzhoumesParent/moduleService/GlassStorageModule/pom.xml
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/GlassStorageApplication.java
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/config/S7Config.java
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassPushMessage.java
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/controller/RawGlassStorageDetailsController.java
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/controller/RawGlassStorageStationController.java
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/controller/RawGlassStorageTaskController.java
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/s7/entity/S7Data.java
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-alg.yml
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-prod.yml
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-yw.yml
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application.yml
hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java
hangzhoumesParent/moduleService/GlassStorageModule/target/classes/application-alg.yml
hangzhoumesParent/moduleService/GlassStorageModule/target/classes/application-dev.yml
hangzhoumesParent/moduleService/GlassStorageModule/target/classes/application-prod.yml
hangzhoumesParent/moduleService/GlassStorageModule/target/classes/application-yw.yml
hangzhoumesParent/moduleService/GlassStorageModule/target/classes/application.yml
hangzhoumesParent/moduleService/LoadGlassModule/pom.xml
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/AppRunnerConfig.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/common/S7object.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/config/S7Config.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/mapper/EngineeringMapper.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/mapper/xml/EngineeringMapper.xml
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/controller/LoadGlassDeviceTaskHistoryController.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/s7/entity/S7Data.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/entity/OptimizeUpPattenUsage.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkSequence.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/UpWorkstationMapper.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/UpWorkstationService.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/JsonFile/PlcLoadGlass.json
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-alg.yml
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-yw.yml
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/logback-spring.xml
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/UpWorkstationMapper.xml
hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java
hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
hangzhoumesParent/moduleService/LoadGlassModule/target/classes/JsonFile/PlcLoadGlass.json
hangzhoumesParent/moduleService/LoadGlassModule/target/classes/application-alg.yml
hangzhoumesParent/moduleService/LoadGlassModule/target/classes/application-cz.yml
hangzhoumesParent/moduleService/LoadGlassModule/target/classes/application-dev.yml
hangzhoumesParent/moduleService/LoadGlassModule/target/classes/application-prod.yml
hangzhoumesParent/moduleService/LoadGlassModule/target/classes/application-yw.yml
hangzhoumesParent/moduleService/LoadGlassModule/target/classes/application.yml
hangzhoumesParent/moduleService/LoadGlassModule/target/classes/logback-spring.xml
hangzhoumesParent/moduleService/LoadGlassModule/target/classes/mapper/UpWorkstationMapper.xml
hangzhoumesParent/moduleService/TemperingGlassModule/pom.xml
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/TemperingGlassModuleApplication.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/common/S7object.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/OpcNGTemperingTask.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/eneity/request/DamageRequest.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/controller/TemperingRecordController.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/entity/TemperingRecord.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/TemperingRecordMapper.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/xml/TemperingRecordMapper.xml
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/TemperingRecordService.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/impl/TemperingRecordServiceImpl.java
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-yw.yml
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/changelogBase.xml
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/mesChangelogInit.sql
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/mesRedisChange.sql
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/json/PlcTemperingGlass.json
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/logback-spring.xml
hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java
hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/AppRunnerConfig.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7object.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/request/DownGlassInfoRequest.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassTaskMapper.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageController.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/request/CacheWornRequest.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageMapper.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationTaskController.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstionAndDownGlassinfo.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/request/DownWorkRequest.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationTaskService.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationTaskServiceImpl.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/Configuration.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/ExcelToJsonConverter.java
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.xlsx
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-dev.yml
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-prod.yml
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-yw.yml
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/logback-spring.xml
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml
hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
hangzhoumesParent/moduleService/hollowGlassModule/pom.xml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/HollowGlassApplication.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageController.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageDetailsController.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowFormulaDetailsController.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassOutRelationInfoController.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCage.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCageDetails.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/HollowFormulaDetails.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/HollowGlassOutRelationInfo.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/HollowGlassRelationInfo.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/BigStorageSequenceDTO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/FlowCardGlassInfoDTO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/FlowCardVirtualSlotDTO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/HollowBigStorageAndDetailsDTO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/HollowBigStorageDTO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/HollowGlassDetailsDTO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LackDetailsDTO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LisecHollowDetails.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LisecHollowFrameDetails.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LisecHollowGlassAndFrameDetails.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LisecHollowGlassDetails.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/OrderDTO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/UpdateHollowBigStorageCageDTO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/request/HollowHistoryTaskRequest.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/request/HollowTaskRequest.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowAllFlowCardVO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowGlassFormulaVO.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageMapper.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowFormulaDetailsMapper.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageService.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowFormulaDetailsService.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageServiceImpl.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowFormulaDetailsServiceImpl.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowqueue/controller/HollowGlassQueueInfoController.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowqueue/mapper/HollowGlassQueueInfoMapper.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowqueue/service/HollowGlassQueueInfoService.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowqueue/service/impl/HollowGlassQueueInfoServiceImpl.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/controller/HollowBigStorageCageHistoryTaskController.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/entity/HollowBigStorageCageHistoryTask.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/entity/request/HollowBigStorageCageHistoryRequest.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/mapper/HollowBigStorageCageHistoryTaskMapper.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/HollowBigStorageCageHistoryTaskService.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/impl/HollowBigStorageCageHistoryTaskServiceImpl.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcHollowRemoveTask.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/utils/Blank.java
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-cz.yml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-dev.yml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-prod.yml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-yw.yml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application.yml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/logback-spring.xml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageHistoryTaskMapper.xml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowFormulaDetailsMapper.xml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/templates/hollowGlass.ftl
hangzhoumesParent/moduleService/pom.xml
hangzhoumesParent/pom.xml
hangzhoumesParent/readMe.md
logs/cacheGlass/web_debug.log
logs/cacheGlass/web_error.log
logs/cacheGlass/web_info.log
logs/cacheGlass/web_warn.log
logs/loadGlass/web_debug.log
logs/loadGlass/web_error.log
logs/loadGlass/web_info.log
logs/loadGlass/web_warn.log
pom.xml
replay_pid4772.log |