From eda704f48beacb5c68372482f73b50af3c4623fb Mon Sep 17 00:00:00 2001 From: wuyouming666 <2265557248@qq.com> Date: 星期三, 26 六月 2024 14:23:50 +0800 Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes --- hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java | 13 UI-Project/src/layout/MainErpView.vue | 182 + UI-Project/src/views/User/rolelist.vue | 88 UI-Project/src/views/Returns/returns.vue | 138 UI-Project/src/views/Identify/identify.vue | 21 UI-Project/src/views/Caching/cachingbefore.vue | 37 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml | 2 UI-Project/src/views/LoginView.vue | 41 UI-Project/src/views/UnLoadGlass/loadmachinerack.vue | 52 UI-Project/src/views/Caching/cachingun.vue | 172 + UI-Project/auto-imports.d.ts | 9 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml | 15 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java | 2 UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue | 8 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java | 19 UI-Project/src/views/User/permissions.vue | 121 - UI-Project/package.json | 8 UI-Project/src/views/User/userlist.vue | 79 UI-Project/src/views/RegisterView.vue | 66 UI-Project/src/views/StockBasicData/stockBasicData.vue | 53 UI-Project/src/views/UnLoadGlass/Landingindication.vue | 10 UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue | 51 UI-Project/src/lang/en.js | 302 ++++ UI-Project/src/lang/zh.js | 354 ++++ hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java | 8 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml | 14 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml | 5 /dev/null | 18 UI-Project/src/views/Slicecage/slicecage.vue | 821 +++++++--- hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java | 120 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml | 5 UI-Project/src/views/PurchaseReturn/purchaseStorage.vue | 2 UI-Project/src/main.js | 10 hangzhoumesParent/common/springsecurity/pom.xml | 1 UI-Project/src/router/index.js | 2 UI-Project/package-lock.json | 1346 +++++++++--------- hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml | 15 UI-Project/src/lang/index.js | 18 UI-Project/src/views/PurchaseReturn/purchaseReturn.vue | 21 UI-Project/vite.config.js | 16 40 files changed, 2,685 insertions(+), 1,580 deletions(-) diff --git a/UI-Project/auto-imports.d.ts b/UI-Project/auto-imports.d.ts new file mode 100644 index 0000000..66c4de4 --- /dev/null +++ b/UI-Project/auto-imports.d.ts @@ -0,0 +1,9 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +export {} +declare global { + const useI18n: typeof import('vue-i18n')['useI18n'] +} diff --git a/UI-Project/package-lock.json b/UI-Project/package-lock.json index d94acf9..df7b41a 100644 --- a/UI-Project/package-lock.json +++ b/UI-Project/package-lock.json @@ -20,8 +20,8 @@ "sortablejs": "^1.15.1", "sweetalert2": "^11.10.7", "vue": "^3.3.4", - "vue-echarts": "^6.7.3", - "vue-i18n": "^9.13.1", + "vue-draggable-plus": "^0.5.0", + "vue-i18n": "^9.10.1", "vue-router": "^4.2.4", "vxe-table": "^4.5.15", "xe-utils": "^3.5.14", @@ -29,10 +29,19 @@ }, "devDependencies": { "@types/sortablejs": "^1.15.7", - "@vitejs/plugin-vue": "^4.3.4", + "@vitejs/plugin-vue": "^4.6.2", "http-proxy-middleware": "^3.0.0", - "sass": "^1.77.6", + "unplugin-auto-import": "^0.17.6", "vite": "^4.4.9" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.8", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.8.tgz", + "integrity": "sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/@babel/helper-string-parser": { @@ -91,348 +100,12 @@ "vue": "^3.2.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/win32-ia32": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", "cpu": [ "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" ], "dev": true, "optional": true, @@ -507,6 +180,41 @@ "resolved": "https://registry.npmmirror.com/@kurkle/color/-/color-0.3.2.tgz", "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@popperjs/core": { "name": "@sxzz/popperjs-es", "version": "2.11.7", @@ -518,9 +226,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", - "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -575,10 +283,9 @@ } }, "node_modules/@types/sortablejs": { - "version": "1.15.7", - "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.7.tgz", - "integrity": "sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==", - "dev": true + "version": "1.15.8", + "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==" }, "node_modules/@types/web-bluetooth": { "version": "0.0.16", @@ -586,15 +293,15 @@ "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" }, "node_modules/@vitejs/plugin-vue": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz", - "integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==", + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", "dev": true, "engines": { "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4.0.0", + "vite": "^4.0.0 || ^5.0.0", "vue": "^3.2.25" } }, @@ -832,9 +539,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", "bin": { "acorn": "bin/acorn" }, @@ -852,7 +559,7 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", @@ -895,12 +602,30 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -938,15 +663,9 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -958,6 +677,9 @@ }, "engines": { "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" }, "optionalDependencies": { "fsevents": "~2.3.2" @@ -981,6 +703,12 @@ "engines": { "node": ">= 0.8" } + }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true }, "node_modules/crc-32": { "version": "1.2.2", @@ -1109,6 +837,18 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -1119,6 +859,31 @@ "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } }, "node_modules/fill-range": { "version": "7.0.1", @@ -1165,19 +930,6 @@ "node": ">=0.8" } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1220,15 +972,9 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", - "dev": true - }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { "binary-extensions": "^2.0.0" @@ -1273,6 +1019,12 @@ "node": ">=10" } }, + "node_modules/js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", + "dev": true + }, "node_modules/local-pkg": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", @@ -1305,14 +1057,11 @@ } }, "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.10", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, "node_modules/magic-string-ast": { @@ -1330,6 +1079,15 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } }, "node_modules/micromatch": { "version": "4.0.5", @@ -1361,6 +1119,33 @@ }, "engines": { "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" } }, "node_modules/moment": { @@ -1396,7 +1181,7 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" @@ -1408,9 +1193,9 @@ "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" }, "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==" + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, "node_modules/picocolors": { "version": "1.0.0", @@ -1486,6 +1271,17 @@ } } }, + "node_modules/pkg-types": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.1.1.tgz", + "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==", + "dev": true, + "dependencies": { + "confbox": "^0.1.7", + "mlly": "^1.7.0", + "pathe": "^1.1.2" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -1518,9 +1314,29 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" @@ -1535,10 +1351,15 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, - "node_modules/resize-detector": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/resize-detector/-/resize-detector-0.3.0.tgz", - "integrity": "sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==" + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, "node_modules/rollup": { "version": "3.29.4", @@ -1556,22 +1377,34 @@ "fsevents": "~2.3.2" } }, - "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmmirror.com/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" + "queue-microtask": "^1.2.2" } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "dev": true }, "node_modules/sortablejs": { "version": "1.15.1", @@ -1595,6 +1428,18 @@ }, "engines": { "node": ">=0.8" + } + }, + "node_modules/strip-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", + "dev": true, + "dependencies": { + "js-tokens": "^9.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/sweetalert2": { @@ -1626,21 +1471,126 @@ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" }, + "node_modules/ufo": { + "version": "1.5.3", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "dev": true + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "node_modules/unplugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz", - "integrity": "sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==", + "node_modules/unimport": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.7.2.tgz", + "integrity": "sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==", + "dev": true, "dependencies": { - "acorn": "^8.10.0", - "chokidar": "^3.5.3", + "@rollup/pluginutils": "^5.1.0", + "acorn": "^8.11.3", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.10", + "mlly": "^1.7.0", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "scule": "^1.3.0", + "strip-literal": "^2.1.0", + "unplugin": "^1.10.1" + } + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unimport/node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/unplugin": { + "version": "1.10.1", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.10.1.tgz", + "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==", + "dependencies": { + "acorn": "^8.11.3", + "chokidar": "^3.6.0", "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.5.0" + "webpack-virtual-modules": "^0.6.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/unplugin-auto-import": { + "version": "0.17.6", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.17.6.tgz", + "integrity": "sha512-dmX0Pex5DzMzVuALkexboOZvh51fL/BD6aoPO7qHoTYGlQp0GRKsREv2KMF1lzYI9SXKQiRxAjwzbQnrFFNydQ==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.8", + "@rollup/pluginutils": "^5.1.0", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.10", + "minimatch": "^9.0.4", + "unimport": "^3.7.1", + "unplugin": "^1.10.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/vite": { @@ -1710,48 +1660,15 @@ "@vue/shared": "3.3.4" } }, - "node_modules/vue-echarts": { - "version": "6.7.3", - "resolved": "https://registry.npmmirror.com/vue-echarts/-/vue-echarts-6.7.3.tgz", - "integrity": "sha512-vXLKpALFjbPphW9IfQPOVfb1KjGZ/f8qa/FZHi9lZIWzAnQC1DgnmEK3pJgEkyo6EP7UnX6Bv/V3Ke7p+qCNXA==", - "hasInstallScript": true, + "node_modules/vue-draggable-plus": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/vue-draggable-plus/-/vue-draggable-plus-0.5.0.tgz", + "integrity": "sha512-A5TT5+M5JceROSjPO9aDZTsrSN1TetEs419czPlboomarSiGIBIxTp2WD7XH53EHMrbO7Qo+leRiHWV/rMlyjA==", "dependencies": { - "resize-detector": "^0.3.0", - "vue-demi": "^0.13.11" + "@types/sortablejs": "^1.15.8" }, "peerDependencies": { - "@vue/composition-api": "^1.0.5", - "@vue/runtime-core": "^3.0.0", - "echarts": "^5.4.1", - "vue": "^2.6.12 || ^3.1.1" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - }, - "@vue/runtime-core": { - "optional": true - } - } - }, - "node_modules/vue-echarts/node_modules/vue-demi": { - "version": "0.13.11", - "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" + "@types/sortablejs": "^1.15.0" }, "peerDependenciesMeta": { "@vue/composition-api": { @@ -1770,6 +1687,9 @@ }, "engines": { "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" }, "peerDependencies": { "vue": "^3.0.0" @@ -1811,9 +1731,9 @@ } }, "node_modules/webpack-virtual-modules": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", - "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==" + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" }, "node_modules/wmf": { "version": "1.0.2", @@ -1866,6 +1786,12 @@ } }, "dependencies": { + "@antfu/utils": { + "version": "0.7.8", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.8.tgz", + "integrity": "sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==", + "dev": true + }, "@babel/helper-string-parser": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", @@ -1902,157 +1828,10 @@ "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==", "requires": {} }, - "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "dev": true, - "optional": true - }, "@esbuild/win32-ia32": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", "dev": true, "optional": true }, @@ -2111,15 +1890,41 @@ "resolved": "https://registry.npmmirror.com/@kurkle/color/-/color-0.3.2.tgz", "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@popperjs/core": { "version": "npm:@sxzz/popperjs-es@2.11.7", "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" }, "@rollup/pluginutils": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", - "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "requires": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -2163,10 +1968,9 @@ } }, "@types/sortablejs": { - "version": "1.15.7", - "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.7.tgz", - "integrity": "sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==", - "dev": true + "version": "1.15.8", + "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==" }, "@types/web-bluetooth": { "version": "0.0.16", @@ -2174,9 +1978,9 @@ "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" }, "@vitejs/plugin-vue": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz", - "integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==", + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", "dev": true, "requires": {} }, @@ -2351,9 +2155,9 @@ } }, "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==" }, "adler-32": { "version": "1.3.1", @@ -2362,7 +2166,7 @@ }, "anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "requires": { "normalize-path": "^3.0.0", @@ -2399,10 +2203,25 @@ "proxy-from-env": "^1.1.0" } }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, "braces": { "version": "3.0.2", @@ -2430,9 +2249,9 @@ } }, "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2456,6 +2275,12 @@ "requires": { "delayed-stream": "~1.0.0" } + }, + "confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true }, "crc-32": { "version": "1.2.2", @@ -2557,6 +2382,12 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + }, "estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -2567,6 +2398,28 @@ "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } }, "fill-range": { "version": "7.0.1", @@ -2595,12 +2448,6 @@ "version": "1.1.2", "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz", "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "optional": true }, "glob-parent": { "version": "5.1.2", @@ -2635,15 +2482,9 @@ "micromatch": "^4.0.5" } }, - "immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", - "dev": true - }, "is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { "binary-extensions": "^2.0.0" @@ -2673,6 +2514,12 @@ "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true }, + "js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", + "dev": true + }, "local-pkg": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", @@ -2695,9 +2542,9 @@ "requires": {} }, "magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.10", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" } @@ -2714,6 +2561,12 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true }, "micromatch": { "version": "4.0.5", @@ -2738,6 +2591,27 @@ "mime-db": "1.52.0" } }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "dev": true, + "requires": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, "moment": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", @@ -2756,7 +2630,7 @@ }, "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-wheel-es": { @@ -2765,9 +2639,9 @@ "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" }, "pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==" + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, "picocolors": { "version": "1.0.0", @@ -2802,6 +2676,17 @@ "integrity": "sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==", "requires": {} }, + "pkg-types": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.1.1.tgz", + "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==", + "dev": true, + "requires": { + "confbox": "^0.1.7", + "mlly": "^1.7.0", + "pathe": "^1.1.2" + } + }, "postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -2817,9 +2702,15 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" @@ -2831,10 +2722,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, - "resize-detector": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/resize-detector/-/resize-detector-0.3.0.tgz", - "integrity": "sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==" + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, "rollup": { "version": "3.29.4", @@ -2845,16 +2737,20 @@ "fsevents": "~2.3.2" } }, - "sass": { - "version": "1.77.6", - "resolved": "https://registry.npmmirror.com/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" + "queue-microtask": "^1.2.2" } + }, + "scule": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "dev": true }, "sortablejs": { "version": "1.15.1", @@ -2872,6 +2768,15 @@ "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", "requires": { "frac": "~1.1.2" + } + }, + "strip-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", + "dev": true, + "requires": { + "js-tokens": "^9.0.0" } }, "sweetalert2": { @@ -2897,21 +2802,97 @@ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" }, + "ufo": { + "version": "1.5.3", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "dev": true + }, "undici-types": { "version": "5.26.5", "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "unplugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz", - "integrity": "sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==", + "unimport": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.7.2.tgz", + "integrity": "sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==", + "dev": true, "requires": { - "acorn": "^8.10.0", - "chokidar": "^3.5.3", + "@rollup/pluginutils": "^5.1.0", + "acorn": "^8.11.3", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.10", + "mlly": "^1.7.0", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "scule": "^1.3.0", + "strip-literal": "^2.1.0", + "unplugin": "^1.10.1" + }, + "dependencies": { + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, + "local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "requires": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + } + } + } + }, + "unplugin": { + "version": "1.10.1", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.10.1.tgz", + "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==", + "requires": { + "acorn": "^8.11.3", + "chokidar": "^3.6.0", "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.5.0" + "webpack-virtual-modules": "^0.6.1" + } + }, + "unplugin-auto-import": { + "version": "0.17.6", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.17.6.tgz", + "integrity": "sha512-dmX0Pex5DzMzVuALkexboOZvh51fL/BD6aoPO7qHoTYGlQp0GRKsREv2KMF1lzYI9SXKQiRxAjwzbQnrFFNydQ==", + "dev": true, + "requires": { + "@antfu/utils": "^0.7.8", + "@rollup/pluginutils": "^5.1.0", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.10", + "minimatch": "^9.0.4", + "unimport": "^3.7.1", + "unplugin": "^1.10.1" + }, + "dependencies": { + "local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "requires": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + } + } } }, "vite": { @@ -2938,21 +2919,12 @@ "@vue/shared": "3.3.4" } }, - "vue-echarts": { - "version": "6.7.3", - "resolved": "https://registry.npmmirror.com/vue-echarts/-/vue-echarts-6.7.3.tgz", - "integrity": "sha512-vXLKpALFjbPphW9IfQPOVfb1KjGZ/f8qa/FZHi9lZIWzAnQC1DgnmEK3pJgEkyo6EP7UnX6Bv/V3Ke7p+qCNXA==", + "vue-draggable-plus": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/vue-draggable-plus/-/vue-draggable-plus-0.5.0.tgz", + "integrity": "sha512-A5TT5+M5JceROSjPO9aDZTsrSN1TetEs419czPlboomarSiGIBIxTp2WD7XH53EHMrbO7Qo+leRiHWV/rMlyjA==", "requires": { - "resize-detector": "^0.3.0", - "vue-demi": "^0.13.11" - }, - "dependencies": { - "vue-demi": { - "version": "0.13.11", - "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", - "requires": {} - } + "@types/sortablejs": "^1.15.8" } }, "vue-i18n": { @@ -2988,9 +2960,9 @@ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, "webpack-virtual-modules": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", - "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==" + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" }, "wmf": { "version": "1.0.2", diff --git a/UI-Project/package.json b/UI-Project/package.json index 15242fb..7a586a0 100644 --- a/UI-Project/package.json +++ b/UI-Project/package.json @@ -20,8 +20,8 @@ "sortablejs": "^1.15.1", "sweetalert2": "^11.10.7", "vue": "^3.3.4", - "vue-echarts": "^6.7.3", - "vue-i18n": "^9.13.1", + "vue-draggable-plus": "^0.5.0", + "vue-i18n": "^9.10.1", "vue-router": "^4.2.4", "vxe-table": "^4.5.15", "xe-utils": "^3.5.14", @@ -29,9 +29,9 @@ }, "devDependencies": { "@types/sortablejs": "^1.15.7", - "@vitejs/plugin-vue": "^4.3.4", + "@vitejs/plugin-vue": "^4.6.2", "http-proxy-middleware": "^3.0.0", - "sass": "^1.77.6", + "unplugin-auto-import": "^0.17.6", "vite": "^4.4.9" } } diff --git a/UI-Project/src/lang/LanguageMixin.js b/UI-Project/src/lang/LanguageMixin.js deleted file mode 100644 index 5a90328..0000000 --- a/UI-Project/src/lang/LanguageMixin.js +++ /dev/null @@ -1,14 +0,0 @@ -export default { - created() { - const localStorageLang = localStorage.getItem('preferredLanguage'); - if (localStorageLang) { - this.$i18n.locale = localStorageLang; - } - }, - methods: { - switchLanguage(lang) { - this.$i18n.locale = lang; - localStorage.setItem('preferredLanguage', lang); - } - } -} \ No newline at end of file diff --git a/UI-Project/src/lang/en.js b/UI-Project/src/lang/en.js new file mode 100644 index 0000000..d80a9be --- /dev/null +++ b/UI-Project/src/lang/en.js @@ -0,0 +1,302 @@ +export default { + "northglassMESsystem": '小懈褋褌械屑邪 "NorthGlass MES"' , + login:{ + userErr:'袙胁械写懈褌械 薪芯屑械褉 褋褔械褌邪.', + pwErr:'袙胁械写懈褌械 锌邪褉芯谢褜.', + user:'袗泻泻邪褍薪褌', + password:'袣芯写', + login:'袟邪谢芯谐懈薪', + loginSuccessful:'袙褏芯写 胁 褋懈褋褌械屑褍 胁褘锌芯谢薪械薪 褍褋锌械褕薪芯锛�', + register:'袟邪褉械谐懈褋褌褉懈褉芯胁邪', + namea:'袠屑褟 薪械 屑芯卸械褌 斜褘褌褜 锌褍褋褌褘屑', + len:'袛谢懈薪邪 薪械 写芯谢卸薪邪 锌褉械胁褘褕邪褌褜 16', + passnull:'袩邪褉芯谢褜 薪械 屑芯卸械褌 斜褘褌褜 锌褍褋褌褘屑', + leng:'袛谢懈薪邪 锌邪褉芯谢褟 薪械 写芯谢卸薪邪 斜褘褌褜 屑械薪褜褕械 6 懈谢懈 斜芯谢褜褕械 16.', + spwn:'袩邪褉芯谢褜 锌芯写褌胁械褉卸写械薪懈褟 薪械 屑芯卸械褌 斜褘褌褜 锌褍褋褌褘屑', + depass:'袛胁邪 褉邪蟹薪褘褏 锌邪褉芯谢褟.', + }, + register:{ + registerSuccessful:'袪械谐懈褋褌褉邪褑懈褟 褍褋锌械褕薪芯', + newuserregister:'袧芯胁褘泄 褉械械褋褌褉 锌芯谢褜蟹芯胁邪褌械谢械泄', + name:'袠屑褟锛�', + inputname:'袙胁械写懈褌械 懈屑褟', + password:'袣芯写:', + pwErr:'袙胁械写懈褌械 锌邪褉芯谢褜.', + passwordation:'袩芯写褌胁械褉写懈褌械 锌邪褉芯谢褜:', + pwErration:'袩芯卸邪谢褍泄褋褌邪, 锌芯写褌胁械褉褌懈褌械 锌邪褉芯谢褜', + registration:'袩芯写褌胁械褉卸写械薪懈械 芯 褉械谐懈褋褌褉邪褑懈懈', + false:'袨褌屑械薪邪', + }, + main:{ + connectErr:'袧械芯斜褘褔薪芯械 锌芯写泻谢褞褔械薪懈械 泻 褋械褉胁械褉褍, 锌芯锌褉芯斜褍泄褌械 锌芯蟹卸械', + titleFirst:"袛芯斜褉芯 锌芯卸邪谢芯胁邪褌褜 ", + titleLast:' 胁 褋懈褋褌械屑褍 NorthGlass MES锛�', + quit:"袙褘褏芯写", + }, + basicData:{ + deletemessage:'校写邪谢懈褌褜 褝褌褍 懈薪褎芯褉屑邪褑懈褞 懈谢懈 薪械褌?', + laserprinting:'袦邪褕懈薪邪 谢邪蟹械褉薪芯泄 屑邪褉泻懈褉芯胁泻懈 谐芯褌芯胁邪锛�', + cuttingmachine:'袦邪褕懈薪邪 写谢褟 褉械蟹泻懈 谐芯褌芯胁邪锛�', + machine:'小芯褋褌芯褟薪懈械 褋褌邪薪芯泻 蟹邪谐褉褍蟹泻懈 胁 褉械卸懈屑械 芯薪谢邪泄薪锛�', + machineaa:'袪褍褔薪芯械 褋芯褋褌芯褟薪懈械 褋褌邪薪芯泻 蟹邪谐褉褍蟹泻懈:', + selectproject:"袙褘斜械褉懈褌械 锌褉芯械泻褌", + startloading:'袧邪褔邪谢芯 蟹邪谐褉褍蟹泻懈', + stop:'袩邪褍蟹邪', + yes:'锌芯写褌胁械褉写', + change:'锌械褉械泻谢褞褔邪', + projectnumber:'袧芯屑械褉 锌褉芯械泻褌邪', + glasswidth:'楔懈褉懈薪邪 褋褌械泻谢邪', + glassheight:'袙褘褋芯褌邪 褋褌械泻谢邪', + coatingtypes:'孝懈锌褘 锌芯泻褉褘褌懈泄', + coatingtypesa:'孝懈锌褘 锌芯泻褉褘褌懈泄锛�', + quantity:'袣芯谢懈褔械褋褌胁芯', + quantitya:'袣芯谢懈褔械褋褌胁芯锛�', + thickness:'孝芯谢褖懈薪邪', + thicknessa:'孝芯谢褖懈薪邪锛�', + startstatus:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈', + pass:'效械褉械蟹', + waiting:'袞写械屑.', + up:'袟邪谐褉褍蟹泻邪', + finish:'袟邪胁械褉褕械薪芯', + project:'懈薪卸械薪械褉懈褟', + plselectproject:'袩芯卸邪谢褍泄褋褌邪, 胁褘斜械褉懈褌械 锌褉芯械泻褌.', + confirm:'锌芯写褌胁械褉写', + cancel:'袨褌屑械薪邪', + startfilm:'袧邪褔懈薪邪褌褜 懈谢懈 薪械褌锛�', + whetherpause:'袩邪褍蟹邪 懈谢懈 薪械褌锛�', + station:'袪邪斜芯褔械械 屑械褋褌芯', + width:'楔懈褉懈薪邪', + widtha:'楔懈褉懈薪邪锛�', + height:'袙褘褋芯褌邪', + heighta:'袙褘褋芯褌邪锛�', + operate:'袨锌械褉邪褑懈褟', + add:'袛芯斜邪胁谢褟', + delete:'校写邪谢', + addglass:'袛芯斜邪胁懈褌褜 褋褌械泻谢芯', + selectwidth:'袙褘斜懈褉懈褌械 褕懈褉懈薪褍', + selectheight:'袙褘斜懈褉懈褌械 胁褘褋芯褌褍', + selectcoatingtypes:'袙褘斜械褉懈褌械 褌懈锌褘 锌芯泻褉褘褌懈泄', + selectthickness:'袙褘斜械褉懈褌械 褌芯谢褖懈薪褍', + selectquantity:'袙胁械写懈褌械 泻芯谢褜褔械褋褌胁芯.', + pause:'袙褌芯褉邪褟 懈 褔械褌胁械褉褌邪褟 褋褌褉芯泻懈 写芯谢卸薪褘 斜褘褌褜 胁褘褕械 2700 写谢褟 褋芯褏褉邪薪械薪懈褟!', + pausea:'袩芯卸邪谢褍泄褋褌邪, 褍斜械写懈褌械褋褜, 褔褌芯 屑邪褉泻懈褉芯胁芯褔薪邪褟 懈 褉械卸褍褖邪褟 屑邪褕懈薪褘 谐芯褌芯胁褘!', + infonull:'袧芯屑械褉 锌褉芯械泻褌邪 薪械 屑芯卸械褌 斜褘褌褜 锌褍褋褌褘屑!', + updatanull:'袩褉芯械泻褌 薪械 褋芯褏褉邪薪懈谢懈褋褜 薪邪 谢懈褋褌械 蟹邪谐褉褍蟹泻懈!', + glassnull:'袨褕懈斜泻邪 锌褉懈 芯斜薪芯胁谢械薪懈懈 褋褌械泻谢邪', + }, + sorter:{ + gridnumber:'携褔械械泻 褋械褌泻谢邪', + glassnumber:'袧芯屑械褉 褋褌邪泻谢邪', + width:'楔懈褉懈薪邪', + height:'袙褘褋芯褌邪', + startstatus:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈', + disable:'袨褌泻谢褞褔', + start:'袧邪褔邪谢芯', + deficiencieste:'袧械写芯褋褌邪褌泻懈 胁 芯褌褔械褌薪芯褋褌懈', + operate:'袨锌械褉邪褑懈褟', + prompt:'袩芯写褋泻邪蟹泻', + information:'小谢械写褍械褌 谢懈 褋芯芯斜褖邪褌褜 薪械写芯褋褌邪褞褖褍褞 懈薪褎芯褉屑邪褑懈褞锛�', + yes:'袛邪', + cancel:'袨褌屑械薪邪', + }, + order:{ + dilapidation:'袩芯胁褉械卸写械薪懈械', + Takeaway:'袙蟹褟褌褜 胁褉褍褔薪褍褞', + }, + + searchOrder:{ + cageinformation:'袠薪褎芯褉屑邪褑懈褟 斜褍褎械褉邪', + productionqueue:'袩褉芯懈蟹胁芯写褋褌胁械薪薪邪褟 芯褔械褉械写褜', + outputglassID:'袙褘褏芯写薪芯械 褋褌械泻谢芯 ID', + startposition:'袟邪薪褟褌褜 锌芯蟹懈褑懈懈', + targetlocation:'袩芯蟹懈褑懈褟 褑械谢懈', + trips:'鈩� 锌芯械蟹写邪', + number:'小械褉懈泄薪 薪芯屑械褉', + taskstatus:'小芯褋褌芯褟薪懈械 蟹邪写邪褔懈', + filmenter:'袨卸懈写邪薪懈械 褋褌械泻谢褟薪薪芯泄 胁褏芯写', + infilm:'袙 薪邪褋褌芯褟褖械械 胁褉械屑褟', + endtask:'袟邪写邪褔邪 薪邪 泻芯薪械褑', + completetask:'袙褘锌芯谢薪械薪懈械 蟹邪写邪薪懈褟', + intoglassid:'袙褏芯写薪芯泄 褋褌械泻谢褟薪薪褘泄 ID', + line:'袥懈薪懈褟', + Usage:'小泻芯褉芯褋褌褜 懈褋锌芯谢褜蟹芯胁邪薪懈褟', + free:'袘械褋锌谢邪褌薪芯 (褟褔械械泻)', + addcage:'袛芯斜邪胁懈褌褜 懈薪褎芯褉屑邪褑懈褞 芯 斜褍褎械褉械', + glassIDa:'小褌械泻谢褟薪薪褘泄 ID锛�', + glassID:'小褌械泻谢褟薪薪褘泄 ID', + inglassID:'袙胁械写懈褌械 褋褌械泻谢芯 ID', + pieceingrid:'袩芯褉褟写芯泻 褉邪褋锌芯谢芯卸械薪懈褟 屑邪谢械薪褜泻懈褏 褋褌械泻谢褟薪薪褘褏 锌谢邪褋褌懈薪 胁 泻谢械褌泻械', + pieceingrida:'袩芯褉褟写芯泻 褉邪褋锌芯谢芯卸械薪懈褟 屑邪谢械薪褜泻懈褏 褋褌械泻谢褟薪薪褘褏 锌谢邪褋褌懈薪 胁 泻谢械褌泻械锛�', + inpieceingrid:'袙胁械写懈褌械 锌芯褉褟写芯泻 褉邪褋锌芯谢芯卸械薪懈褟 褋褌械泻谢褟薪薪褘褏 谢懈褋褌芯胁 胁 褟褔械械泻械', + cardnumber:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪', + cardnumbera:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪锛�', + incardnumber:'袙胁械写懈褌械 薪芯屑械褉 锌褉芯褑械褋褋邪 .', + typeglass:'孝懈锌 褋褌械泻谢邪', + typeglassa:'孝懈锌 褋褌械泻谢邪锛�', + intypeglass:'袙胁械写懈褌械 褌懈锌 褋褌械泻谢邪', + coatingtypes:'孝懈锌褘 锌芯泻褉褘褌懈泄', + width:'楔懈褉懈薪邪', + widtha:'楔懈褉懈薪邪锛�', + inwidth:'袙胁械写懈褌械 褕懈褉懈薪褍', + height:'袙褘褋芯褌邪', + heighta:'袙褘褋芯褌邪锛�', + inheight:'袙胁械写懈褌械 胁褘褋芯褌褍', + thickness:'孝芯谢褖懈薪邪', + thicknessa:'孝芯谢褖懈薪邪锛�', + inthickness:'袙胁械写懈褌械 褌芯谢褖懈薪褍.', + layoutID:'效械褉褌械卸 ID 蟹邪谐褉褍蟹泻懈 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈', + layoutIDa:'效械褉褌械卸 ID 蟹邪谐褉褍蟹泻懈 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈锛�', + inlayoutID:'袙胁械写懈褌械 褔械褉褌械卸 蟹邪泻邪谢泻懈 ID', + picturesequence:'效械褉褌械卸 褋械褉懈泄薪 薪芯屑械褉 蟹邪谐褉褍蟹泻懈 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈', + picturesequencea:'效械褉褌械卸 褋械褉懈泄薪 薪芯屑械褉 蟹邪谐褉褍蟹泻懈 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈锛�', + inpicturesequence:'袙胁械写懈褌械 锌芯褉褟写芯泻 褔械褉褌械卸懈 蟹邪泻邪谢泻懈 褋褌械泻谢邪.', + startstatus:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈', + startstatusa:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈锛�', + instartstatus:'袙胁械写懈褌械 褋芯褋褌芯褟薪懈械 邪泻褌懈胁邪褑懈懈', + glassgaps:'小褌械泻谢褟薪薪褘泄 蟹邪蟹芯褉', + glassgapsa:'小褌械泻谢褟薪薪褘泄 蟹邪蟹芯褉锛�', + inglassgaps:'袙胁械写懈褌械 褋褌械泻谢芯 蟹邪蟹芯褉', + sure:'锌芯写褌胁械褉写', + cancel:'袨褌屑械薪邪', + glassID:'小褌械泻谢褟薪薪褘泄 ID', + operate:'袨锌械褉邪褑懈褟', + breakage:'袩芯胁褉械卸写械薪懈械', + delete:'校写邪谢', + outfilm:'袙褘锌褍褋泻 褋褌械泻谢邪', + cagetableID:'ID 斜褍褎械褉薪芯泄 褌邪斜谢懈褑褘', + cagenumber:'袘褍褎械褉 薪芯屑械褉邪', + gridnumber:'携褔械械泻 褋械褌泻谢邪', + enable:'袧邪褔邪谢芯', + disable:'袨褌泻谢褞褔', + remainingwidth:'袨褋褌邪褌芯褔薪邪褟 褕懈褉懈薪邪', + add:'袛芯斜邪胁谢褟', + sheetID:'袟邪泻邪谢泻邪 屑邪谢械薪褜泻懈泄 褋褌械泻谢褟薪薪褘泄 ID 褌邪斜谢懈褑褘 懈薪褎芯褉屑邪褑懈懈', + processcards:'袣邪褉褌芯褔泻邪 锌褉芯褑械褋褋邪', + processcardtype:'孝懈锌 褋褌械泻谢邪 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪', + acceptshorizontal:'校屑械褉械薪薪芯械 锌褉懈薪褟褌懈械 谐芯褉懈蟹芯薪褌邪谢懈', + xcoordinates:'X-泻芯芯褉写懈薪邪褌褘', + ycoordinates:'Y-泻芯芯褉写懈薪邪褌褘', + rotationangle:'校谐芯谢 胁褉邪褖械薪懈褟 (锌褉芯褌懈胁 褔邪褋芯胁芯泄 褋褌褉械谢泻懈)', + state:'小芯褋褌芯褟薪懈械', + takeout:'袙蟹褟褌褜', + deletemessage:'校写邪谢懈褌褜 褝褌褍 懈薪褎芯褉屑邪褑懈褞 懈谢懈 薪械褌?', + prompt:'袩芯写褋泻邪蟹泻', + yes:'袛邪', + accept:'袩褉懈薪褟褌褜', + noaccept:'袧械 锌褉懈薪懈屑邪褌褜', + filmcomplete:'小褌械泻谢芯 谐芯褌芯胁芯', + waiting:'袞写械屑.', + }, + workOrder:{ + glassID:'小褌械泻谢褟薪薪褘泄 ID', + height:'袙褘褋芯褌邪', + width:'楔懈褉懈薪邪', + thickness:'孝芯谢褖懈薪邪', + coatingtypes:'孝懈锌褘 锌芯泻褉褘褌懈泄', + productionsequence:'袩芯褋谢械写芯胁邪褌械谢褜薪芯褋褌褜 锌褉芯懈蟹胁芯写褋褌胁邪', + cardnumber:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪', + operate:'袨锌械褉邪褑懈褟', + messagedamaged:'袩芯胁褉械卸写械薪芯 谢懈 褋芯芯斜褖械薪懈械锛�', + prompt:'袩芯写褋泻邪蟹泻', + yes:'袛邪', + cancel:'袨褌屑械薪邪', + takemessage:'小谢械写褍械褌 谢懈 褍写邪谢褟褌褜 褋芯芯斜褖械薪懈械锛�', + breakage:'袩芯胁褉械卸写械薪懈械', + takeout:'袙蟹褟褌褜', + }, + processCard:{ + intofurnace:'袙 锌械褔褜', + beforefurnace:'袛芯 锌械褔泻懈.', + outfurnace:'袨泻芯薪褔械薪芯 褋褌械泻谢芯 懈蟹 锌械褔懈 写谢褟 蟹邪泻邪谢泻懈', + }, + reportWork:{ + lowerbit:'小褌邪薪褑懈褟 褉邪蟹谐褉褍蟹泻懈', + shelfnumber:'袧芯屑械褉 褋褌芯泄泻懈 褉械谐懈褋褌褉邪褑懈懈', + cardnumber:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪', + totalquantity:'袨斜褖械械 泻芯谢懈褔械褋褌胁芯', + beendropped:'袣芯谢懈褔械褋褌胁芯 褋褌械泻谢邪 褉邪蟹谐褉褍蟹泻懈', + state:'小芯褋褌芯褟薪懈械', + devicenumber:'袧芯屑械褉 芯斜芯褉褍写芯胁邪薪懈褟.', + startstatus:'小褌邪褌褍褋 薪邪褔邪谢邪 芯锌械褉邪褑懈懈', + enable:'袧邪褔邪谢芯', + unenable:'袧械 薪邪褔邪褌', + operate:'袨锌械褉邪褑懈褟', + bindingshelves:'袧邪蟹薪邪褔械薪薪邪褟 褋褌械谢谢邪卸泻邪', + clear:'效懈褋褌芯.', + workstation:'小褌邪薪褑懈褟 薪芯屑械褉', + shelfnumber:'袧芯屑械褉 褋褌芯泄泻懈 褉械谐懈褋褌褉邪褑懈懈锛�', + cardnumbera:'袧芯屑械褉 泻邪褉褌芯褔泻懈 锌褉芯褑械褋褋邪锛�', + incardnumber:'袩芯卸邪谢褍泄褋褌邪, 胁褘斜械褉懈褌械 薪芯屑械褉 锌褉芯谐褉邪屑屑褘', + clearglass:'袨褔懈褋褌懈褌褜 褋褌械泻谢芯 褋 锌芯谢泻懈', + sure:'锌芯写褌胁械褉写', + cancel:'袨褌屑械薪邪', + glassinformation:'袠薪褎芯褉屑邪褑懈褟 褋褌械泻谢邪', + glassID:'小褌械泻谢褟薪薪褘泄 ID', + coatingtypes:'孝懈锌褘 锌芯泻褉褘褌懈泄', + thickness:'孝芯谢褖懈薪邪', + width:'楔懈褉懈薪邪', + height:'袙褘褋芯褌邪', + }, + productStock:{ + addusers:'袛芯斜邪胁褜褌械 锌芯谢褜蟹芯胁邪褌械谢械泄.', + username:'袠屑褟 锌芯谢褜蟹芯胁邪褌械谢褟.', + usernamea:'袠屑褟 锌芯谢褜蟹芯胁邪褌械谢褟.锛�', + inusername:'袙胁械写懈褌械 懈屑褟 锌芯谢褜蟹芯胁邪褌械谢褟', + role:'袪芯谢褜', + rolea:'袪芯谢褜锛�', + inrole:'袙褘斜械褉懈褌械 褉芯谢褜', + test:'孝械褋褌', + admin:'袗写屑懈薪懈褋褌褉邪褌芯褉.', + operate:'袨锌械褉邪褑懈褟', + resetpassword:'小斜褉芯褋懈褌褜 锌邪褉芯谢褜', + exit:'袪械写邪泻褌芯褉', + delete:'校写邪谢', + prompt:'袩芯写褋泻邪蟹泻', + repassword:'袩械褉械蟹邪谐褉褍蟹泻邪 锌芯谢褜蟹芯胁邪褌械谢褜褋泻芯谐芯 锌邪褉芯谢褟 懈谢懈 薪械褌锛�', + yes:'袛邪', + cancel:'袨褌屑械薪邪', + reusername:'袠蟹屑械薪械薪懈械 锌芯谢褜蟹芯胁邪褌械谢褟', + addusername:'袛芯斜邪胁褜褌械 锌芯谢褜蟹芯胁邪褌械谢械泄.', + password:'袣芯写锛�', + sure:'锌芯写褌胁械褉写', + inpassword:'袙胁械写懈褌械 锌邪褉芯谢褜.', + deusername:'校写邪谢械薪懈械 锌芯谢褜蟹芯胁邪褌械谢褟 懈谢懈 薪械褌锛�', + }, + customer:{ + addmenu:'袛芯斜邪胁褜褌械 屑械薪褞.', + firstmenu:'孝邪斜谢懈褑邪 屑械薪褞 锌械褉胁芯泄 褋褌械锌械薪懈', + link:'小褋褘谢泻', + linka:'小褋褘谢泻锛�', + inlink:'袙胁械写懈褌械 褋褋褘谢泻褍', + sort:'小芯褉褌懈褉芯胁泻', + sorta:'小芯褉褌懈褉芯胁泻锛�', + insort:'袙胁械写懈褌械 褋芯褉褌懈褉芯胁泻褍', + operate:'袨锌械褉邪褑懈褟', + exit:'袪械写邪泻褌芯褉', + inmenu:'袙胁械写懈褌械 屑械薪褞', + delete:'校写邪谢', + semenu:'孝邪斜谢懈褑邪 屑械薪褞 胁褌芯褉芯泄 褋褌械锌械薪懈', + menu:'袦械薪褞.锛�', + sure:'锌芯写褌胁械褉写', + cancel:'袨褌屑械薪邪', + exmene:'袠蟹屑械薪械薪懈械 屑械薪褞.', + yes:'袛邪', + demenu:'校写邪谢懈褌褜 屑械薪褞 懈谢懈 薪械褌锛�', + prompt:'袩芯写褋泻邪蟹泻', + }, + delivery:{ + addrole:'袛芯斜邪胁褜褌械 褉芯谢懈.', + editrole:'袠蟹屑械薪械薪懈械 褉芯谢懈.', + role :'袪芯谢褜', + rolea :'袪芯谢褜锛�', + inrole :'袙胁械写懈褌械 褉芯谢懈.', + operate :'袨锌械褉邪褑懈褟', + edit :'袪械写邪泻褌芯褉', + delete :'校写邪谢', + sure :'锌芯写褌胁械褉写', + cancel :'袨褌屑械薪邪', + yes:'袛邪', + derole :'校写邪谢懈褌褜 锌械褉褋芯薪邪卸 懈谢懈 薪械褌锛�', + prompt:'袩芯写褋泻邪蟹泻', + }, + } \ No newline at end of file diff --git a/UI-Project/src/lang/i18n.js b/UI-Project/src/lang/i18n.js deleted file mode 100644 index 080bd7c..0000000 --- a/UI-Project/src/lang/i18n.js +++ /dev/null @@ -1,15 +0,0 @@ -// i18n.js - -import { createI18n } from 'vue-i18n' -import zhCn from './lang/locales/zh-CN.json' -import enUs from './lang/locales/en-US.json' - -const i18n = createI18n({ - locale: 'zh-CN', // 璁剧疆榛樿璇█ - messages: { - 'zh-CN': zhCn, - 'en-US': enUs - } -}) - -export default i18n \ No newline at end of file diff --git a/UI-Project/src/lang/index.js b/UI-Project/src/lang/index.js new file mode 100644 index 0000000..2a371f6 --- /dev/null +++ b/UI-Project/src/lang/index.js @@ -0,0 +1,18 @@ + +import { createI18n} from 'vue-i18n' +import zh from "./zh" +import en from "./en" + +let messages = { + zh:zh, + en: en +} + +const i18n = createI18n({ + locale: localStorage.getItem('lang') || 'zh', // 璁剧疆褰撳墠璇█绫诲瀷 + legacy: false, // 濡傛灉瑕佹敮鎸乧ompositionAPI锛屾椤瑰繀椤昏缃负false; + globalInjection: true, // 鍏ㄥ眬娉ㄥ唽$t鏂规硶 + messages +}) + +export default i18n \ No newline at end of file diff --git a/UI-Project/src/lang/locales/en-US.json b/UI-Project/src/lang/locales/en-US.json deleted file mode 100644 index dfae361..0000000 --- a/UI-Project/src/lang/locales/en-US.json +++ /dev/null @@ -1,575 +0,0 @@ -{ - "Clear":"Clear", - "ip":"192.168.10.21", - "systemTitle": "Login System", - "usernamePlaceholder": "Please enter username", - "passwordPlaceholder": "Please enter password", - "loginButton": "Login", - "registerButton": "Register", - "resetButton": "Reset", - "usernameRequired": "Please enter username", - "usernameLength": "Username must be between 5 and 15 characters", - "passwordRequired": "Please enter password", - "passwordLength": "Password must be between 5 and 15 characters", - "loginSuccess": "Login successful", - "langBtnCN": "Chinese", - "langBtnEN": "English", - "langHome": "Home", - "langUserManagement": "User Management", - "langUserList": "User List", - "langUsernamePlaceholder": "Please enter username", - "langEmailPlaceholder": "Please enter email", - "langSearch": "Search", - "langAddUser": "Add User", - "langUsername": "Username", - "langEmail": "Email", - "langCreateTime": "Create Time", - "langDisabled": "Disabled", - "langAction": "Action", - "langEdit": "Edit", - "langDelete": "Delete", - "langAddUserTitle": "Add User", - "langPassword": "Password", - "langState": "State", - "langSelect": "Please select", - "langCancel": "Cancel", - "langConfirm": "Confirm", - "langEditUserTitle": "Edit User", - "northglassMESsystem": "NorthGlassMesSystem", - "exit": "exit", - "changePassword": "changePassword", - "resetPassword": "resetPassword", - "Old password":"Old password", - "New password":"New password", - "Confirm password":"Confirm password", - "home": "Home", - "role": "role", - "langRoleManagement": "Role Management", - "langRoleList": "Role List", - "langEnterRoleName": "Please enter role name", - "langAddRole": "Add Role", - "langName": "Name", - "langIsValid": "Is Valid", - "langOperation": "Operation", - "langPleaseSelect": "Please select", - "langValid": "Valid", - "langInvalid": "Invalid", - "langAddRoleSuccess": "Add role successfully", - "langEnterName": "Please enter name", - "langLengthBetween": "Length should be between", - "langAnd": "and", - "langCharacters": "characters", - "langEnterState": "Please enter state", - "langUpdateState": "Update state successfully", - "langEditRole": "Edit Role", - "langEditRoleSuccess": "Edit role successfully", - "langDeleteRoleConfirm": "Are you sure you want to delete this role?", - "langPrompt": "Prompt", - "langDeleteRoleSuccess": "Delete role successfully", - "langCancelDelete": "Cancelled deleting", - "langRoleName": "langRoleName", - "updateSuccessMessage": "updateSuccessMessage", - "paginationTotal": "Total {total}", - "paginationSizes": "Items per page", - "paginationPrev": "Previous", - "paginationPager": "{currentPage}/{pageCount}", - "paginationNext": "Next", - "paginationJumper": "Jump to", - "breadcrumb": { - "home": "Home", - "permissionManagement": "Permission Management", - "permissionList": "Permission List" - }, - "search": { - "placeholder": "Enter keywords" - }, - "button": { - "addPermission": "Add Permission", - "cancel": "Cancel", - "confirm": "Confirm" - }, - "table": { - "role": "Role", - "permissionDescription": "Permission Description", - "permissionValue": "Permission Value", - "createTime": "Create Time", - "isActive": "Is Active", - "operation": "Operation" - }, - "tooltip": { - "edit": "Edit", - "delete": "Delete" - }, - "dialog": { - "addPermission": "Add Permission", - "editPermission": "Edit Permission" - }, - "form": { - "role": "Role", - "select": "Please Select", - "permission": "Permission", - "isActive": "Is Active" - }, - "鎿嶄綔": "Operation", - "鏈夋晥": "Valid", - "鏃犳晥": "Invalid", - "璇疯緭鍏ュ悕绉�": "Please enter a name", - "璇疯緭鍏ヨ鑹�": "Please enter a role", - "璇疯緭鍏ユ潈闄愭弿杩�":"Please enter a permission description", - "闀垮害鍦� 2 鍒� 15 涓瓧绗�": "Length between 2 and 15 characters", - "璇疯緭鍏ョ姸鎬�": "Please enter the status", - "娣诲姞瑙掕壊": "Add Role", - "淇敼瑙掕壊": "Edit Role", - "鍒犻櫎瑙掕壊": "Delete Role", - "姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ヨ鑹�, 鏄惁缁х画?": "This operation will permanently delete the role. Continue?", - "鎻愮ず": "Reminder", - "纭畾": "Confirm", - "鍙栨秷": "Cancel", - "娣诲姞瑙掕壊鎴愬姛": "Successfully added role", - "鏇存柊鐘舵�佹垚鍔�": "Successfully updated status", - "淇敼瑙掕壊鎴愬姛": "Successfully modified role", - "鍒犻櫎瑙掕壊鎴愬姛": "Successfully deleted role", - "translation": { - "D01 VFD error": "D01 VFD error", - "D02 VFD error": "D02 VFD error", - "D03 VFD error": "D03 VFD erro", - "D04 VFD error": "D04 VFD error", - "D05 VFD error": "D05 VFD error", - "D06 VFD error": "D06 VFD error", - "B01 VFD error": "B01 VFD error", - "B02 VFD error": "B02 VFD error", - "A01 VFD error": "A01 VFD error", - "A02 VFD error": "A02 VFD error", - "A01 servo turn error": "A01 servo turn error", - "A02 servo turn error": "A02 servo turn error", - "A01 servo travel error": "A01 servo travel error", - "A02 servo travel error": "A02 servo travel error", - "B01 servo travel error": "B01 servo travel error", - "B02 servo travel error": "B02 servo travel error", - "D01 DEC error": "D01 DEC error", - "D01 pos error": "D01 pos error", - "D02 DEC error": "D02 DEC error", - "D02 pos error": "D02 pos error", - "D03 DEC error": "D03 DEC error", - "D03 pos error": "D03 pos error", - "D04 DEC error": "D04 DEC error", - "D04 pos error": "D04 pos error", - "D05 DEC error": "D05 DEC error", - "D05 pos error": "D05 pos error", - "D06 DEC error": "D06 DEC error", - "D06 pos error": "D06 pos error", - "A01 DEC error": "A01 DEC error", - "A01 pos error": "A01 pos error", - "A02 DEC error": "A02 DEC error", - "A02 pos error": "A02 pos error", - "B01 IN DEC error": "B01 IN DEC error", - "B01 IN pos error": "B01 IN pos error", - "B01 OUT DEC error": "B01 OUT DEC error", - "B01 OUT pos error": "B01 OUT pos error", - "B02 IN DEC error": "B02 IN DEC error", - "B02 IN pos error": "B02 IN pos error", - "B02 OUT DEC error": "B02 OUT DEC error", - "B02 OUT pos error": "B02 OUT pos error" - }, - "Electrical": "Electrical", - "Parameter": "Parameter", - "Action": "Action", - "Sign": "Sign", - "State": "State", - "Alarm": "Alarm", - "Distribute": "Distribute", - "Search": "Search", - "dvstate": { - "鑷姩": "automatic", - "鎵嬪姩": "manual" - }, - "langUsernameLabel": "Username", - "langPasswordLabel": "Password", - "langPasswordPlaceholder": "Please enter your password", - "langConfirmPasswordLabel": "Confirm Password", - "langConfirmPasswordPlaceholder": "Please confirm your password", - "langEmailLabel": "Email", - "langQQLabel": "QQ", - "langQQPlaceholder": "Please enter your QQ number", - "langPhoneNumberLabel": "Phone Number", - "langPhoneNumberPlaceholder": "Please enter your phone number", - "langUsernameRequiredMessage": "Please enter your username", - "langUsernameLengthMessage": "Username length should be between 5 and 15 characters", - "langPasswordRequiredMessage": "Please enter your password", - "langPasswordLengthMessage": "Password length should be between 5 and 15 characters", - "langEmailRequiredMessage": "Please enter your email", - "langEmailFormatMessage": "Invalid email format", - "langRegisterButton": "Register", - "langResetButton": "Reset", - "langCancelButton": "Cancel", - "langRegisterSuccessMessage": "Registration successful", - "today": "today", - "yesterday": "yesterday", - "week": "week", - "shijian": "date", - "Pick a day": "Pick a day", - "alarmid": "id", - "alacontent": "content", - "time-on": "time-on", - "End-Time": "End-Time", - "langRegisterSuccessMessage": "Registration successful", - - "娣诲姞鐢ㄦ埛鎴愬姛":"Successfully add user ", - "confirmResetPassword": "Are you sure you want to reset the password to the default value?", - "confirm": "Confirm", - "cancel": "Cancel", - "passwordResetSuccess": "Password has been reset to the default value", - "confirmDeleteCategory": "This operation will permanently delete the category. Do you want to continue?", - "prompt": "Prompt", - "userDeleteSuccess": "User deleted successfully", - "deleteCanceled": "Deletion canceled", - "addUserSuccess": "User added successfully", - "editUserSuccess": "User edited successfully", - "addSuccessMessage": "Added successfully", -"deleteConfirmMessage": "Are you sure you want to delete this permission?", - -"confirmButtonText": "Confirm", -"cancelButtonText": "Cancel", -"deleteSuccessMessage": "Deleted successfully", -"deleteCancelledMessage": "Deletion cancelled", - - - "Enter the glass barcode":"Enter the glass barcode", - "Manually Infeed Glass":"Manually Infeed Glass", - "Enter the order number":"Enter the order number", - "Exit the glass by order number":"Exit the glass by order number", - "Please confirm the glass information":"Please confirm the glass information", - "Please confirm the Ordering Information":"Please confirm the Ordering Information", - "Alarm Information":"Alarm Information", - "Cage Details":"Cage Details", - "order":"order", - "Length":"Length", - "Width":"Width", - "Operate":"Operate", - "Terminate Task":"Terminate Task", - "cancel":"cancel", - "confirm":"confirm", - "Number":"Number", - "Outfeed glass barcode":"Outfeed glass barcode", - "Infeed glass barcode":"Infeed glass barcode", - "Cage No":"Cage No", - "Slot No":"Slot No", - "Dim":"Dim", - "id":"id", - "content":"content", - "timeon":"timeon", - "endTime":"endTime", - - "The Side":"The Side", - "Barcode":"Barcode", - "Order No":"Order No", - "List No":"List No", - "Box No":"Box No", - "Delete":"Delete", - "Out":"Out", - - "Operation successful":"Operation successful", - "Operation canceled":"Operation canceled", - "There is no glass for this order":"There is no glass for this order", - "There are currently tasks":"There are currently tasks", - "There is no such glass":"There is no such glass", - "There is no such grid":"There is no such grid", - "No delete allowed":"No delete allowed", - "No out allowed":"No out allowed", - "Are you sure to perform this operation ?":"Are you sure to perform this operation ?", - "Yes":"Yes", - - - "No":"No", - "Please enter the password":"Please enter the password", - "Password error":"Password error", - "DataBase Connection failed":"DataBase Connection failed", - "Distribute parameters":"Distribute parameters", - "The glass size is not within the range":"The glass size is not within the range", - "Add":"Add", - "Enable":"Enable", - "Disable":"Disable", - "Usage":"Usage", - "Space (Pieces)":"Space (Pieces)", - "This glass is already in the cage":"This glass is already in the cage", - "Enter the Order No":"Enter the Order No", - "OrderInfo":"OrderInfo", - "Query":"Query", - "permission update":"permission update", - "query was successful":"query was successful", - "Scan Code Point":"Scan Code Point", - "Upper film position":"Upper film position", - "Glass Information":"Glass Information", - "current Information":"current information", - "Modify Information":"Modify information", - "Clear Current":"Clear Current", - "Confirm":"Confirm", - "The glass ID already exists in the loading queue":"The glass ID already exists in the loading queue", - "This glass ID already exists in the sorting cage":"This glass ID already exists in the sorting cage", - "Outing Queue":"Outing Queue", - "Enter the Frame No":"Enter the Frame No", - "Frame No":"Frame No", - "Glass information corresponding to aluminum frame":"Glass information corresponding to aluminum frame", - "In the cage":"In the cage", - "Flipped":"Flipped", - "In the queue":"In the queue", - "Normal":"Normal", - "Entering":"Entering", - "Outing":"Outing", - "Suspend":"Suspend", - "Stop":"Stop", - "Start":"Start", - "Sequence":"Sequence", - "Position":"Position", - "Top":"Top", - "Up":"Up", - "Down":"Down", - "Unable to find the placement method of the aluminum frame":"Unable to find the placement method of the aluminum frame", - "Unable to find whether the aluminum frame is flipped or not":"Unable to find whether the aluminum frame is flipped or not", - "You do not have this permission":"You do not have this permission", - "This glass is already in the Queue":"This glass is already in the Queue", - "Complete":"Complete", - "Allow":"Allow", - "Not Allow":"Not Allow", - "Completed":"Completed", - "Waiting":"Waiting", - "Deleted":"Deleted", - "Glass State":"Glass State", - "Absent":"Absent", - "Approximately resettable time":"Approximately resettable time", - "EXTERIQR OUT AND BYPASS TO THE LEFT":"EXTERIQR OUT AND BYPASS TO THE LEFT", - "EXTERIQR OUT AND BYPASS TO THE RIGHT":"EXTERIQR OUT AND BYPASS TO THE RIGHT", - "Complete Task":"Complete Task", - "Outed":"Outed", - "Queue State":"Queue State", - "Sorting State":"Sorting State", - "Confirm State":"Confirm State", - "Next":"Next", - "Current Frame":"Current Frame", - "Outside":"Outside", - "Inside":"Inside", - "Cancel":"Cancel", - "Are you sure to clear this barcode ?":"Are you sure to clear this barcode ?", - "Terminate Feeding":"Terminate Feeding", - "Terminate Outing":"Terminate Outing", - "SoftEmergencyStop":"SoftEmergencyStop", - "Unable to clear glass ID in automatic mode":"Unable to clear glass ID in automatic mode", - "Are you sure you want an emergency stop ?":"Are you sure you want an emergency stop ?", - "Current State":"Current State", - "Automatic":"Automatic", - "Hand Movement":"Hand Movement", - "Please enter the correct glassID":"Please enter the correct glassID", - "Switch":"Switch", - "This frame has glass that is currently outing":"This frame has glass that is currently outing", - "ServoManualone": { - "A01 鎵�鍦ㄦ牸瀛�": "A01 Current Grid", - "鏁伴噺": "Quantity", - "杩涚墖ID": "IncomingId", - "闀垮害": "Length", - "楂樺害": "Height", - "鍙栫墖鏍煎瓙": "Pickupgrid address", - "瀛樼墖鏍煎瓙": "Storagegrid address", - "A01缈昏浆瀹炴椂浣嶇疆": "A01FlipPosition", - "A02缈昏浆瀹炴椂浣嶇疆": "A02FlipPosition", - "鏁呴殰": "Fault", - "澶嶄綅": "Reset", - "鏈洖闆�": "NotZero", - "鍥為浂": "Home", - "鐩爣鏍煎瓙": "Target Grid", - "A02 鎵�鍦ㄦ牸瀛�": "A02 Current Grid", - "鍙栫墖ID": "PickupId", - "A01鍗婅嚜鍔�": "A01 Semi-Auto", - "A01鍗婅嚜鍔ㄥ惎鍔�": "A01 Semi-Auto Start", - "A02鍗婅嚜鍔�": "A02 Semi-Auto", - "A02鍗婅嚜鍔ㄥ惎鍔�": "A02 Semi-Auto Start", - "B01 鎵�鍦ㄦ牸瀛�": "B01 Current Grid", - "B02 鎵�鍦ㄦ牸瀛�": "B02 Current Grid" - - }, - "langParameter1": { - - - }, - - "langParameter2": { - "D01鎵嬪姩鐘舵��": "D01 Manual Status", - "娓呴櫎ID": "Clear ID", - "ID": "ID", - "A02ID": "A02ID", - "B01ID": "B01ID", - "B02ID": "B02ID", - "D02鎵嬪姩鐘舵��": "D02 Manual Status", - "D03鎵嬪姩鐘舵��": "D03 Manual Status", - "D04鎵嬪姩鐘舵��": "D04 Manual Status", - "D05鎵嬪姩鐘舵��": "D05 Manual Status", - "D06鎵嬪姩鐘舵��": "D06 Manual Status", - "A01鎵嬪姩鐘舵��": "A01 Manual Status", - "ID1": "ID1", - "ID2": "ID2", - "A02鎵嬪姩鐘舵��": "A02 Manual Status", - "B01鎵嬪姩鐘舵��": "B01 Manual Status", - "B02鎵嬪姩鐘舵��": "B02 Manual Status", - "鎵弿鏋壂鐮佺殑ID": "Scanned ID", - "A01褰撳墠鏍煎瓙": "A01 Current Grid", - "A02鎵�鍦ㄦ牸瀛�": "A02 Current Grid", - "B01鎵�鍦ㄦ牸瀛�": "B01 Current Grid", - "B02鎵�鍦ㄦ牸瀛�": "B02 Current Grid", - "鎬ュ仠鍚庝腑姝�/缁х画閫夋嫨": "Abort/ResumeTasks", - "A01缁堟/缁х画": "A01Abort/ResumeTasks", - "A02缁堟/缁х画": "A02Abort/ResumeTasks", - "瀛樼墖绛夊緟寤舵椂": "Storage wait delay", - "杞�ュ仠": "emgHMI" - - }, - "langPositioning1": { - "鏍煎瓙闂磋窛": "GridSpacing", - "瀛樼墖鎺ョ墖鍦板潃": "StorageReceivingAddress", - "鍑虹墖鎺ョ墖鍦板潃": "OutgoingReceivingAddress", - "瀛樼墖鏍间綅缃瀹�": "StorageGridPositionSetting", - "1#鏍煎湴鍧�": "grid address1# ", - "22#鏍煎湴鍧�": "grid address22#", - "43#鏍煎湴鍧�": "grid address43#", - "64#鏍煎湴鍧�": "grid address64#", - "85#鏍煎湴鍧�": "grid address85#", - "106#鏍煎湴鍧�": "grid address106#", - "127#鏍煎湴鍧�": "grid address127#", - "148#鏍煎湴鍧�": "grid address148#", - "169#鏍煎湴鍧�": "grid address169#", - "190#鏍煎湴鍧�": "grid address190#", - "鍑虹墖鏍间綅缃瀹�": "OutgoingGridPositionSetting", - "A01鎵�鍦ㄦ牸瀛�": "A01 grid address", - "鏁伴噺": "Quantity", - "杩涚墖ID": "IncomingId", - "闀垮害": "Length", - "楂樺害": "Height", - "鍙栫墖鏍煎瓙": "Pickupgrid address", - "缈昏浆瀹炴椂浣嶇疆": "FlipPosition", - "鏁呴殰": "Fault", - "澶嶄綅": "Reset", - "鏈洖闆�": "NotZero", - "鍥為浂": "Zero", - "鐩爣鏍煎瓙": "Target Grid", - "鏍煎瓙闂磋窛": "GridSpacing", - "瀛樼墖鎺ョ墖鍦板潃": "StorageReceivingAddress", - "鍑虹墖鎺ョ墖鍦板潃": "OutgoingReceivingAddress", - "瀛樼墖鏍间綅缃瀹�": "StorageGridPositionSetting", - "1#鏍煎湴鍧�": "grid address1# ", - "22#鏍煎湴鍧�": "grid address22#", - "43#鏍煎湴鍧�": "grid address43#", - "64#鏍煎湴鍧�": "grid address64#", - "85#鏍煎湴鍧�": "grid address85#", - "106#鏍煎湴鍧�": "grid address106#", - "127#鏍煎湴鍧�": "grid address127#", - "148#鏍煎湴鍧�": "grid address148#", - "169#鏍煎湴鍧�": "grid address169#", - "190#鏍煎湴鍧�": "grid address190#", - "鍑虹墖鏍间綅缃瀹�": "OutgoingGridPositionSetting", - "B01鏍间綅缃瀹�":"B01PositionSetting", - "B02浣嶇疆璁惧畾":"B02PositionSetting" - }, - "langPositioning2": { - - }, "ManualonePositionlang": { - "A01鎵嬪姩鏍煎瓙": "A01 Target grid(Manual)", - "A01瀹氫綅閫熷害": "A01 TRAVEL POS Velocity manual", - "A01褰撳墠鏍煎瓙": "A01 Current Grid", - "A01鍚姩": "A01 Start", - "鏁呴殰": "Fault", - "澶嶄綅": "Reset", - "A02鎵嬪姩鏍煎瓙": "A02 Target grid(Manual)", - "A02瀹氫綅閫熷害": "A02 TRAVEL POS Velocity manual", - "A02褰撳墠鏍煎瓙": "A02 Current Grid", - "A02鍚姩": "A02 Start", - "澶嶄綅": "Reset", - "B01鎵嬪姩鏍煎瓙": "B01 Target grid(Manual)", - "B01瀹氫綅閫熷害": "B01 TRAVEL POS Velocity manual", - "B01褰撳墠鏍煎瓙": "B01 Current Grid", - "B01鍚姩": "B01 Start", - "澶嶄綅": "Reset", - "鍥為浂": "Home", - "鏈洖闆�": "NotZero", - "B02鎵嬪姩鏍煎瓙": "B02 Target grid(Manual)", - "B02瀹氫綅閫熷害": "B02 TRAVEL POS Velocity manual", - "B02褰撳墠鏍煎瓙": "B02 Current Grid", - "B02鍚姩": "B02 Start", - "澶嶄綅": "Reset", - "A01瀹炴椂浣嶇疆": "A01 tavel Actual Position", - "A02瀹炴椂浣嶇疆": "A02 tavel Actual Position", - "B01瀹炴椂浣嶇疆": "B02 tavel Actual Position", - "B02瀹炴椂浣嶇疆": "B02 tavel Actual Position" - }, - "Manualoneposition2lang": { - "A01鎵嬪姩浣嶇疆": "A01 turn Target Angle(Manual)", - "A01瀹氫綅閫熷害": "A01 TURN POS Velocity manual", - "A01缈昏浆瀹炴椂浣嶇疆": "A01 turn Actual angle", - "A01缈昏浆鍚姩": "A01 SERVE TURN", - "鏁呴殰": "Fault", - "澶嶄綅": "Reset", - "鏈洖闆�": "NotZero", - "鍥為浂": "Home", - "A02鎵嬪姩浣嶇疆": "A02 turn Target Angle(Manual)", - "A02瀹氫綅閫熷害": "A02 TURN POS Velocity manual", - "A02缈昏浆瀹炴椂浣嶇疆": "A02 turn Actual angle", - "A02缈昏浆鍚姩": "A02 SERVE TURN", - "A02澶嶄綅": "Reset" - - - }, - "AutomaticParameterSettinglang": { - "A01琛岃蛋楂橀�熻搴�": "A01 turn Angle1", - "A01琛岃蛋浣庨�熻搴�": "A01 turn Angle2", - "A01杈撻�佹帴鐗囪搴�": "A01 turn Angle3", - "A01绗煎瓙瑙掑害": "A01 turn Angle4", - "A02琛岃蛋楂橀�熻搴�": "A02 turn Angle1", - "A02琛岃蛋浣庨�熻搴�": "A02 turn Angle2", - "A02杈撻�佹帴鐗囪搴�": "A02 turn Angle3", - "A02绗煎瓙瑙掑害": "A02 turn Angle4", - "澶ц溅鑷姩閫熷害": "A01 A02 TRAVEL POS Velocity AUTO", - "灏忚溅鑷姩閫熷害": "B01 B02 TRAVEL POS Velocity AUTO", - "鑷姩缈昏浆閫熷害": "A01 A02 TURN POS Velocity AUTO", - "A01~A02杈撻��": "A01~A02 Conveying", - "B01~B02杈撻��": "B01~B02 Conveying", - "D01~D06杈撻��": "D01~D06 Conveying", - "缈昏浆鐐瑰姩閫熷害": "Flip Jog Speed", - "灏忚溅鐐瑰姩閫熷害": "Cart Jog Speed", - "鏈�楂橀�熷害": "Max Speed", - "楂橀�熺嚎閫熷害": "High-Speed Line Speed", - "浣庨�熺嚎閫熷害": "Low-Speed Line Speed", - "鎵嬪姩閫熷害": "Manual Speed" - }, - "ManualJoglang": { - "D01杈撻��": "D01 VFD conveyor", - "D02杈撻��": "D02 VFD conveyor", - "D03杈撻��": "D03 VFD conveyor", - "D04杈撻��": "D04 VFD conveyor", - "D05杈撻��": "D05 VFD conveyor", - "D06杈撻��": "D06 VFD conveyor", - "A01杈撻�佹鍚�": "A01 VFD conveyor", - "A02杈撻�佹鍚�": "A02 VFD conveyor", - "B01杈撻��": "B01 VFD conveyor", - "B02杈撻��": "B02 VFD conveyor", - "A01缈昏浆": "A01 SERVE TURN", - "A02缈昏浆": "A02 SERVE TURN", - "A01琛岃蛋鐐瑰姩": "A01 SERVE TRAVEL", - "A02琛岃蛋鐐瑰姩": "A02 SERVE TRAVEL", - "B01琛岃蛋鐐瑰姩": "B01 SERVE TRAVEL", - "B02琛岃蛋鐐瑰姩": "B02 SERVE TRAVEL", - "B02缈昏浆姘旂几": "B02 Solenoid TURN", - "B02鍗囬檷姘旂几": "B02 Solenoid UP DOWN", - "B02鍚规皵": "B02 Solenoid Gassing", - "B01缈昏浆姘旂几": "B01 Solenoid TURN", - "B01鍗囬檷姘旂几": "B01 Solenoid UP DOWN", - "B01鍚规皵": "B01 Solenoid Gassing", - "A01杈撻�佸弽鍚�": "A01 VFD conveyor reverse", - "A02杈撻�佸弽鍚�": "A02 VFD conveyor reverse", - "A01娉ㄧ數娉�": "A01 oil pump", - "A02娉ㄧ數娉�": "A02 oil pump", - "A01琛岃蛋浼烘湇鍥為浂":"A01 SERVE TRAVEL Home", - "A02琛岃蛋浼烘湇鍥為浂":"A02 SERVE TRAVEL Home" - }, - "A01琛岃蛋浼烘湇鍥為浂":"A01 SERVE TRAVEL Home", - "A02琛岃蛋浼烘湇鍥為浂":"A02 SERVE TRAVEL Home", - "Set":"Set" - - -} \ No newline at end of file diff --git a/UI-Project/src/lang/locales/zh-CN.json b/UI-Project/src/lang/locales/zh-CN.json deleted file mode 100644 index b06a25b..0000000 --- a/UI-Project/src/lang/locales/zh-CN.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "northglassMESsystem": "鍖楃幓MES绯荤粺", - "username": "璐﹀彿", - "password": "瀵嗙爜", - "usernamePlaceholder": "璇疯緭鍏ヨ处鍙�", - "passwordPlaceholder": "璇疯緭鍏ュ瘑鐮�", - "loginButton": "鐧诲綍", - "registerButton": "娉ㄥ唽", - "registerButton": "娉ㄥ唽鏂扮敤鎴�", - "username": "濮撳悕", - "usernameRequired": "璇疯緭鍏ュ鍚�", - "passwordRequired": "璇疯緭鍏ュ瘑鐮�", - "passwordRequired": "纭瀵嗙爜", - "passwordRequired": "璇风‘璁ゅ瘑鐮�", - "passwordRequired": "纭娉ㄥ唽", - "langCancel": "鍙栨秷", - "loginSuccess": "鐧诲綍鎴愬姛", - "langBtnCN": "涓枃", - "langBtnEN": "English", - "langHome": "娆㈣繋", - "langUserManagement": "浣跨敤鍖楃幓MES绯荤粺", - "langUserList": "閫�鍑�", - "langUsernamePlaceholder": "鎵撴爣鏈哄氨缁姸鎬�", - "langEmailPlaceholder": "鍒囧壊鏈哄氨缁姸鎬�", - "langSearch": "鎵嬪姩纭", - "langAddUser": "閫夋嫨宸ョ▼", - "langUsername": "寮�濮嬩笂鐗�", - "langEmail": "鏆傚仠", - "langCreateTime": "鍋滄浠诲姟", - "langDisabled": "宸ョ▼鍙�", - "langAction": "鍘熺墖瀹�", - "langEdit": "鍘熺墖闀�", - "langDelete": "鑶滅郴", - "langAddUserTitle": "鏁伴噺", - "langPassword": "鍘氬害", - "langState": "鐘舵��", - "langSelect": "瀹�", - "langEditUserTitle": "闀�", - "exit": "鎿嶄綔", - "changePassword": "宸ョ▼", - "Old password":"璇烽�夋嫨宸ョ▼", - "New password":"娣诲姞鍘熺墖", - "langConfirm": "纭", - "langUsernameLabel": "娣诲姞", - "langPasswordLabel": "鍒犻櫎", - "langPasswordLabel": "鏄惁鍒犻櫎璇ユ潯淇℃伅锛�", - "langPasswordLabel": "鏄惁寮�濮嬩笂鐗囷紵", - "langPasswordLabel": "鏄惁鏆傚仠锛�", - "langPasswordLabel": "鏄惁鍋滄浠诲姟锛�", - "langPasswordLabel": "鏍呮牸鍙�", - "langPasswordLabel": "鐜荤拑缂栧彿", - "langPasswordLabel": "楂�", - "langPasswordLabel": "鍚敤鐘舵��", - "langPasswordLabel": "鍚敤", - "langPasswordLabel": "鏈惎鐢�", - "langPasswordLabel": "鎶ョ己", - "langPasswordLabel": "杩涚倝涓�", - "langPasswordLabel": "杩涚倝鍓�", - "langPasswordLabel": "宸插嚭鐐夌幓鐠�", - "langPasswordLabel": "鐗堝浘缂栧彿", - "langPasswordLabel": "涓嬬墖浣�", - "langPasswordLabel": "鏋跺彿", - "langPasswordLabel": "娴佺▼鍗″彿", - "langPasswordLabel": "鎬绘暟閲�", - "langPasswordLabel": "宸茶惤鏋舵暟閲�", - "langPasswordLabel": "鐘舵��", - "langPasswordLabel": "璁惧鍙�", - "langPasswordLabel": "鍚敤鐘舵��", - "langPasswordLabel": "缁戝畾鏋跺瓙", - "langPasswordLabel": "娓呯┖", - -} \ No newline at end of file diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js new file mode 100644 index 0000000..3aa72a1 --- /dev/null +++ b/UI-Project/src/lang/zh.js @@ -0,0 +1,354 @@ +export default { + "northglassMESsystem": "鍖楃幓MES绯荤粺", + login:{ + userErr:'璇疯緭鍏ヨ处鍙�', + pwErr:'璇疯緭鍏ュ瘑鐮�', + user:'璐﹀彿', + password:'瀵嗙爜', + login:'鐧诲綍', + loginSuccessful:'鐧诲綍鎴愬姛锛�', + register:'娉ㄥ唽', + namea:'濮撳悕涓嶈兘涓虹┖', + len:'闀垮害涓嶈兘瓒呰繃16', + passnull:'瀵嗙爜涓嶈兘涓虹┖', + leng:'瀵嗙爜闀垮害涓嶈兘浣庝簬6鎴栬秴杩�16', + spwn:'纭瀵嗙爜涓嶈兘涓虹┖', + depass:'涓ゆ瀵嗙爜涓嶇浉鍚�', + }, + register:{ + registerSuccessful:'娉ㄥ唽鎴愬姛', + newuserregister:'娉ㄥ唽鏂扮敤鎴�', + name:'濮撳悕锛�', + inputname:'璇疯緭鍏ュ鍚�', + password:'瀵嗙爜:', + pwErr:'璇疯緭鍏ュ瘑鐮�', + passwordation:'纭瀵嗙爜:', + pwErration:'璇风‘璁ゅ瘑鐮�', + registration:'纭娉ㄥ唽', + false:'鍙栨秷', + }, + main:{ + connectErr:'鏈嶅姟鍣ㄨ繛鎺ュ紓甯革紝璇风◢鍚庡啀璇�', + titleFirst:"娆㈣繋 ", + titleLast:' 浣跨敤鍖楃幓MES绯荤粺锛�', + quit:"閫�鍑�", + }, + basicData:{ + laserprinting:'鎵撴爣鏈哄氨缁姸鎬侊細', + cuttingmachine:'鍒囧壊鏈哄氨缁姸鎬侊細', + machine:'涓婄墖鏈鸿仈鏈虹姸鎬侊細', + machineaa:'涓婄墖鏈烘墜鍔ㄧ姸鎬侊細', + selectproject:"閫夋嫨宸ョ▼", + startloading:'寮�濮嬩笂鐗�', + stop:'鏆傚仠', + yes:'纭', + change:'鍒囨崲', + projectnumber:'宸ョ▼鍙�', + glasswidth:'鍘熺墖瀹�', + glassheight:'鍘熺墖楂�', + coatingtypes:'鑶滅郴', + coatingtypesa:'鑶滅郴锛�', + quantity:'鏁伴噺', + quantitya:'鏁伴噺锛�', + thickness:'鍘氬害', + thicknessa:'鍘氬害锛�', + startstatus:'鍚敤鐘舵��', + pass:'閫氳繃', + waiting:'绛夊緟涓�', + up:'涓婄墖涓�', + finish:'宸插畬鎴�', + project:'宸ョ▼', + plselectproject:'璇烽�夋嫨宸ョ▼', + confirm:'纭', + cancel:'鍙栨秷', + startfilm:'鏄惁寮�濮嬩笂鐗囷紵', + whetherpause:'鏄惁鏆傚仠锛�', + station:'宸ヤ綅', + width:'瀹�', + widtha:'瀹斤細', + height:'楂�', + heighta:'楂橈細', + operate:'鎿嶄綔', + add:'娣诲姞', + delete:'鍒犻櫎', + addglass:'娣诲姞鍘熺墖', + selectwidth:'璇烽�夋嫨瀹�', + selectheight:'璇烽�夋嫨楂�', + selectcoatingtypes:'璇烽�夋嫨鑶滅郴', + selectthickness:'璇烽�夋嫨鍘氬害', + selectquantity:'璇疯緭鍏ユ暟閲�', + pause:'绗簩琛屽拰绗洓琛岀殑楂樺繀椤诲ぇ浜�2700鎵嶈兘淇濆瓨锛�', + pausea:'璇风‘璁ゆ墦鏍囨満鍜屽垏鍓叉満鐨勫氨缁姸鎬侊紒', + infonull:'宸ョ▼鍙蜂笉鑳戒负绌猴紒', + updatanull:'璇ュ伐绋嬫湭淇濆瓨鍒颁笂鐗囪〃锛�', + glassnull:'鏇存柊鐜荤拑鐘舵�佹椂鍙戠敓閿欒', + deletemessage:'鏄惁鍒犻櫎璇ユ潯淇℃伅?', + }, + sorter:{ + gridnumber:'鏍呮牸鍙�', + glassnumber:'鐜荤拑缂栧彿', + width:'瀹�', + height:'楂�', + startstatus:'鍚敤鐘舵��', + disable:'绂佺敤', + start:'鍚敤', + deficiencieste:'鎶ョ己', + operate:'鎿嶄綔', + prompt:'鎻愮ず', + information:'鏄惁鎶ョ己璇ユ潯淇℃伅锛�', + yes:'鏄�', + cancel:'鍙栨秷', + }, + order:{ + dilapidation:'鐮存崯', + Takeaway:'浜哄伐鎷胯蛋', + }, + searchOrder:{ + cageinformation:'鐞嗙墖绗间俊鎭�', + productionqueue:'鍑虹墖闃熷垪', + outputglassID:'鍑虹墖鐜荤拑ID', + startposition:'璧峰浣嶇疆', + targetlocation:'鐩爣浣嶇疆', + trips:'杞︽', + number:'搴忓彿', + taskstatus:'浠诲姟鐘舵��', + filmenter:'绛夊緟杩涚墖', + infilm:'杩涜涓�', + endtask:'缁撴潫浠诲姟', + completetask:'瀹屾垚浠诲姟', + intoglassid:'杩涚墖鐜荤拑ID', + line:'绾胯矾', + Usage:'浣跨敤鐜�', + free:'绌洪棽锛堟牸瀛愭暟锛�', + addcage:'娣诲姞鐞嗙墖绗间俊鎭�', + glassIDa:'鐜荤拑ID锛�', + glassID:'鐜荤拑ID', + inglassID:'璇疯緭鍏ョ幓鐠僆D', + pieceingrid:'灏忕墖鍦ㄦ牸鍐呯殑椤哄簭', + pieceingrida:'灏忕墖鍦ㄦ牸鍐呯殑椤哄簭锛�', + inpieceingrid:'璇疯緭鍏ュ皬鐗囧湪鏍煎唴鐨勯『搴�', + cardnumber:'娴佺▼鍗″彿', + cardnumbera:'娴佺▼鍗″彿锛�', + incardnumber:'璇疯緭鍏ユ祦绋嬪崱鍙�', + typeglass:'鐜荤拑绫诲瀷', + typeglassa:'鐜荤拑绫诲瀷锛�', + intypeglass:'璇疯緭鍏ョ幓鐠冪被鍨�', + width:'瀹�', + widtha:'瀹斤細', + inwidth:'璇疯緭鍏ュ', + height:'楂�', + heighta:'楂橈細', + inheight:'璇疯緭鍏ラ珮', + coatingtypes:'鑶滅郴', + thickness:'鍘氬害', + thicknessa:'鍘氬害锛�', + inthickness:'璇疯緭鍏ュ帤搴�', + layoutID:'閽㈠寲鐗堝浘ID', + layoutIDa:'閽㈠寲鐗堝浘ID锛�', + inlayoutID:'璇疯緭鍏ラ挗鍖栫増鍥綢D', + picturesequence:'閽㈠寲鐗堝浘鐗囧簭', + picturesequencea:'閽㈠寲鐗堝浘鐗囧簭锛�', + inpicturesequence:'璇疯緭鍏ラ挗鍖栫増鍥剧墖搴�', + startstatus:'鍚敤鐘舵��', + startstatusa:'鍚敤鐘舵�侊細', + instartstatus:'璇疯緭鍏ュ惎鐢ㄧ姸鎬�', + glassgaps:'鐜荤拑闂撮殭', + glassgapsa:'鐜荤拑闂撮殭锛�', + inglassgaps:'璇疯緭鍏ョ幓鐠冮棿闅�', + sure:'纭', + cancel:'鍙栨秷', + glassID:'鐜荤拑ID', + operate:'鎿嶄綔', + breakage:'鐮存崯', + delete:'鍒犻櫎', + outfilm:'鍑虹墖', + cagetableID:'澶х悊鐗囩琛↖D', + cagenumber:'鐞嗙墖绗煎彿', + gridnumber:'鏍呮牸鍙�', + gridnumbera:'鏍呮牸鍙凤細', + grid:'璇疯緭鍏ユ爡鏍煎彿', + enable:'鍚敤', + disable:'绂佺敤', + remainingwidth:'鍓╀綑瀹藉害', + add:'娣诲姞', + sheetID:'閽㈠寲灏忕墖淇℃伅琛↖D', + processcards:'娴佺▼鍗�', + processcardtype:'娴佺▼鍗$幓鐠冪被鍨�', + acceptshorizontal:'閽㈠寲鏄惁鎺ュ彈妯斁', + xcoordinates:'x鍧愭爣', + ycoordinates:'y鍧愭爣', + rotationangle:'鏃嬭浆瑙掑害锛堥�嗘椂閽堬級', + state:'鐘舵��', + takeout:'鎷胯蛋', + deletemessage:'鏄惁鍒犻櫎璇ユ潯淇℃伅?', + prompt:'鎻愮ず', + yes:'鏄�', + accept:'鎺ュ彈', + noaccept:'涓嶆帴鍙�', + filmcomplete:'鍑虹墖瀹屾垚', + waiting:'绛夊緟涓�', + broke:'鏄惁鐮存崯璇ユ潯淇℃伅锛�', + brokeb:'鏄惁鎷胯蛋璇ユ潯淇℃伅锛�', + outfil:'鏄惁鍑虹墖璇ユ潯淇℃伅锛�', + inputid:'璇疯緭鍏ョ幓鐠僆D', + search:'鎼滅储', + tabid:'澶х悊鐗囩璇︽儏琛╥d', + tid:'璁惧id', + fin:'鏄惁瀹屾垚浠诲姟锛�', + }, + workOrder:{ + glassID:'鐜荤拑ID', + height:'楂�', + width:'瀹�', + thickness:'鍘氬害', + coatingtypes:'鑶滅郴', + productionsequence:'鍑虹墖椤哄簭', + cardnumber:'娴佺▼鍗″彿', + operate:'鎿嶄綔', + messagedamaged:'鏄惁鐮存崯璇ユ潯淇℃伅?', + prompt:'鎻愮ず', + yes:'鏄�', + cancel:'鍙栨秷', + takemessage:'鏄惁鎷胯蛋璇ユ潯淇℃伅锛�', + breakage:'鐮存崯', + takeout:'鎷胯蛋', + }, + processCard:{ + intofurnace:'杩涚倝涓�', + beforefurnace:'杩涚倝鍓�', + outfurnace:'宸插嚭鐐夌幓鐠�', + }, + reportWork:{ + lowerbit:'涓嬬墖浣�', + shelfnumber:'鏋跺彿', + cardnumber:'娴佺▼鍗″彿', + totalquantity:'鎬绘暟閲�', + beendropped:'宸茶惤鏋舵暟閲�', + state:'鐘舵��', + devicenumber:'璁惧鍙�', + startstatus:'鍚敤鐘舵��', + enable:'鍚敤', + unenable:'鏈惎鐢�', + operate:'鎿嶄綔', + bindingshelves:'缁戝畾鏋跺瓙', + clear:'娓呯┖', + workstation:'鍙峰伐浣�', + shelfnumbera:'鏋跺彿锛�', + cardnumbera:'娴佺▼鍗″彿锛�', + incardnumber:'璇烽�夋嫨娴佺▼鍗″彿', + clearglass:'娓呴櫎鏋跺瓙鐜荤拑', + sure:'纭', + cancel:'鍙栨秷', + glassinformation:'鐜荤拑淇℃伅', + glassID:'鐜荤拑ID', + coatingtypes:'鑶滅郴', + thickness:'鍘氬害', + width:'瀹藉害', + height:'楂樺害', + }, + + productStock:{ + addusers:'娣诲姞鐢ㄦ埛', + username:'鐢ㄦ埛鍚�', + usernamea:'鐢ㄦ埛鍚嶏細', + inusername:'璇疯緭鍏ョ敤鎴峰悕', + role:'瑙掕壊', + rolea:'瑙掕壊锛�', + inrole:'璇烽�夋嫨瑙掕壊', + test:'娴嬭瘯', + admin:'绠$悊鍛�', + operate:'鎿嶄綔', + resetpassword:'閲嶇疆瀵嗙爜', + exit:'缂栬緫', + delete:'鍒犻櫎', + prompt:'鎻愮ず', + repassword:'鏄惁閲嶇疆鐢ㄦ埛瀵嗙爜锛�', + yes:'鏄�', + cancel:'鍙栨秷', + reusername:'淇敼鐢ㄦ埛', + addusername:'娣诲姞鐢ㄦ埛', + password:'瀵嗙爜锛�', + sure:'纭', + inpassword:'璇疯緭鍏ュ瘑鐮�', + deusername:'鏄惁鍒犻櫎璇ョ敤鎴凤紵', + }, + customer:{ + addmenu:'娣诲姞鑿滃崟', + firstmenu:'涓�绾ц彍鍗曟爮', + link:'閾炬帴', + inlink:'璇疯緭鍏ラ摼鎺�', + linka:'閾炬帴锛�', + sort:'鎺掑簭', + insort:'璇疯緭鍏ユ帓搴�', + sorta:'鎺掑簭锛�', + operate:'鎿嶄綔', + exit:'缂栬緫', + delete:'鍒犻櫎', + semenu:'浜岀骇鑿滃崟鏍�', + menu:'鑿滃崟鏍忥細', + inmenu:'璇疯緭鍏ヨ彍鍗曟爮', + sure:'纭', + cancel:'鍙栨秷', + exmene:'淇敼鑿滃崟', + yes:'鏄�', + demenu:'鏄惁鍒犻櫎璇ヨ彍鍗曪紵', + prompt:'鎻愮ず', + }, + delivery:{ + addrole:'娣诲姞瑙掕壊', + editrole:'淇敼瑙掕壊', + role :'瑙掕壊', + rolea :'瑙掕壊锛�', + inrole :'璇疯緭鍏ヨ鑹�', + operate :'鎿嶄綔', + edit :'缂栬緫', + delete :'鍒犻櫎', + yes:'鏄�', + sure :'纭', + cancel :'鍙栨秷', + derole :'鏄惁鍒犻櫎璇ヨ鑹�', + prompt:'鎻愮ず', + }, + 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 :'杩斿簱鏃ユ湡', + }, +} \ No newline at end of file diff --git a/UI-Project/src/layout/MainErpView.vue b/UI-Project/src/layout/MainErpView.vue index 3bd4a05..85cd1aa 100644 --- a/UI-Project/src/layout/MainErpView.vue +++ b/UI-Project/src/layout/MainErpView.vue @@ -1,14 +1,17 @@ <script setup> -import {useRouter} from 'vue-router' import useUserInfoStore from '@/stores/userInfo' import userInfo from '@/stores/userInfo' import request from '@/utils/request' import {ElMessage} from 'element-plus' -import {ref, watch} from 'vue' +import {ref, watch, onMounted } from 'vue' import deepClone from '@/utils/deepClone' - +import { useRouter } from 'vue-router'; +import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') const store = userInfo() +// const { $i18n } = useI18n(); // 鑾峰彇 i18n 瀹炰緥 const router = useRouter() const userStore = useUserInfoStore() const user = userStore.user.userName @@ -19,27 +22,32 @@ // let userInfo = userInfoStr.user.token; let token = userInfo; // 鎻愬彇 token // 閫�鍑虹櫥褰曟柟娉� -const quit = async () => { - try { - const response = await request.get('/loadGlass/sys/user/logout', { - token: token, - user: null, - }) - if (response.code === 200) { - // 鐧诲嚭鎴愬姛锛屾竻闄ゆ湰鍦板瓨鍌ㄧ殑 userInfo - localStorage.removeItem('userInfo'); - // 鍙互鍦ㄨ繖閲岄噸缃簲鐢ㄧ姸鎬侊紝濡傚鑸埌鐧诲綍椤电瓑 - console.log('鐧诲嚭鎴愬姛'); - } else { - // 澶勭悊閿欒鎯呭喌 - console.error('鐧诲嚭澶辫触', response); - } +function quit() { + // removeToken() + router.push('/login') } -catch (error) { - // 澶勭悊閿欒 - console.error(error); - } -} +// const quit = async () => { +// try { + +// const response = await request.get('/loadGlass/sys/user/logout', { +// token: token, +// user: null, +// }) +// if (response.code === 200) { +// // 鐧诲嚭鎴愬姛锛屾竻闄ゆ湰鍦板瓨鍌ㄧ殑 userInfo +// localStorage.removeItem('userInfo'); +// // 鍙互鍦ㄨ繖閲岄噸缃簲鐢ㄧ姸鎬侊紝濡傚鑸埌鐧诲綍椤电瓑 +// console.log('鐧诲嚭鎴愬姛'); +// } else { +// // 澶勭悊閿欒鎯呭喌 +// console.error('鐧诲嚭澶辫触', response); +// } +// } +// catch (error) { +// // 澶勭悊閿欒 +// console.error(error); +// } +// } // store.createWebSocket(); // function quit() { // userStore.$patch({ @@ -57,26 +65,79 @@ // }); // } + + 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; + }); + // } + }); +} //鎻愬彇鑿滃崟妯″潡鍒楄〃 let menuList = $ref([]) -// request.get('/loadGlass/menu/sysMenu/list').then((res) => { + +// onMounted(async () => { +// try { +// const res = await request.get('/loadGlass/sys/menu/getMenuTree'); // 鍋囪 request.get 杩斿洖 Promise +// if (res.code == 200) { +// // 浣跨敤 value 灞炴�ф潵淇敼 ref 寮曠敤鐨勫�� +// menuList.value = deepClone(res.data); +// const language = $i18n.locale; +// if (language === 'en') { +// replaceChineseWithEnglish(menuList.value); // 浼犲叆 ref 鐨� value +// } +// console.log(res.data.token); // 濡傛灉 res.data 涓湁 token 鐨勮瘽 +// } else { +// ElMessage.warning(res.msg); +// router.push('/login'); +// } +// } catch (error) { +// // 澶勭悊璇锋眰閿欒 +// console.error('鑾峰彇鑿滃崟鍒楄〃鏃跺嚭閿�:', error); +// } +// }); request.get('/loadGlass/sys/menu/getMenuTree').then((res) => { if (res.code == 200) { - menuList = deepClone(res.data) - console.log(response.data.token); + menuList = res.data + console.log(language.value) + if (language.value === 'en') { + + replaceChineseWithEnglish(menuList); + } } else { ElMessage.warning(res.msg) router.push('/login') } }) - const menu = ref(null) let indexKey = ref(null) function handleOpen(key) { indexKey.value = key } - watch( indexKey, (newVal, oldVal) => { @@ -110,13 +171,20 @@ <img src="../assets/northGlass.ico" alt="" style="max-width: 100%;max-height: 100%"> - <h3 style="margin: 1rem ;font-weight: bold;width: 20vw;"> 娆㈣繋{{ user }}浣跨敤鍖楃幓MES绯荤粺锛�</h3> + <h3 style="margin: 1rem ;font-weight: bold;width: 33vw;"> {{ $t('main.titleFirst') }}{{ user }}{{ $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=""/>閫�鍑� + <SwitchButton size=""/>{{ $t('main.quit') }} </el-icon> </el-button> </span> @@ -124,33 +192,45 @@ </el-header> <div id="line"></div> <el-container> - <el-aside width="160px" + <!-- <el-aside width="160px" style="height: 99%; background-color: #fff;"> <div class="menu"> <div v-for="items in menuList"> <div class='menu_title' @click="openMenu(items.id)"> - <!-- <span class='indicator' >鈱�</span> --> - <!-- <span class='indicator' >鈮�</span> --> - <!-- <img src="../assets/9.png" alt="" style="max-width: 50%;max-height: 50%;"> --> <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-aside> - + </el-aside> --> + <el-row :span="20"> + <el-menu :default-active="activePath" class="el-menu-vertical-demo" background-color="#fff"> + <div class="menu"> + <div v-for="items in menuList"> + <div class='menu_title' + @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-main> <div id="main"> <router-view></router-view> @@ -163,6 +243,17 @@ </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%; @@ -256,6 +347,7 @@ ul li { height: 28px; + width: 200px; line-height: 30px; /* background: rgb(128, 128, 128); */ color: #000000; @@ -304,7 +396,11 @@ } .menu_title { - width: 140px; + width: 180px; + /* white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; */ + height: 45px; line-height: 55px; /* background: #fafafa; */ diff --git a/UI-Project/src/main.js b/UI-Project/src/main.js index fe656ab..b8b328b 100644 --- a/UI-Project/src/main.js +++ b/UI-Project/src/main.js @@ -6,22 +6,22 @@ import App from './App.vue' import router from './router' import ElementPlus from 'element-plus' -import zhCn from 'element-plus/dist/locale/zh-cn.mjs' 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/i18n' - - +import i18n from '@/lang' + const app = createApp(App) const pinia = createPinia() pinia.use(piniaPluginPersistedstate ) -// app.use(i18n) app.use(VXETable) app.use(pinia) app.use(router) +app.use(ElementPlus) app.use(ElementPlus,{ locale: zhCn, }) +app.use(i18n) app.mount('#app') \ No newline at end of file diff --git a/UI-Project/src/router/index.js b/UI-Project/src/router/index.js index 764db3a..2beb066 100644 --- a/UI-Project/src/router/index.js +++ b/UI-Project/src/router/index.js @@ -1,5 +1,5 @@ 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' diff --git a/UI-Project/src/views/Caching/cachingbefore.vue b/UI-Project/src/views/Caching/cachingbefore.vue index 3672600..9f4ed48 100644 --- a/UI-Project/src/views/Caching/cachingbefore.vue +++ b/UI-Project/src/views/Caching/cachingbefore.vue @@ -13,6 +13,9 @@ import { ElMessage, ElMessageBox } from 'element-plus' // import LanguageMixin from './lang/LanguageMixin' +import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') const tableData = ref([]) const slot = ref('') const adjustedRects = ref([]); @@ -47,19 +50,18 @@ } row.enable_state = newState; }; -const open = async(row) => { - try { +const open = async(row) => { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鎶ョ己璇ユ潯淇℃伅?', - '鎻愮ず', + t('sorter.information'), + t('sorter.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('sorter.yes'), + cancelButtonText: t('sorter.cancel'), type: 'warning', - } + } ); if (confirmResult === 'confirm') { - // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 var url="/cacheGlass/edgStorageCage/edgStorageCageGlass?edgStorageCageId="+row.id; console.log(url); const response = await request.post(url, { @@ -68,13 +70,10 @@ if (response.code === 200) { ElMessage.success(response.message); } else { - // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛 ElMessage.error(response.msg); - // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); } } } catch (error) { - // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 console.error('鍙戠敓閿欒:', error); } }; @@ -111,13 +110,13 @@ <el-table height="240" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="slot" align="center" label="鏍呮牸鍙�" min-width="80" /> - <el-table-column prop="glass_id" align="center" label="鐜荤拑缂栧彿" min-width="80" /> - <el-table-column prop="width" align="center" label="瀹�" min-width="120" /> - <el-table-column prop="height" align="center" label="楂�" min-width="120" /> + <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" /> + <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" /> + <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" /> + <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" /> <el-table-column align="center" - label="鍚敤鐘舵��" + :label="$t('sorter.startstatus')" min-width="80" prop="enable_state" > @@ -126,17 +125,17 @@ :type="scope.row.enable_state === 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)" > - {{ scope.row.enable_state === 1 ? '鍚敤' : '绂佺敤' }} + {{ scope.row.enable_state === 1 ? $t('sorter.start') : $t('sorter.disable') }} </el-tag> </template> <!-- <template #default="scope"> <el-tag type="success" >{{ scope.row.enable_state==1?"鍚敤":"鏈惎鐢�" }}</el-tag> </template> --> </el-table-column> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200"> + <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200"> <template #default="scope"> <!-- <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">鎶ョ己</el-button> --> - <el-button size="mini" type="text" plain @click="open(scope.row)">鎶ョ己</el-button> + <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('sorter.deficiencieste') }}</el-button> </template> </el-table-column> </el-table> diff --git a/UI-Project/src/views/Caching/cachingun.vue b/UI-Project/src/views/Caching/cachingun.vue index d454956..94c8b0b 100644 --- a/UI-Project/src/views/Caching/cachingun.vue +++ b/UI-Project/src/views/Caching/cachingun.vue @@ -1,5 +1,58 @@ +<template> + <div> + <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> + <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> + <el-table height="240" ref="table" + @selection-change="handleSelectionChange" + :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> + <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" /> + <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" /> + <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" /> + <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" /> + <el-table-column + align="center" + :label="$t('sorter.startstatus')" + min-width="80" + prop="enable_state" + > + <template #default="scope"> + <el-tag + :type="scope.row.enable_state === 1 ? 'success' : 'danger'" + @click="toggleEnableState(scope.row)" + > + {{ scope.row.enable_state === 1 ? $t('sorter.start') : $t('sorter.disable') }} + </el-tag> + </template> + <!-- <template #default="scope"> + <el-tag type="success" >{{ scope.row.enable_state==1?"鍚敤":"鏈惎鐢�" }}</el-tag> + </template> --> + </el-table-column> + <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200"> + <template #default="scope"> + <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('sorter.deficiencieste') }}</el-button> + </template> + </el-table-column> + </el-table> + </div> + </el-card> + </div> + <div id="awatch"> + <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;position: relative;"> + <div style="position: absolute; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;"> + <div + v-for="(rect, index) in adjustedRects" + :key="rect" + :style="{ position: 'absolute', + top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`, + backgroundColor: '#409EFF' + }" + > + </div> + </div> +</div> +</template> <script setup> -import {Search} from "@element-plus/icons-vue"; +import {Search,Lock,Avatar} from "@element-plus/icons-vue"; import {reactive} from "vue"; import {useRouter} from "vue-router" const router = useRouter() @@ -12,6 +65,9 @@ import { ElMessage, ElMessageBox } from 'element-plus' // import LanguageMixin from './lang/LanguageMixin' +import { useI18n } from 'vue-i18n' + const { t } = useI18n() +// import i18n from '@/i18n'; const tableData = ref([]) const slot = ref('') const adjustedRects = ref([]); @@ -36,17 +92,16 @@ // console.error('Error fetching rects :', error); } }); - -const open = async(row) => { - try { +const open = async(row) => { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鎶ョ己璇ユ潯淇℃伅?', - '鎻愮ず', + t('sorter.information'), + t('sorter.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('sorter.yes'), + cancelButtonText: t('sorter.cancel'), type: 'warning', - } + } ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 @@ -63,11 +118,50 @@ // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); } } - } catch (error) { + } + + + catch (error) { // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 console.error('鍙戠敓閿欒:', error); } -}; +}; +// const open = async(row) => { +// const { t } = useI18n(); +// try { +// const confirmMessage = t('sorter.prompt'); // 浣跨敤 $t 缈昏瘧鏂囨湰 +// const confirmResult = await ElMessageBox.confirm( +// confirmMessage, +// t('sorter.information'), +// { +// confirmButtonText: t('sorter.yes'), +// cancelButtonText: t('sorter.cancel'), +// type: 'warning', +// } +// ); +// if (confirmResult === 'confirm') { +// // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 +// var url="/cacheGlass/edgStorageCage/edgStorageCageGlass?edgStorageCageId="+row.id; +// console.log(url); +// const response = await request.post(url, { +// esdId: row.esdId +// }) +// if (response.code === 200) { +// ElMessage.success(response.message); +// } else { +// // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛 +// ElMessage.error(response.msg); +// // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); +// } +// } +// } + + +// catch (error) { +// // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 +// console.error('鍙戠敓閿欒:', error); +// } +// }; const toggleEnableState = async (row) => { const newState = row.enable_state === 1 ? 0 : 1; // 鍙戦�佽姹傚埌鍚庣鏇存柊鐘舵�侊紙杩欓噷鐪佺暐浜嗗疄闄呯殑璇锋眰閫昏緫锛� @@ -105,62 +199,6 @@ closeWebSocket(); }); </script> - -<template> - <div> - <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> - <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> - <el-table height="240" ref="table" - @selection-change="handleSelectionChange" - :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="slot" align="center" label="鏍呮牸鍙�" min-width="80" /> - <el-table-column prop="glass_id" align="center" label="鐜荤拑缂栧彿" min-width="80" /> - <el-table-column prop="width" align="center" label="瀹�" min-width="120" /> - <el-table-column prop="height" align="center" label="楂�" min-width="120" /> - <el-table-column - align="center" - label="鍚敤鐘舵��" - min-width="80" - prop="enable_state" - > - <template #default="scope"> - <el-tag - :type="scope.row.enable_state === 1 ? 'success' : 'danger'" - @click="toggleEnableState(scope.row)" - > - {{ scope.row.enable_state === 1 ? '鍚敤' : '绂佺敤' }} - </el-tag> - </template> - <!-- <template #default="scope"> - <el-tag type="success" >{{ scope.row.enable_state==1?"鍚敤":"鏈惎鐢�" }}</el-tag> - </template> --> - </el-table-column> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200"> - <template #default="scope"> - <!-- <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">鎶ョ己</el-button> --> - <el-button size="mini" type="text" plain @click="open(scope.row)">鎶ョ己</el-button> - </template> - </el-table-column> - </el-table> - </div> - </el-card> - </div> - <div id="awatch"> - <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;position: relative;"> - <div style="position: absolute; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;"> - <div - v-for="(rect, index) in adjustedRects" - :key="rect" - :style="{ position: 'absolute', - top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`, - backgroundColor: '#409EFF' - }" - > - </div> - </div> -</div> -</template> - <style scoped> #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} diff --git a/UI-Project/src/views/Identify/identify.vue b/UI-Project/src/views/Identify/identify.vue index 9316fc9..a972dbe 100644 --- a/UI-Project/src/views/Identify/identify.vue +++ b/UI-Project/src/views/Identify/identify.vue @@ -1,6 +1,6 @@ <template> <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading"> - <el-scrollbar height="700px"> + <el-scrollbar height="600px"> <div id="app" style="margin-top: 20px;"> <div :style="{ width: `${olWidth}px`, height: `${olHeight}px`,position: 'relative' }" @@ -26,12 +26,12 @@ </div> <!-- 鐐瑰嚮寮瑰嚭 --> <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;"> - <el-button type="warning" plain :icon="Delete" @click="handleDamage(currentGlassId)" style="width: 120px;margin-left: 10px;"> - 鐮存崯 + <el-button type="warning" plain :icon="Delete" @click="handleDamage(currentGlassId)" style="width: 140px;margin-left: 10px;"> + {{ $t('order.dilapidation') }} </el-button> - <el-button type="danger" plain @click="handleManualTake(currentGlassId)" style="width: 120px;margin-top: 10px;"> + <el-button type="danger" plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;"> <el-icon class="el-icon--right"><Upload /></el-icon> - 浜哄伐鎷胯蛋</el-button> + {{ $t('order.Takeaway') }}</el-button> </el-dialog> </div> </div> @@ -45,6 +45,9 @@ import request from "@/utils/request" import { WebSocketHost ,host} from '@/utils/constants' import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; + import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') const blind = ref(false) const olWidth = ref(); const olHeight = ref(); @@ -76,8 +79,8 @@ adjustedRects.value = rawRects.map(rect => ({ ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬� - x_axis: (rect.x_axis*100) * 0.004, // 灏唜鍊奸櫎浠�3 - y_axis: (rect.y_axis*100) * 0.004, + x_axis: (rect.x_axis*100) * 0.003, // 灏唜鍊奸櫎浠�3 + y_axis: (rect.y_axis*100) * 0.003, width: (rect.width*100) * 0.002 , widtha: rect.width , heighta: rect.height , @@ -183,8 +186,8 @@ // adjustedRects.value = data.currentCutTerritory[0] adjustedRects.value = data.currentCutTerritory[0].map(rect => ({ ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬� - x_axis: (rect.x_axis*100) * 0.004, // 灏唜鍊奸櫎浠�3 - y_axis: (rect.y_axis*100) * 0.004, + x_axis: (rect.x_axis*100) * 0.003, // 灏唜鍊奸櫎浠�3 + y_axis: (rect.y_axis*100) * 0.003, width: (rect.width*100) * 0.002 , widtha: rect.width , heighta: rect.height , diff --git a/UI-Project/src/views/LoginView.vue b/UI-Project/src/views/LoginView.vue index 40d2d9b..d84f329 100644 --- a/UI-Project/src/views/LoginView.vue +++ b/UI-Project/src/views/LoginView.vue @@ -5,12 +5,17 @@ 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: '', @@ -22,7 +27,7 @@ const validateUser = (rule: any, value: any, callback: any) => { if (value === '') { - callback(new Error('璇疯緭鍏ヤ綘鐨勮处鍙�')) + callback(new Error(t('login.userErr'))) } else { callback() } @@ -30,7 +35,7 @@ const validatePass = (rule: any, value: any, callback: any) => { if (value === '') { - callback(new Error('璇疯緭鍏ヤ綘鐨勫瘑鐮�')) + callback(new Error(t('login.pwErr'))) } else { callback() } @@ -56,7 +61,7 @@ console.log(res.data) router.push('/main') - ElMessage.success(`鐧诲綍鎴愬姛`) + ElMessage.success(t('login.loginSuccessful')) } else { ElMessage.error(res['msg']) store.$patch({ @@ -67,7 +72,7 @@ } }) .catch((error) => { - ElMessage.error('鏈嶅姟鍣ㄨ繛鎺ュけ璐�') + ElMessage.error(t('main.connectErr')) store.$patch({ user: null, }) @@ -113,26 +118,35 @@ <img src="../../src/assets/3.png"> </div> <div style="position: absolute; left: 15vw; top: 22vw; font-size: 55px;color: rgba(29, 33, 41, 1);"> - 鍖楃幓MES绯荤粺 + {{ $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="en" label="袪褍褋褋泻懈泄 褟蟹褘泻" /> + </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;">璐﹀彿</div> + <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="璇疯緭鍏ヨ处鍙�"/> + :placeholder="$t('login.userErr')"/> </el-form-item> - <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">瀵嗙爜</div> + <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" @@ -140,7 +154,8 @@ autocomplete="off" :prefix-icon="Lock" show-password - placeholder="璇疯緭鍏ュ瘑鐮�"/> + :placeholder="$t('login.pwErr')" + /> </el-form-item> <el-form-item id="submitForm"> <el-button :loading="loginLoadings" @@ -148,12 +163,12 @@ native-type="submit" @click="submitForm(ruleFormRef)" @keyup.enter.native="keyDown(e)" - plain>鐧诲綍 + plain>{{ $t('login.login') }} </el-button> <el-button :loading="registerLoadings" type="primary" @click="register" - plain>娉ㄥ唽 + plain>{{ $t('login.register') }} </el-button> </el-form-item> diff --git a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue index 6c8b687..77bd047 100644 --- a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue +++ b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue @@ -6,6 +6,9 @@ import { ref, onMounted, onBeforeUnmount } from 'vue'; import { WebSocketHost ,host} from '@/utils/constants' import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; + import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') const dialogFormVisible = ref(true) const dialogFormVisiblea = ref(false) const dialogFormVisibleb = ref(false) @@ -70,12 +73,12 @@ </script> <template> <div style="margin-top: 10px;"> - <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;">杩涚倝涓�</el-button> - <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >杩涚倝鍓�</el-button> - <el-button id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false">宸插嚭鐐夌幓鐠�</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 style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >{{ $t('processCard.beforefurnace') }}</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: 700px;" v-loading="loading"> -<div style="width: 49%;float: left;background-color: #f4f4f5;height: 650px;"> + <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading"> +<div style="width: 49%;float: left;background-color: #f4f4f5;height: 550px;"> <el-scrollbar height="630px"> <div style="position: relative;width: 1400px;"> <div @@ -92,8 +95,8 @@ </div> </el-scrollbar> </div> -<div style="width: 49%;float: right;background-color: #f4f4f5;height: 650px;"> - <el-scrollbar height="630px"> +<div style="width: 49%;float: right;background-color: #f4f4f5;height: 550px;"> + <el-scrollbar height="550px"> <div style="position: relative;width: 1400px;"> <div v-for="(rect, index) in adjustedRects2" @@ -114,7 +117,7 @@ <div v-if="dialogFormVisiblea"> <!-- 杩涚倝鍓� --> <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading"> - <el-scrollbar height="630px"> + <el-scrollbar height="550px"> <div style="position: relative;width: 1400px;"> <div v-for="(rect, index) in adjustedRectsa" @@ -135,7 +138,7 @@ <div v-if="dialogFormVisibleb"> <!-- 宸插嚭鐐� --> <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading"> - <el-scrollbar height="630px"> + <el-scrollbar height="550px"> <div style="position: relative;width: 1400px;"> <div v-for="(rect, index) in adjustedRectsb" diff --git a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue index 2a98019..10bf427 100644 --- a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue +++ b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue @@ -56,7 +56,7 @@ <div style="margin-top: 10px;"> <div> <el-card style="margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading"> - <el-scrollbar height="630px"> + <el-scrollbar height="600px"> <div style="position: relative;width: 1400px;"> <div v-for="(rect, index) in adjustedRects" diff --git a/UI-Project/src/views/RegisterView.vue b/UI-Project/src/views/RegisterView.vue index 44b8078..9879f09 100644 --- a/UI-Project/src/views/RegisterView.vue +++ b/UI-Project/src/views/RegisterView.vue @@ -7,6 +7,10 @@ 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) @@ -23,9 +27,9 @@ /*鏂规硶*/ const checkName = (rule: any, value: any, callback: any) => { if (value.trim() === '') { - callback(new Error('濮撳悕涓嶈兘涓虹┖')) + callback(new Error(t('login.namea'))) }else if(value.length>16){ - callback(new Error('闀垮害涓嶈兘瓒呰繃16')) + callback(new Error(t('login.len'))) }else{ callback() } @@ -33,9 +37,9 @@ const checkPassword = (rule: any, value: any, callback: any) => { if (value.trim() === '') { - callback(new Error('瀵嗙爜涓嶈兘涓虹┖')) + callback(new Error(t('login.passnull'))) }else if(value.length>16 || value.length<6){ - callback(new Error('瀵嗙爜闀垮害涓嶈兘浣庝簬6鎴栬秴杩�16')) + callback(new Error(t('login.leng'))) }else{ callback() } @@ -43,11 +47,11 @@ const checkConfirmPassword = (rule: any, value: any, callback: any) => { if (value.trim() === '') { - callback(new Error('纭瀵嗙爜涓嶈兘涓虹┖')) + callback(new Error(t('login.spwn'))) }else if(value !== register.passWord){ - callback(new Error('涓ゆ瀵嗙爜涓嶇浉鍚�')) + callback(new Error(t('login.depass'))) }else if(value.length>16 || value.length<6){ - callback(new Error('瀵嗙爜闀垮害涓嶈兘浣庝簬6鎴栬秴杩�16')) + callback(new Error(t('login.leng'))) }else{ callback() } @@ -88,14 +92,14 @@ }) }) - ElMessage.success(`娉ㄥ唽鎴愬姛`) + ElMessage.success(t('register.registerSuccessful')) loginLoadings.value=false } else { ElMessage.error(res['msg']) return false } }).catch(error => { - ElMessage.error("鏈嶅姟鍣ㄨ繛鎺ュけ璐�") + ElMessage.error(t('main.connectErr')) loginLoadings.value=false return false }) @@ -107,11 +111,6 @@ path:'/login', }) } - - - - - // console.log(route.params) </script> <template> @@ -123,7 +122,7 @@ <img src="../../src/assets/3.png"> </div> <div style="position: absolute; left: 15vw; top: 22vw; font-size: 55px;color: rgba(29, 33, 41, 1);"> - 鍖楃幓MES绯荤粺 + {{ $t('northglassMESsystem') }} </div> </div> <div id="div-login"> @@ -135,33 +134,33 @@ :rules="rules" label-width="75px" > - <div id="title">娉ㄥ唽鏂扮敤鎴�</div> + <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="濮撳悕:"> + <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="璇疯緭鍏ュ鍚�" + :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="瀵嗙爜:"> + <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="璇疯緭鍏ュ瘑鐮�" + :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="纭瀵嗙爜:"> + <el-form-item prop="confirmPassword" :label="$t('register.passwordation')"> <el-input style="width: 200px;" v-model="register.confirmPassword" @@ -169,7 +168,7 @@ :prefix-icon="Lock" autocomplete="off" show-password - placeholder="璇风‘璁ゅ瘑鐮�" + :placeholder="$t('register.pwErration')" /> </el-form-item> <el-form-item id="submitForm"> @@ -178,13 +177,13 @@ 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> @@ -196,25 +195,6 @@ </template> <style scoped> -/* #main-div{ - position: absolute; - left:75%; - top:45%; - transform: translate(-50%, -50%); -} */ -/* #register{ - background-color: #fff; - width: 32vw; - height: 35vh; - box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19); - display:flex; - align-items:center; - justify-content:center; - min-height: 280px; -} */ -/* .el-form{ - max-width: 300px; -} */ #div-login{ margin-top: 5%; /* margin-top: 20%; */ diff --git a/UI-Project/src/views/Returns/returns.vue b/UI-Project/src/views/Returns/returns.vue index f1b1f89..cff32bf 100644 --- a/UI-Project/src/views/Returns/returns.vue +++ b/UI-Project/src/views/Returns/returns.vue @@ -5,6 +5,8 @@ const router = useRouter() import type { TableColumnCtx } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus' +import { useI18n } from 'vue-i18n' +const { t } = useI18n() const dialogFormVisible = ref(false) const blind = ref(false) const blinda = ref(false) @@ -25,7 +27,8 @@ const selectedValuea = ref(''); const selectedValueb = ref(''); const selectedValuec = ref(''); -const upstatus = ref('涓婄墖鏈烘墜鍔ㄧ姸鎬侊細'); // 鍋囪杩欎釜鐢ㄤ簬鏄剧ず鑷姩/鎵嬪姩鐘舵�� +// const upstatus = ref('涓婄墖鏈烘墜鍔ㄧ姸鎬侊細'); // 鍋囪杩欎釜鐢ㄤ簬鏄剧ず鑷姩/鎵嬪姩鐘舵�� +const upstatus = ref(t('basicData.machineaa')); const cuttingMachine = ref(''); // 鍋囪杩欎釜鐢ㄤ簬瀛樺偍鍚庣杩斿洖鐨勭姸鎬佸�硷紙0鎴�1锛� const cuttingMachineStatusColor = ref('#911005'); // 鐢ㄤ簬鍔ㄦ�佽缃甶鏍囩鐨勮儗鏅壊 const inKageWord = ref(0); // 鐢ㄤ簬瀛樺偍瑕佷紶閫掔粰鎺ュ彛鐨刬nKageWord鍊� @@ -260,7 +263,7 @@ else { ElMessage({ type: 'info', - message: '绗簩琛屽拰绗洓琛岀殑楂樺繀椤诲ぇ浜�2700鎵嶈兘淇濆瓨锛�', + message: t('basicData.pause'), }) } @@ -375,7 +378,7 @@ } } else if (markingMachineStatus.value === '#911005' || cuttingMachineStatus.value === '#911005') { // 鎻愮ず鐢ㄦ埛鎵撴爣鏈烘湭灏辩华 - ElMessage.warning('璇风‘璁ゆ墦鏍囨満鍜屽垏鍓叉満鐨勫氨缁姸鎬侊紒'); + ElMessage.warning(t('basicData.pausea')); } } // 鏆傚仠 @@ -400,7 +403,7 @@ else { ElMessage({ type: 'info', - message: '宸ョ▼鍙蜂笉鑳戒负绌猴紒', + message: t('basicData.infonull'), }) } } @@ -433,7 +436,7 @@ else { ElMessage({ type: 'info', - message: '宸ョ▼鍙蜂笉鑳戒负绌猴紒', + message: t('basicData.infonull'), }) } } @@ -446,13 +449,13 @@ function getStatusText(state: number) { switch (state) { case 0: - return '绛夊緟涓�'; + return t('basicData.waiting'); case 1: - return '涓婄墖涓�'; + return t('basicData.up'); case 2: - return '涓婄墖涓�'; + return t('basicData.up'); case 100: - return '宸插畬鎴�'; + return t('basicData.finish'); } } function getStatusType(state: number) { @@ -498,7 +501,7 @@ const toggleEnableState = async (row: any) => { // 妫�鏌� id 鏄惁涓虹┖ if (!row.id) { - ElMessage.error('璇ュ伐绋嬫湭淇濆瓨鍒颁笂鐗囪〃锛�'); + ElMessage.error(t('basicData.updatanull')); return; // 濡傛灉 id 涓虹┖锛屽垯涓嶆墽琛屽悗缁搷浣� } @@ -514,8 +517,7 @@ } } catch (error) { // 澶勭悊璇锋眰閿欒 - console.error('鏇存柊鐜荤拑鐘舵�佽姹傚け璐�:', error); - ElMessage.error('鏇存柊鐜荤拑鐘舵�佹椂鍙戠敓閿欒'); + ElMessage.error(t('basicData.glassnull')); } }; @@ -547,7 +549,7 @@ if (data && Array.isArray(data.InkageStatus) && data.InkageStatus.length > 0) { const status = data.InkageStatus[0]; cuttingMachine.value = status; - upstatus.value = status === '1' ? '涓婄墖鏈鸿仈鏈虹姸鎬侊細' : '涓婄墖鏈烘墜鍔ㄧ姸鎬侊細'; + upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa'); cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005'; inKageWord.value = status === '1' ? 0 : 1; } else { @@ -565,7 +567,7 @@ ); if (response.code == 200) { const status = response.data.status; - upstatus.value = status === '1' ? '涓婄墖鏈鸿仈鏈虹姸鎬侊細' : '涓婄墖鏈烘墜鍔ㄧ姸鎬侊細'; + upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa'); cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005'; // 鏄剧ず鎴愬姛娑堟伅 ElMessage.success(response.message); @@ -583,20 +585,20 @@ <template> <div> <div id="dotClass"> - <div>鎵撴爣鏈哄氨缁姸鎬侊細</div> + <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;">纭</el-button> - <div style="margin-left: 70px;">鍒囧壊鏈哄氨缁姸鎬侊細</div> + <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;" >纭</el-button> + <el-button @click="confirmCuttingMachine" style="margin-left: 30px;margin-top: -3px;" >{{ $t('basicData.yes') }}</el-button> <div style="margin-left: 70px;">{{ upstatus }} </div> <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatusColor, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i> - <el-button @click="confirmCutting" style="margin-left: 30px;margin-top: -3px;" >鍒囨崲</el-button> + <el-button @click="confirmCutting" style="margin-left: 30px;margin-top: -3px;" >{{ $t('basicData.change') }}</el-button> </div> - <el-button style="margin-top: 5px;margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true">閫夋嫨宸ョ▼</el-button> - <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">寮�濮嬩笂鐗�</el-button> - <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="warning" @click="handleBinda">鏆傚仠</el-button> + <el-button style="margin-top: 5px;margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true">{{ $t('basicData.selectproject') }}</el-button> + <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">{{ $t('basicData.startloading') }}</el-button> + <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button> <!-- <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handleBindb">鍋滄浠诲姟</el-button> --> <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading"> @@ -607,12 +609,12 @@ :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" :data="tableData" > - <el-table-column prop="engineeringId" label="宸ョ▼鍙�" width="200" align="center"/> - <el-table-column prop="width" label="鍘熺墖瀹�" align="center"/> - <el-table-column prop="height" label="鍘熺墖楂�" align="center"/> - <el-table-column prop="filmsId" label="鑶滅郴" align="center"/> - <el-table-column prop="layoutSequence" label="鏁伴噺" align="center"/> - <el-table-column prop="thickness" label="鍘氬害" align="center"/> + <el-table-column prop="engineeringId" :label="$t('basicData.projectnumber')" width="200" align="center"/> + <el-table-column prop="width" :label="$t('basicData.glasswidth')" align="center"/> + <el-table-column prop="height" :label="$t('basicData.glassheight')" align="center"/> + <el-table-column prop="filmsId" :label="$t('basicData.coatingtypes')" align="center"/> + <el-table-column prop="layoutSequence" :label="$t('basicData.quantity')" align="center"/> + <el-table-column prop="thickness" :label="$t('basicData.thickness')" align="center"/> <!-- <el-table-column align="center" label="鐘舵��" @@ -626,7 +628,7 @@ </template> --> <el-table-column align="center" - label="鍚敤鐘舵��" + :label="$t('basicData.startstatus')" min-width="80" prop="state" > @@ -635,34 +637,34 @@ :type="scope.row.state === 100 ? 'success' : 'warning'" @click="toggleEnableState(scope.row)" > - {{ scope.row.state === 100 ? '閫氳繃' : '绛夊緟涓�' }} + {{ scope.row.state === 100 ? $t('basicData.pass') : $t('basicData.waiting') }} </el-tag> </template> </el-table-column> </el-table> </div> </el-card> - <el-dialog v-model="blind" top="30vh" width="25%" title="鏄惁寮�濮嬩笂鐗�?" > + <el-dialog v-model="blind" top="30vh" width="25%" :title="$t('basicData.startfilm')"> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handle"> - 纭 + {{ $t('basicData.confirm') }} </el-button> - <el-button @click="blind = false">鍙栨秷</el-button> + <el-button @click="blind = false">{{ $t('basicData.cancel') }}</el-button> </div> </template> </el-dialog> - <el-dialog v-model="blinda" top="30vh" width="25%" title="鏄惁鏆傚仠?" > + <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('basicData.whetherpause')"> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handlea"> - 纭 + {{ $t('basicData.confirm') }} </el-button> - <el-button @click="blinda = false">鍙栨秷</el-button> + <el-button @click="blinda = false">{{ $t('basicData.cancel') }}</el-button> </div> </template> </el-dialog> - <el-dialog v-model="blindb" top="30vh" width="25%" title="鏄惁鍋滄浠诲姟?" > + <!-- <el-dialog v-model="blindb" top="30vh" width="25%" title="鏄惁鍋滄浠诲姟?" > <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleb"> @@ -671,31 +673,31 @@ <el-button @click="blindb = false">鍙栨秷</el-button> </div> </template> - </el-dialog> + </el-dialog> --> <div id="parent"> <img src="../../assets/shangpianji.png" alt="" style="max-width: 20%;max-height: 20%;margin-top: 20px;margin-left: 500px;"> <div id="overlay" v-show="flake"></div> <div id="overlaya" v-show="flakea"></div> </div> <div style="margin-top: -350px;margin-left: 650px;"> - <el-table :data="tableDataa" border style="width: 70%" + <el-table :data="tableDataa" border style="width: 85%" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" > - <el-table-column prop="workstationId" align="center" label="宸ヤ綅" min-width="50" /> - <el-table-column prop="patternWidth" align="center" label="瀹�" min-width="80" /> - <el-table-column prop="patternHeight" align="center" label="楂�" min-width="80" /> - <el-table-column prop="filmsId" align="center" label="鑶滅郴" min-width="80" /> - <el-table-column prop="number" align="center" label="鏁伴噺" min-width="80" /> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="150"> + <el-table-column prop="workstationId" align="center" :label="$t('basicData.station')" min-width="60" /> + <el-table-column prop="patternWidth" align="center" :label="$t('basicData.width')" min-width="80" /> + <el-table-column prop="patternHeight" align="center" :label="$t('basicData.height')" min-width="80" /> + <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80" /> + <el-table-column prop="number" align="center" :label="$t('basicData.quantity')" min-width="80" /> + <el-table-column fixed="right" :label="$t('basicData.operate')" align="center" width="150"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">娣诲姞</el-button> - <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">鍒犻櫎</el-button> + <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{ $t('basicData.add') }}</el-button> + <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">{{ $t('basicData.delete') }}</el-button> </template> </el-table-column> </el-table> </div> - <el-dialog v-model="add" top="23vh" width="45%" title="娣诲姞鍘熺墖" > + <el-dialog v-model="add" top="23vh" width="45%" :title="$t('basicData.addglass')" > <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="150px"> <el-form label-width="70px" label-position="right"> @@ -703,12 +705,12 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="瀹斤細" :required="true" style="width: 14vw"> + <el-form-item :label="$t('basicData.widtha')" :required="true" style="width: 14vw"> <el-select v-model="selectedValue" filterable clearable - placeholder="璇烽�夋嫨瀹�" + :placeholder="$t('basicData.selectwidth')" style="width: 220px" @input="handleInputChangea" > @@ -725,12 +727,12 @@ <el-col :span="9"> <div id="dta" style="font-size: 15px;"> <div> - <el-form-item label="楂橈細" :required="true" style="width: 14vw"> + <el-form-item :label="$t('basicData.heighta')" :required="true" style="width: 14vw"> <el-select v-model="selectedValuea" filterable clearable - placeholder="璇烽�夋嫨楂�" + :placeholder="$t('basicData.selectheight')" style="width: 220px" @input="handleInputChangea" > @@ -749,12 +751,12 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鑶滅郴锛�" :required="true" style="width: 14vw;"> + <el-form-item :label="$t('basicData.coatingtypesa')" :required="true" style="width: 14vw;"> <el-select v-model="selectedValueb" filterable clearable - placeholder="璇烽�夋嫨鑶滅郴" + :placeholder="$t('basicData.selectcoatingtypes')" style="width: 220px" @input="handleInputChangea" > @@ -770,12 +772,12 @@ <el-col :span="9"> <div id="dta" style="font-size: 15px;"> <div> - <el-form-item label="鍘氬害锛�" :required="true" style="width: 14vw"> + <el-form-item :label="$t('basicData.thicknessa')" :required="true" style="width: 14vw"> <el-select v-model="selectedValuec" filterable clearable - placeholder="璇烽�夋嫨鍘氬害" + :placeholder="$t('basicData.selectthickness')" style="width: 220px" @input="handleInputChangea" > @@ -794,8 +796,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鏁伴噺锛�" :required="true" style="width: 14vw;"> - <el-input placeholder="璇疯緭鍏ユ暟閲�" v-model="number" autocomplete="off" /> + <el-form-item :label="$t('basicData.quantitya')" :required="true" style="width: 14vw;"> + <el-input :placeholder="$t('basicData.selectquantity')" v-model="number" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -805,31 +807,31 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleConfirm"> - 纭 + {{ $t('basicData.confirm') }} </el-button> - <el-button @click="add = false">鍙栨秷</el-button> + <el-button @click="add = false">{{ $t('basicData.cancel') }}</el-button> </div> </template> </el-dialog> - <el-dialog v-model="adda" top="30vh" width="25%" title="鏄惁鍒犻櫎璇ユ潯淇℃伅?" > + <el-dialog v-model="adda" top="30vh" width="25%" :title="$t('basicData.deletemessage')"> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleConfirma"> - 纭 + {{ $t('basicData.confirm') }} </el-button> - <el-button @click="adda = false">鍙栨秷</el-button> + <el-button @click="adda = false">{{ $t('basicData.cancel') }}</el-button> </div> </template> </el-dialog> </div> - <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" title="宸ョ▼" > + <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" :title="$t('basicData.project')" > <div style="margin-left: 50px;margin-bottom: 10px;"> - <el-form-item label="宸ョ▼鍙凤細" :required="true"> + <el-form-item :label="$t('basicData.projectnumber')" :required="true"> <el-select v-model="selectedProjectNo" filterable clearable - placeholder="璇烽�夋嫨宸ョ▼" + :placeholder="$t('basicData.plselectproject')" style="width: 220px" @input="handleInputChange" > @@ -845,9 +847,9 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleup"> - 纭 + {{ $t('basicData.confirm') }} </el-button> - <el-button @click="dialogFormVisible = false">鍙栨秷</el-button> + <el-button @click="dialogFormVisible = false">{{ $t('basicData.cancel') }}</el-button> </div> </template> </el-dialog> diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue index 15839b1..2a42c23 100644 --- a/UI-Project/src/views/Slicecage/slicecage.vue +++ b/UI-Project/src/views/Slicecage/slicecage.vue @@ -1,4 +1,11 @@ <script lang="ts" setup> +// import zhCn from 'element-plus/lib/locale/lang/zh-cn' +// import en from 'element-plus/dist/locale/en.mjs' +// const { locale } = useI18n() + +import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') import {Search} from "@element-plus/icons-vue"; import {reactive} from "vue"; import {useRouter} from "vue-router" @@ -18,6 +25,7 @@ const tableDatad = ref([]) const tableDatae = ref([]) const adjustedRects = ref([]); +const adjustedRectsa = ref([]); // const height = ref([]); const add = ref(false) const flowCardId = ref(''); @@ -58,111 +66,112 @@ const cell6=ref(true); const cell7=ref(true); const cell8=ref(true); +const selectedRow = ref(null); // 瀛樺偍閫変腑鐨勮鏁版嵁 const currentPage4 = ref(4) const pageSize4 = ref(100) - var timer=setInterval(() => { - // console.log(million.value,million1.value); - million.value+=1; - if(million.value-million1.value!==12){ + // var timer=setInterval(() => { + // // console.log(million.value,million1.value); + // million.value+=1; + // if(million.value-million1.value!==12){ - if(million.value-million1.value>=2){ - if(carposition1.value==220){ - timers1.value=false; - }else if(carposition1.value==60){ - timers1.value=true; - } - if(timers1.value==true){ - carposition1.value=carposition1.value+16; - }else{ - carposition1.value=carposition1.value-16; - } + // if(million.value-million1.value>=2){ + // if(carposition1.value==220){ + // timers1.value=false; + // }else if(carposition1.value==60){ + // timers1.value=true; + // } + // if(timers1.value==true){ + // carposition1.value=carposition1.value+16; + // }else{ + // carposition1.value=carposition1.value-16; + // } - if(carposition2.value==220){ - timers2.value=false; - }else if(carposition2.value==60){ - timers2.value=true; - } - if(timers2.value==true){ - carposition2.value+=16; - }else{ - carposition2.value-=16; - } - }else{ + // if(carposition2.value==220){ + // timers2.value=false; + // }else if(carposition2.value==60){ + // timers2.value=true; + // } + // if(timers2.value==true){ + // carposition2.value+=16; + // }else{ + // carposition2.value-=16; + // } + // }else{ - } - }else{ - million1.value=million.value; + // } + // }else{ + // million1.value=million.value; - if(cellshow1.value==true){ - cellshow1.value=false; - }else{ - cellshow1.value=true; - } - if(cellshow2.value==true){ - cellshow2.value=false; - }else{ - cellshow2.value=true; - } - } + // if(cellshow1.value==true){ + // cellshow1.value=false; + // }else{ + // cellshow1.value=true; + // } + // if(cellshow2.value==true){ + // cellshow2.value=false; + // }else{ + // cellshow2.value=true; + // } + // } - }, 1000); + // }, 1000); - var timer=setInterval(() => { - // console.log(million3.value,million4.value); - million3.value+=1; - if(million3.value-million4.value!==12){ + // var timer=setInterval(() => { + // // console.log(million3.value,million4.value); + // million3.value+=1; + // if(million3.value-million4.value!==12){ - if(million3.value-million4.value>=2){ - if(carposition3.value==260){ - timers3.value=false; - }else if(carposition3.value==60){ - timers3.value=true; - } - if(timers3.value==true){ - carposition3.value=carposition3.value+20; - }else{ - carposition3.value=carposition3.value-20; - } + // if(million3.value-million4.value>=2){ + // if(carposition3.value==260){ + // timers3.value=false; + // }else if(carposition3.value==60){ + // timers3.value=true; + // } + // if(timers3.value==true){ + // carposition3.value=carposition3.value+20; + // }else{ + // carposition3.value=carposition3.value-20; + // } - if(carposition4.value==260){ - timers4.value=false; - }else if(carposition4.value==60){ - timers4.value=true; - } - if(timers4.value==true){ - carposition4.value+=20; - }else{ - carposition4.value-=20; - } - }else{ + // if(carposition4.value==260){ + // timers4.value=false; + // }else if(carposition4.value==60){ + // timers4.value=true; + // } + // if(timers4.value==true){ + // carposition4.value+=20; + // }else{ + // carposition4.value-=20; + // } + // }else{ - } - }else{ - million4.value=million3.value; - if(cellshow5.value==true){ - cellshow5.value=false; + // } + // }else{ + // million4.value=million3.value; + // if(cellshow5.value==true){ + // cellshow5.value=false; - }else{ - cellshow5.value=true; + // }else{ + // cellshow5.value=true; - } - if(cellshow3.value==true){ - cellshow3.value=false; - }else{ - cellshow3.value=true; - } - if(cellshow4.value==true){ - cellshow4.value=false; - }else{ - cellshow4.value=true; - } - } + // } + // if(cellshow3.value==true){ + // cellshow3.value=false; + // }else{ + // cellshow3.value=true; + // } + // if(cellshow4.value==true){ + // cellshow4.value=false; + // }else{ + // cellshow4.value=true; + // } + // } - }, 1000); + // }, 1000); const getTableRow = (row,type) =>{ switch (type) { @@ -178,24 +187,35 @@ } } const handleBindRack = (row) => { + selectedRow.value = row; // 鏇存柊閫変腑鐨勮鏁版嵁 add.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗� }; -// 娣诲姞 -const handleConfirm = async () => { +async function handleConfirm() { + if (!selectedRow.value) { + // 澶勭悊娌℃湁閫変腑琛岀殑鎯呭喌... + return; + } + + // 鏋勯�犱綘鐨凱OST璇锋眰鏁版嵁锛屽寘鍚�変腑鐨勮鏁版嵁鍜岃〃鍗曟暟鎹� + const postData = { + ...selectedRow.value, // 閫変腑琛岀殑鏁版嵁 + }; + try { const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/insertBigStorageCageDetails', { - flowCardId: flowCardId.value, - gap: gap.value, - glassId: glassId.value, - glassType: glassType.value, - height: height.value, - sequence: sequence.value, - state: state.value, - temperingFeedSequence: temperingFeedSequence.value, - temperingLayoutId: temperingLayoutId.value, - thickness: thickness.value, - width: width.value, - }); + 'flowCardId': flowCardId.value, + 'gap': gap.value, + 'glassId': glassId.value, + 'glassType': glassType.value, + 'height': height.value, + 'sequence': sequence.value, + 'state': state.value, + 'temperingFeedSequence': temperingFeedSequence.value, + 'temperingLayoutId': temperingLayoutId.value, + 'thickness': thickness.value, + 'width': width.value, + body: JSON.stringify(postData), + }); if (response.code == 200) { // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫 ElMessage.success(response.message); @@ -203,13 +223,43 @@ tableData.value = response.data; } else { // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭� - ElMessage.error(response.msg); + ElMessage.error(response.message); } - } catch (error) { - // 澶勭悊閿欒 - console.error(error); - } -}; + } catch (error) { + // 澶勭悊閿欒... + console.error(error); + } +} +// 娣诲姞 +// const handleConfirm = async () => { +// try { +// const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/insertBigStorageCageDetails', { +// 'bigStorageCageOutTask.flowCardId': flowCardId.value, +// 'bigStorageCageOutTask.gap': gap.value, +// 'bigStorageCageOutTask.glassId': glassId.value, +// 'bigStorageCageOutTask.glassType': glassType.value, +// 'bigStorageCageOutTask.height': height.value, +// 'bigStorageCageOutTask.sequence': sequence.value, +// 'bigStorageCageOutTask.state': state.value, +// 'bigStorageCageOutTask.temperingFeedSequence': temperingFeedSequence.value, +// 'bigStorageCageOutTask.temperingLayoutId': temperingLayoutId.value, +// 'bigStorageCageOutTask.thickness': thickness.value, +// 'bigStorageCageOutTask.width': width.value, +// }); +// if (response.code == 200) { +// // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫 +// ElMessage.success(response.message); +// add.value = false; +// tableData.value = response.data; +// } else { +// // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭� +// ElMessage.error(response.msg); +// } +// } catch (error) { +// // 澶勭悊閿欒 +// console.error(error); +// } +// }; // 鏄惁绂佺敤 const toggleEnableState = async (row) => { const newState = row.enableState === 1 ? 0 : 1; @@ -233,26 +283,24 @@ // ]); // 鍒犻櫎 const opena = async(row) => { - try { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鍒犻櫎璇ユ潯淇℃伅?', - '鎻愮ず', + t('searchOrder.deletemessage'), + t('searchOrder.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('searchOrder.yes'), + cancelButtonText: t('searchOrder.cancel'), type: 'warning', - } - ); + } + ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 - const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/deleteBigStorageCageDetails", { - menuId: row.id, - }) + const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/deleteBigStorageCageDetails",row) if (response.code === 200) { ElMessage.success(response.message); } else { // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛 - ElMessage.error(response.msg); + ElMessage.error(response.message); // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); } } @@ -261,6 +309,229 @@ console.error('鍙戠敓閿欒:', 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 dataToSend = { + // ...row, + // status: 0 + // }; + // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 + const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+0, row) + if (response.code === 200) { + ElMessage.success(response.message); + } else { + // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛 + ElMessage.error(response.message); + // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); + } + } + } catch (error) { + // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 + console.error('鍙戠敓閿欒:', error); + } +}; + // 鎷胯蛋 + 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 dataToSend = { + // ...row, + // status: 1 + // }; + // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 + const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+1, row) + if (response.code === 200) { + ElMessage.success(response.message); + } else { + // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛 + ElMessage.error(response.message); + // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); + } + } + } catch (error) { + // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 + console.error('鍙戠敓閿欒:', 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); + // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); + } + } + } catch (error) { + // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 + console.error('鍙戠敓閿欒:', 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 dataToSend = { + // ...row, + // status: 0 + // }; + const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+0, row) + if (response.code === 200) { + ElMessage.success(response.message); + } else { + // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛 + ElMessage.error(response.message); + // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); + } + } + } catch (error) { + // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 + console.error('鍙戠敓閿欒:', 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 dataToSend = { + // ...row, + // status: 1 + // }; + const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+1, row) + if (response.code === 200) { + ElMessage.success(response.message); + } else { + // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛 + ElMessage.error(response.message); + // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); + } + } + } catch (error) { + // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 + console.error('鍙戠敓閿欒:', 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); + // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); + } + } + } catch (error) { + // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 + console.error('鍙戠敓閿欒:', 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 dataToSend = { + // ...row, + // status: 1 + // }; + const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/finishBigStorageCageDetails", row) + if (response.code === 200) { + ElMessage.success(response.message); + } else { + // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛 + ElMessage.error(response.message); + // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); + } + } + } catch (error) { + // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 + console.error('鍙戠敓閿欒:', error); + } +}; +function handleRowClick(row) { + selectedRow.value = row; // 鏇存柊閫変腑鐨勮鏁版嵁 +} const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`; // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺 @@ -271,15 +542,20 @@ tableData.value = data.bigStorageCageInfo[0] tableDatab.value = data.temperingGlassInfoList[0] tableDatae.value = data.bigStorageCageUsage[0] - adjustedRects.value = data.bigStorageCageInfo1[0] - // adjustedRects.value = data.bigStorageCageInfo1[0].map(rect => ({ - // ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬� - // height: rect.length *0.5, - - // })); - window.localStorage.setItem('length', data.bigStorageCageInfo1[0].length) - let length = window.localStorage.getItem('length') - console.log(length); + // adjustedRects.value = data.bigStorageCageInfo1[0] + adjustedRects.value = data.bigStorageCageInfo1[0].map(rect => ({ + ...rect, + // width: rect.remainWidth *0.04, + top: rect.id *2, + })); +console.log(data.bigStorageCageInfo1[0]); +adjustedRectsa.value = data.bigStorageCageInfo2[0].map(rect => ({ + ...rect, + // width: rect.remainWidth *0.04, + top: rect.id *2, + })); + // window.localStorage.setItem('length', data.bigStorageCageInfo1[0].length) + // let length = window.localStorage.getItem('length') }; // function getRectHeight(length: number) { @@ -302,9 +578,9 @@ function getStatusText(enableState: number) { switch (enableState) { case 0: - return '绂佺敤'; + return t('searchOrder.disable'); case 1: - return '鍚敤'; + return t('searchOrder.enable'); } } function getStatusTypea(ishorizontal: number) { @@ -318,9 +594,9 @@ function getStatusTexta(ishorizontal: number) { switch (ishorizontal) { case 0: - return '涓嶆帴鍙�'; + return t('searchOrder.noaccept'); case 1: - return '鎺ュ彈'; + return t('searchOrder.accept'); } } function getStatusTypeb(state: number) { @@ -334,11 +610,11 @@ function getStatusTextb(state: number) { switch (state) { case 0: - return '鍑虹墖瀹屾垚'; + return t('searchOrder.filmcomplete'); case 1: - return '绛夊緟涓�'; + return t('searchOrder.waiting'); case 2: - return '绛夊緟涓�'; + return t('searchOrder.waiting'); } } onBeforeUnmount(() => { @@ -348,26 +624,39 @@ </script> <template> - <div style="height: 700px;"> - <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true">鐞嗙墖绗间俊鎭�</el-button> - <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="success" @click="dialogFormVisibleb = true">鍑虹墖闃熷垪</el-button> + <div style="height: 600px;"> + <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true">{{ $t('searchOrder.cageinformation') }}</el-button> + <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="success" @click="dialogFormVisibleb = true">{{ $t('searchOrder.productionqueue') }}</el-button> <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;"> <el-table height="100%" ref="table" :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="bigStorageCageOutTask.glassId" align="center" label="鍑虹墖鐜荤拑ID" min-width="80" /> - <el-table-column prop="bigStorageCageOutTask.startSlot" align="center" label="璧峰浣嶇疆" min-width="120" /> - <el-table-column prop="bigStorageCageOutTask.endSlot" align="center" label="鐩爣浣嶇疆" min-width="120" /> - <el-table-column prop="bigStorageCageOutTask.trainNumber" align="center" label="杞︽" min-width="120" /> - <el-table-column prop="bigStorageCageOutTask.serialNumber" align="center" label="搴忓彿" min-width="120" /> - <el-table-column prop="bigStorageCageOutTask.taskState" align="center" label="浠诲姟鐘舵��" min-width="157"> - <template #default="scope"> - <el-tag type="success" >{{ scope.row.bigStorageCageOutTask.taskState==0?"绛夊緟杩涚墖":"杩涜涓�" }}</el-tag> + <el-table-column prop="bigStorageCageOutTask.glassId" align="center" :label="$t('searchOrder.outputglassID')" min-width="100" /> + <el-table-column prop="bigStorageCageOutTask.startSlot" align="center" :label="$t('searchOrder.startposition')" min-width="120" /> + <el-table-column prop="bigStorageCageOutTask.endSlot" align="center" :label="$t('searchOrder.targetlocation')" min-width="120" /> + <el-table-column prop="bigStorageCageOutTask.trainNumber" align="center" :label="$t('searchOrder.trips')" min-width="120" /> + <el-table-column prop="bigStorageCageOutTask.serialNumber" align="center" :label="$t('searchOrder.number')" min-width="120" /> + <el-table-column prop="bigStorageCageOutTask.taskState" align="center" :label="$t('searchOrder.taskstatus')" min-width="157"> + <template #default="scope"> + <el-tag type="success" >{{ scope.row.bigStorageCageOutTask.taskState==0? $t('searchOrder.filmenter') : $t('searchOrder.infilm') }}</el-tag> </template> </el-table-column> - <el-table-column fixed="right" label="缁撴潫浠诲姟" align="center" width="150"> + <el-table-column prop="id" align="center" :label="$t('searchOrder.tabid')" min-width="150"/> + <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="100"/> + <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="100"/> + <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="100"/> + <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="150"/> + <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="100"/> + <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="100"/> + <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="100"/> + <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="100"/> + <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="100"/> + <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 prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="100"/> + <el-table-column fixed="right" :label="$t('searchOrder.endtask')" align="center" width="150"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">瀹屾垚浠诲姟</el-button> + <el-button size="mini" type="text" plain @click="finish(scope.row)">{{ $t('searchOrder.completetask') }}</el-button> </template> </el-table-column> </el-table> @@ -378,18 +667,31 @@ <el-table height="100%" ref="table" @selection-change="handleSelectionChange" :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="bigStorageCageFeedTask.glassId" align="center" label="杩涚墖鐜荤拑ID" min-width="80" /> - <el-table-column prop="bigStorageCageFeedTask.targetSlot" align="center" label="鐩爣浣嶇疆" min-width="120" /> + <el-table-column prop="bigStorageCageFeedTask.glassId" align="center" :label="$t('searchOrder.intoglassid')" min-width="100" /> + <el-table-column prop="bigStorageCageFeedTask.targetSlot" align="center" :label="$t('searchOrder.targetlocation')" min-width="120" /> <!-- <el-table-column prop="task_type" align="center" label="浠诲姟绫诲瀷" min-width="120" />娌℃湁杩斿洖瀛楁 --> - <el-table-column prop="bigStorageCageFeedTask.taskState" align="center" label="浠诲姟鐘舵��" min-width="120"> + <el-table-column prop="bigStorageCageFeedTask.taskState" align="center" :label="$t('searchOrder.taskstatus')" min-width="120"> <template #default="scope"> - <el-tag type="success" >{{ scope.row.bigStorageCageFeedTask.taskState==0?"绛夊緟杩涚墖":"杩涜涓�" }}</el-tag> + <el-tag type="success" >{{ scope.row.bigStorageCageFeedTask.taskState==0? $t('searchOrder.filmenter') : $t('searchOrder.infilm') }}</el-tag> </template> </el-table-column> - <el-table-column prop="bigStorageCageFeedTask.line" align="center" label="绾胯矾" min-width="120" /> - <el-table-column fixed="right" label="缁撴潫浠诲姟" align="center" width="150"> + <el-table-column prop="bigStorageCageFeedTask.line" align="center" :label="$t('searchOrder.line')" min-width="120" /> + <el-table-column prop="id" align="center" :label="$t('searchOrder.tabid')" min-width="150"/> + <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="100"/> + <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="100"/> + <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="100"/> + <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="150"/> + <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="100"/> + <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="100"/> + <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="100"/> + <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="100"/> + <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="100"/> + <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 prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="100"/> + <el-table-column fixed="right" :label="$t('searchOrder.endtask')" align="center" width="150"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">瀹屾垚浠诲姟</el-button> + <el-button size="mini" type="text" plain @click="finish(scope.row)">{{ $t('searchOrder.completetask') }}</el-button> </template> </el-table-column> </el-table> @@ -399,11 +701,11 @@ <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>浣跨敤鐜�</span><span>{{ item.percentage }}</span> + <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>绌洪棽锛堟牸瀛愭暟锛�</span><span>{{ item.count }}</span> + <span>{{ $t('searchOrder.free') }}</span><span>{{ item.count }}</span> </el-col> </div> </div> @@ -425,33 +727,39 @@ <div class="img-car4" :style="'z-index:999;left:704px;top:' + carposition4 + 'px;position:absolute;'"> <div v-show="cellshow4" style="margin-top:10px;width:200px;height:5px;background-color:#409EFF;"></div> </div> - <div v-show="cell1" style="width: 227px;height: 29px;position: absolute;top:55px;left: 465px;"> + <div v-show="cell1" style="width: 227px;position: relative;height: 29px;top:55px;left: 465px;background-color: #911005;"> <div - v-for="(item, index) in adjustedRects" - :key="index" + v-for="(rect, index) in adjustedRects" + :key="rect" :style="{ - top: `1px`, width: `227px`, - backgroundColor: '#409EFF', - height: `height`+ `px` + position: 'absolute', + width: '227px', + height: '0.8px', + backgroundColor: '#409EFF', + left: '0px', + top: `${rect.top}px`, }" > + </div> - <!-- <div - v-for="(item, index) in adjustedRects" - height: `${rect.height}px`, - :key="index" - :style="{ - width: '227px', - height: '1px', - backgroundColor: '#409EFF', - top: '1px' - }" - > - </div> --> </div> - <!-- <div v-show="cell2" style="width: 227px;height: 29px;position: absolute;top:86px;left: 465px;background-color: #409EFF;"> + <div v-show="cell2" style="width: 227px;height: 29px;position: relative;top:86px;left: 465px;background-color: #911005;"> + <div + v-for="(rect, index) in adjustedRectsa" + :key="rect" + :style="{ + position: 'absolute', + width: '227px', + height: '0.8px', + backgroundColor: '#409EFF', + left: '0px', + top: `${rect.top}px`, + }" + > + </div> - <div v-show="cell3" style="width: 227px;height: 29px;position: absolute;top:117px;left: 465px;background-color: #409EFF;"> + </div> + <!-- <div v-show="cell3" style="width: 227px;height: 29px;position: absolute;top:117px;left: 465px;background-color: #409EFF;"> </div> <div v-show="cell4" style="width: 227px;height: 29px;position: absolute;top:148px;left: 465px;background-color: #409EFF;"> </div> @@ -465,24 +773,33 @@ </div> --> </div> </div> - <el-dialog v-model="add" top="20vh" width="60%" title="娣诲姞鐞嗙墖绗间俊鎭�" > + <el-dialog v-model="add" top="10vh" width="65%" :title="$t('searchOrder.addcage')" > + <div style="margin-top: -20px;margin-bottom: 40px;margin-left: 30px"> + <el-input :placeholder="$t('searchOrder.inputid')" clearable style="width: 200px;"> + </el-input> + <el-button type="primary" plain style="margin-left: 10px;">{{ $t('searchOrder.search') }}</el-button> + + <!-- <span style="margin-right: 10px">绂佺敤璇�</span> + <el-input clearable placeholder="璇疯緭鍏ョ鐢ㄨ瘝" size="mini" + style="margin-right: 50px; width: 200px;" /> --> + </div> <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> - <el-form size="mini" label-width="150px"> - <el-form label-width="150px" label-position="right"> + <el-form size="mini" label-width="180px"> + <el-form label-width="180px" 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="鐜荤拑ID锛�" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ョ幓鐠僆D" v-model="glassId" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.glassIDa')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.inglassID')" v-model="glassId" 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="灏忕墖鍦ㄦ牸鍐呯殑椤哄簭锛�" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ュ皬鐗囧湪鏍煎唴鐨勯『搴�" v-model="sequence" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.pieceingrida')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.inpieceingrid')" v-model="sequence" autocomplete="off" /> </el-form-item></div> </div> </el-col> @@ -491,15 +808,15 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="娴佺▼鍗″彿锛�" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ユ祦绋嬪崱鍙�" v-model="flowCardId" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.cardnumbera')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.incardnumber')" v-model="flowCardId" 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="鐜荤拑绫诲瀷锛�" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ョ幓鐠冪被鍨�" v-model="glassType" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.typeglassa')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.intypeglass')" v-model="glassType" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -507,15 +824,15 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="瀹斤細" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ュ" v-model="width" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.widtha')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.inwidth')" v-model="width" 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="楂橈細" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ラ珮" v-model="height" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.heighta')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.inheight')" v-model="height" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -523,15 +840,15 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鍘氬害锛�" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ュ帤搴�" v-model="thickness" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.thicknessa')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.inthickness')" v-model="thickness" 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="閽㈠寲鐗堝浘ID锛�" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ラ挗鍖栫増鍥綢D" v-model="temperingLayoutId" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.layoutIDa')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.inlayoutID')" v-model="temperingLayoutId" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -539,15 +856,15 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="閽㈠寲鐗堝浘鐗囧簭锛�" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ラ挗鍖栫増鍥剧墖搴�" v-model="temperingFeedSequence" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.picturesequencea')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.inpicturesequence')" v-model="temperingFeedSequence" 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="鍚敤鐘舵�侊細" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ュ惎鐢ㄧ姸鎬�" v-model="state" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.startstatusa')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.instartstatus')" v-model="state" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -555,8 +872,15 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鐜荤拑闂撮殭锛�" :required="true" style="width: 20vw;"> - <el-input placeholder="璇疯緭鍏ョ幓鐠冮棿闅�" v-model="gap" autocomplete="off" /> + <el-form-item :label="$t('searchOrder.glassgapsa')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.inglassgaps')" v-model="gap" 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('searchOrder.gridnumbera')" :required="true" style="width: 24vw;"> + <el-input :placeholder="$t('searchOrder.grid')" v-model="state" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -566,16 +890,17 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleConfirm"> - 纭 + {{ $t('searchOrder.sure') }} </el-button> - <el-button @click="add = false">鍙栨秷</el-button> + <el-button @click="add = false">{{ $t('searchOrder.cancel') }}</el-button> </div> </template> </el-dialog> -<el-dialog v-model="dialogFormVisiblea" top="5vh" width="90%" title="鐞嗙墖绗间俊鎭�" > +<el-dialog v-model="dialogFormVisiblea" top="5vh" width="97%" :title="$t('searchOrder.cageinformation')"> <el-table :data="tableData" - height="600" + @row-click="handleRowClick" + height="500" @expand-change="handleExpandChange" row-key="id" default-expand-all @@ -592,18 +917,18 @@ :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="鐜荤拑ID" align="center" min-width="100"/> - <el-table-column prop="sequence" align="center" label="灏忕墖鍦ㄦ牸鍐呯殑椤哄簭" min-width="120" /> - <el-table-column prop="flowCardId" align="center" label="娴佺▼鍗″彿" min-width="120" /> - <el-table-column prop="glassType" align="center" label="鐜荤拑绫诲瀷" min-width="100" /> - <el-table-column prop="width" align="center" label="瀹�" min-width="80" /> - <el-table-column prop="height" align="center" label="楂�" min-width="80" /> - <el-table-column prop="thickness" align="center" label="鍘氬害" min-width="80" /> - <el-table-column prop="temperingLayoutId" align="center" label="閽㈠寲鐗堝浘ID" min-width="100" /> - <el-table-column prop="temperingFeedSequence" align="center" label="閽㈠寲鐗堝浘鐗囧簭" min-width="120" /> + <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="80"/> + <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="100" /> + <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="120" /> + <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="鍚敤鐘舵��" + :label="$t('searchOrder.startstatus')" min-width="80" prop="state" > @@ -613,24 +938,25 @@ </el-tag> </template> </el-table-column> - <el-table-column prop="gap" align="center" label="鐜荤拑闂撮殭" min-width="80" /> - <el-table-column fixed="right" label="鎿嶄綔" align="center" min-width="180"> + <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 size="mini" type="text" plain @click="handleEdit(scope.row)">鐮存崯</el-button> - <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button> - <el-button size="mini" type="text" plain @click="opena(scope.row)">鍑虹墖</el-button> + <el-button size="mini" type="text" plain @click="broke(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> + <el-button size="mini" type="text" plain @click="brokec(scope.row)">{{ $t('searchOrder.takeout') }}</el-button> + <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('searchOrder.delete') }}</el-button> + <el-button size="mini" type="text" 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="澶х悊鐗囩琛↖D" align="center" min-width="100"/> - <el-table-column prop="deviceId" align="center" label="鐞嗙墖绗煎彿" min-width="150" /> - <el-table-column prop="slot" align="center" label="鏍呮牸鍙�" min-width="150" /> + <el-table-column prop="id" :label="$t('searchOrder.cagetableID')" align="center" min-width="100"/> + <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.cagenumber')" min-width="150" /> + <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="150" /> <el-table-column align="center" - label="鍚敤鐘舵��" + :label="$t('searchOrder.startstatus')" min-width="80" prop="enableState" > @@ -639,15 +965,15 @@ :type="scope.row.enableState === 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)" > - {{ scope.row.enableState === 1 ? '鍚敤' : '绂佺敤' }} + {{ scope.row.enableState === 1 ? $t('searchOrder.enable') : $t('searchOrder.disable')}} </el-tag> </template> </el-table-column> - <el-table-column prop="remainWidth" align="center" label="鍓╀綑瀹藉害" min-width="120" /> + <el-table-column prop="remainWidth" align="center" :label="$t('searchOrder.remainingwidth')" min-width="120" /> - <el-table-column fixed="right" label="鎿嶄綔" align="center"> + <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">娣诲姞</el-button> + <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{ $t('searchOrder.add') }}</el-button> </template> </el-table-column> </el-table> @@ -667,7 +993,7 @@ /> </div> </el-dialog> -<el-dialog v-model="dialogFormVisibleb" top="10vh" width="85%" title="鍑虹墖闃熷垪" > +<el-dialog v-model="dialogFormVisibleb" top="5vh" width="85%" :title="$t('searchOrder.productionqueue')"> <!-- <div style="display: flex;"> <p style="margin-top: 3px;">闃熷垪鐘舵�侊細</p> <p style="margin-top: 3px;">寮�濮�</p> @@ -676,16 +1002,16 @@ </div> --> <el-table ref="table" style="margin-top: 20px;height: 500px;" :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="id" fixed align="center" label="閽㈠寲灏忕墖淇℃伅琛╥d" min-width="150"/> - <el-table-column prop="flowcardId" fixed align="center" label="娴佺▼鍗�" min-width="120" /> - <el-table-column prop="glassType" align="center" label="娴佺▼鍗$幓鐠冪被鍨�" min-width="150" /> - <el-table-column prop="width" align="center" label="瀹�" min-width="80" /> - <el-table-column prop="height" align="center" label="楂�" min-width="80" /> - <el-table-column prop="thickness" align="center" label="鍘氬害" min-width="80" /> - <el-table-column prop="filmsid" align="center" label="鑶滅郴" min-width="80" /> + <el-table-column prop="id" fixed align="center" :label="$t('searchOrder.sheetID')" min-width="150"/> + <el-table-column prop="flowcardId" fixed align="center" :label="$t('searchOrder.processcards')" min-width="120" /> + <el-table-column prop="glassType" align="center" :label="$t('searchOrder.processcardtype')" min-width="150" /> + <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="閽㈠寲鏄惁鎺ュ彈妯斁" + :label="$t('searchOrder.acceptshorizontal')" min-width="150" prop="ishorizontal" > @@ -695,14 +1021,14 @@ </el-tag> </template> </el-table-column> - <el-table-column prop="temperingLayoutId" align="center" label="閽㈠寲鐗堝浘id" min-width="120" /> - <el-table-column prop="temperingFeedSequence" align="center" label="閽㈠寲鐗堝浘鐗囧簭" min-width="120" /> - <el-table-column prop="xCoordinate" align="center" label="x鍧愭爣" min-width="80" /> - <el-table-column prop="yCoordinate" align="center" label="y鍧愭爣" min-width="80" /> - <el-table-column prop="angle" align="center" label="鏃嬭浆瑙掑害锛堥�嗘椂閽堬級" min-width="150" /> + <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="120" /> + <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120" /> + <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-column prop="angle" align="center" :label="$t('searchOrder.rotationangle')" min-width="150" /> <el-table-column align="center" - label="鐘舵��" + :label="$t('searchOrder.state')" min-width="80" prop="state" > @@ -712,10 +1038,11 @@ </el-tag> </template> </el-table-column> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="150"> + <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">鐮存崯</el-button> - <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">鍒犻櫎</el-button> + <el-button size="mini" type="text" plain @click="brokea(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> + <el-button size="mini" type="text" plain @click="brokeb(scope.row)">{{ $t('searchOrder.takeout') }}</el-button> + <el-button size="mini" type="text" plain @click="deletea(scope.row)">{{ $t('searchOrder.delete') }}</el-button> </template> </el-table-column> </el-table> @@ -822,7 +1149,7 @@ } .img-dlpl{ - margin-left: 200px; + margin-left: 80px; background-image:url('../../assets/dlpl.png'); background-repeat: no-repeat; background-attachment: local; diff --git a/UI-Project/src/views/StockBasicData/stockBasicData.vue b/UI-Project/src/views/StockBasicData/stockBasicData.vue index 01b0ddb..d20f65a 100644 --- a/UI-Project/src/views/StockBasicData/stockBasicData.vue +++ b/UI-Project/src/views/StockBasicData/stockBasicData.vue @@ -11,6 +11,9 @@ // import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' // import LanguageMixin from './lang/LanguageMixin' + import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') const tableData = ref([]) const slot = ref('') @@ -32,17 +35,17 @@ } }); // 鐮存崯 - const open = async(row) => { - try { + const open = async(row) => { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鐮存崯璇ユ潯淇℃伅?', - '鎻愮ず', + t('workOrder.messagedamaged'), + t('workOrder.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('workOrder.yes'), + cancelButtonText: t('workOrder.cancel'), type: 'warning', - } - ); + } + ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", { @@ -64,16 +67,16 @@ }; // 鎷胯蛋 const opena = async(row) => { - try { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鎷胯蛋璇ユ潯淇℃伅?', - '鎻愮ず', + t('workOrder.takemessage'), + t('workOrder.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('workOrder.yes'), + cancelButtonText: t('workOrder.cancel'), type: 'warning', - } - ); + } + ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", { @@ -120,17 +123,17 @@ <el-table height="240" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="GlassId" align="center" label="鐜荤拑id" min-width="180" /> - <el-table-column prop="Height" align="center" label="楂�" min-width="80" /> - <el-table-column prop="Width" align="center" label="瀹�" min-width="120" /> - <el-table-column prop="Thickness" align="center" label="鍘氬害" min-width="120" /> - <el-table-column prop="FilmsId" align="center" label="鑶滅郴" min-width="120" /> - <el-table-column prop="SerialNumber" align="center" label="鍑虹墖椤哄簭" min-width="120" /> - <el-table-column prop="FlowCardId" align="center" label="娴佺▼鍗″彿" min-width="120" /> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200"> + <el-table-column prop="GlassId" align="center" :label="$t('workOrder.glassID')" min-width="180" /> + <el-table-column prop="Height" align="center" :label="$t('workOrder.height')" min-width="80" /> + <el-table-column prop="Width" align="center" :label="$t('workOrder.width')" min-width="120" /> + <el-table-column prop="Thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" /> + <el-table-column prop="FilmsId" align="center" :label="$t('workOrder.coatingtypes')" min-width="120" /> + <el-table-column prop="SerialNumber" align="center" :label="$t('workOrder.productionsequence')" min-width="120" /> + <el-table-column prop="FlowCardId" align="center" :label="$t('workOrder.cardnumber')" min-width="120" /> + <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="open(scope.row)">鐮存崯</el-button> - <el-button size="mini" type="text" plain @click="opena(scope.row)">鎷胯蛋</el-button> + <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }}</el-button> + <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('workOrder.takeout') }}</el-button> </template> </el-table-column> </el-table> diff --git a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue index 6d4df18..583b2ba 100644 --- a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue +++ b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue @@ -11,6 +11,9 @@ // import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' // import LanguageMixin from './lang/LanguageMixin' + import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') const tableData = ref([]) const slot = ref('') @@ -33,16 +36,16 @@ }); // 鐮存崯 const open = async(row) => { - try { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鐮存崯璇ユ潯淇℃伅?', - '鎻愮ず', + t('workOrder.messagedamaged'), + t('workOrder.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('workOrder.yes'), + cancelButtonText: t('workOrder.cancel'), type: 'warning', - } - ); + } + ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", { @@ -64,16 +67,16 @@ }; // 鎷胯蛋 const opena = async(row) => { - try { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鎷胯蛋璇ユ潯淇℃伅?', - '鎻愮ず', + t('workOrder.takemessage'), + t('workOrder.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('workOrder.yes'), + cancelButtonText: t('workOrder.cancel'), type: 'warning', - } - ); + } + ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", { @@ -121,17 +124,17 @@ <el-table height="240" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="GlassId" align="center" label="鐜荤拑id" min-width="180" /> - <el-table-column prop="Height" align="center" label="楂�" min-width="80" /> - <el-table-column prop="Width" align="center" label="瀹�" min-width="120" /> - <el-table-column prop="Thickness" align="center" label="鍘氬害" min-width="120" /> - <el-table-column prop="FilmsId" align="center" label="鑶滅郴" min-width="120" /> - <el-table-column prop="SerialNumber" align="center" label="鍑虹墖椤哄簭" min-width="120" /> - <el-table-column prop="FlowCardId" align="center" label="娴佺▼鍗″彿" min-width="120" /> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200"> + <el-table-column prop="GlassId" align="center" :label="$t('workOrder.glassID')" min-width="180" /> + <el-table-column prop="Height" align="center" :label="$t('workOrder.height')" min-width="80" /> + <el-table-column prop="Width" align="center" :label="$t('workOrder.width')" min-width="120" /> + <el-table-column prop="Thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" /> + <el-table-column prop="FilmsId" align="center" :label="$t('workOrder.coatingtypes')" min-width="120" /> + <el-table-column prop="SerialNumber" align="center" :label="$t('workOrder.productionsequence')" min-width="120" /> + <el-table-column prop="FlowCardId" align="center" :label="$t('workOrder.cardnumber')" min-width="120" /> + <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="open(scope.row)">鐮存崯</el-button> - <el-button size="mini" type="text" plain @click="opena(scope.row)">鎷胯蛋</el-button> + <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }}</el-button> + <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('workOrder.takeout') }}</el-button> </template> </el-table-column> </el-table> diff --git a/UI-Project/src/views/UnLoadGlass/Landingindication.vue b/UI-Project/src/views/UnLoadGlass/Landingindication.vue index ffec81d..41a6a45 100644 --- a/UI-Project/src/views/UnLoadGlass/Landingindication.vue +++ b/UI-Project/src/views/UnLoadGlass/Landingindication.vue @@ -22,7 +22,7 @@ :height="rack.item.height" :fill="rack.item.fillColor" /> - <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 1 }}鍙峰伐浣�</text> + <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 1 }}{{ $t('reportWork.workstation') }}</text> <text :x="rack.x + rack.width / 2" :y="rack.y + rack.height + 20" text-anchor="middle">{{ rack.item.content }}</text> </g> </g> @@ -34,6 +34,9 @@ <script setup> import { ref, watchEffect ,onMounted} from 'vue'; +import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') import Swal from 'sweetalert2' import request from "@/utils/request"; import { initializeWebSocket } from '@/utils/WebSocketService'; @@ -167,7 +170,8 @@ tableContent += '</table>'; Swal.fire({ - title: '鐜荤拑淇℃伅', + // title: '鐜荤拑淇℃伅', + title: "$t('reportWork.glassinformation')", html: tableContent, customClass: { popup: 'format-pre' @@ -196,7 +200,7 @@ .glass-rack { margin-left: 20px; width: 500px; - margin-top: 10px; + margin-top: 5px; } .rack-rect:hover { cursor: pointer; diff --git a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue index 4fc077c..c7fa71e 100644 --- a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue +++ b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue @@ -22,7 +22,7 @@ :height="rack.item.height" :fill="rack.item.fillColor" /> - <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 4 }}鍙峰伐浣�</text> + <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 4 }}{{ $t('reportWork.workstation') }}</text> <text :x="rack.x + rack.width / 2" :y="rack.y + rack.height + 20" text-anchor="middle">{{ rack.item.content }}</text> </g> </g> @@ -34,6 +34,9 @@ <script setup> import { ref, watchEffect ,onMounted} from 'vue'; +import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') import Swal from 'sweetalert2' import request from "@/utils/request"; import { initializeWebSocket } from '@/utils/WebSocketService'; @@ -164,7 +167,8 @@ tableContent += '</table>'; Swal.fire({ - title: '鐜荤拑淇℃伅', + title: "$t('reportWork.glassinformation')", + // title: '鐜荤拑淇℃伅', html: tableContent, customClass: { popup: 'format-pre' diff --git a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue index e1ea82d..b41ed1c 100644 --- a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue +++ b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue @@ -5,6 +5,9 @@ import {useRouter} from "vue-router" const router = useRouter() +import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import Landingindication from "./Landingindication.vue"; @@ -187,30 +190,27 @@ <el-table height="100%" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="workstationId" align="center" label="涓嬬墖浣�" min-width="80" /> - <el-table-column prop="workstationId" align="center" label="鏋跺彿" min-width="120" /> - <el-table-column prop="flowCardId" align="center" label="娴佺▼鍗″彿" min-width="120" /> - <el-table-column prop="totalquantity" align="center" label="鎬绘暟閲�" min-width="120" /> - <el-table-column prop="racksnumber" align="center" label="宸茶惤鏋舵暟閲�" min-width="120" /> - <el-table-column prop="work_state" align="center" label="鐘舵��" min-width="120" /> - <el-table-column prop="deviceId" align="center" label="璁惧鍙�" min-width="120" /> - - - + <el-table-column prop="workstationId" align="center" :label="$t('reportWork.lowerbit')" min-width="80" /> + <el-table-column prop="workstationId" align="center" :label="$t('reportWork.shelfnumber')" min-width="120" /> + <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="120" /> + <el-table-column prop="totalquantity" align="center" :label="$t('reportWork.totalquantity')" min-width="120" /> + <el-table-column prop="racksnumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" /> + <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" /> + <el-table-column prop="deviceId" align="center" :label="$t('reportWork.devicenumber')" min-width="120" /> <el-table-column align="center" - label="鍚敤鐘舵��" + :label="$t('reportWork.startstatus')" min-width="80" prop="enableState" > <template #default="scope"> - <el-tag type="success" >{{ scope.row.enableState==1?"鍚敤":"鏈惎鐢�" }}</el-tag> + <el-tag type="success" >{{ scope.row.enableState==1? $t('reportWork.enable') : $t('reportWork.unenable')}}</el-tag> </template> </el-table-column> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200"> + <el-table-column fixed="right" :label="$t('reportWork.operate')" align="center" width="200"> <template #default="scope"> - <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '宸插惎鐢�' " @click="handleBindRack(scope.row)">缁戝畾鏋跺瓙</el-button> - <el-button size="mini" type="text" plain @click="handleBindRack2(scope.row)">娓呯┖</el-button> + <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '宸插惎鐢�' " @click="handleBindRack(scope.row)">{{ $t('reportWork.bindingshelves') }}</el-button> + <el-button size="mini" type="text" plain @click="handleBindRack2(scope.row)">{{ $t('reportWork.clear') }}</el-button> </template> </el-table-column> </el-table> @@ -218,15 +218,15 @@ </el-card> - <el-dialog v-model="dialogFormVisiblea" top="21vh" width="30%" title="缁戝畾鏋跺瓙" > + <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')"> <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;"> - <el-form size="mini" label-width="150px"> - <el-form label-width="100px" label-position="right"> - <el-form-item label="鏋跺彿锛�" :required="true" style="width: 18vw"> + <el-form size="mini" label-width="100px"> + <el-form label-width="210px" label-position="right"> + <el-form-item :label="$t('reportWork.shelfnumbera')" :required="true" style="width: 25vw"> <el-input v-model="workstationId" autocomplete="off"/> </el-form-item> - <el-form-item label="娴佺▼鍗″彿锛�" :required="false" style="width: 18vw;"> - <el-select v-model="flowCardId" placeholder="璇烽�夋嫨娴佺▼鍗″彿"> + <el-form-item :label="$t('reportWork.cardnumbera')" :required="true" style="width: 25vw;"> + <el-select v-model="flowCardId" :placeholder="$t('reportWork.incardnumber')"> <el-option v-for="item in flowCardOptions" :key="item.flowcard_id" :label="item.flowcard_id" :value="item.flowcard_id" /> </el-select> </el-form-item> @@ -236,9 +236,9 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleConfirm"> - 纭 + {{ $t('reportWork.sure') }} </el-button> - <el-button @click="dialogFormVisiblea = false">鍙栨秷</el-button> + <el-button @click="dialogFormVisiblea = false">{{ $t('reportWork.cancel') }}</el-button> </div> </template> </el-dialog> @@ -246,14 +246,14 @@ - <el-dialog v-model="dialogFormVisiblea2" top="21vh" width="30%" title="娓呴櫎鏋跺瓙鐜荤拑" > + <el-dialog v-model="dialogFormVisiblea2" top="21vh" width="30%" :title="$t('reportWork.clearglass')"> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleclear"> - 纭 + {{ $t('reportWork.sure') }} </el-button> - <el-button @click="dialogFormVisiblea2 = false">鍙栨秷</el-button> + <el-button @click="dialogFormVisiblea2 = false">{{ $t('reportWork.cancel') }}</el-button> </div> </template> </el-dialog> diff --git a/UI-Project/src/views/User/permissions.vue b/UI-Project/src/views/User/permissions.vue index 80cff3d..cdaab17 100644 --- a/UI-Project/src/views/User/permissions.vue +++ b/UI-Project/src/views/User/permissions.vue @@ -6,6 +6,9 @@ const add = ref(false) const adda = ref(false) +import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') const editingUser = ref({}); // 鐢ㄤ簬瀛樺偍褰撳墠缂栬緫鐨勭敤鎴锋暟鎹� import request from "@/utils/request" import { ref, onMounted } from "vue"; @@ -114,16 +117,16 @@ }; // 鍒犻櫎 const opena = async(row) => { - try { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鍒犻櫎璇ヨ彍鍗�?', - '鎻愮ず', + t('customer.demenu'), + t('customer.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('customer.yes'), + cancelButtonText: t('customer.cancel'), type: 'warning', - } - ); + } + ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 const response = await request.post("/loadGlass/sys/menu/deleteMenu", { @@ -143,54 +146,16 @@ } }; -// 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 style="height: 700px;"> - <el-button type="primary" style="margin-top: 10px;margin-left: 10px;" size="mini" id="searchButton" @click="add = true">娣诲姞鑿滃崟</el-button> + <div style="height: 600px;"> + <el-button type="primary" style="margin-top: 10px;margin-left: 10px;" size="mini" id="searchButton" @click="add = true">{{ $t('customer.addmenu') }}</el-button> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 650px;"> <el-table :data="tableData" - height="650" + height="550" @expand-change="handleExpandChange" row-key="id" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" @@ -205,33 +170,33 @@ 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="url" label="閾炬帴" align="center" min-width="160"/> - <el-table-column prop="id" align="center" label="鎺掑簭" min-width="140"/> - <el-table-column fixed="right" label="鎿嶄綔" align="center"> + <el-table-column prop="menuName" :label="$t('customer.semenu')" align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/> + <el-table-column prop="url" :label="$t('customer.link')" align="center" min-width="160"/> + <el-table-column prop="id" align="center" :label="$t('customer.sort')" min-width="140"/> + <el-table-column fixed="right" :label="$t('customer.operate')" align="center"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button> - <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button> + <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">{{ $t('customer.exit') }}</el-button> + <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('customer.delete') }}</el-button> </template> </el-table-column> </el-table> </div> </template> </el-table-column> - <el-table-column prop="menuName" label="涓�绾ц彍鍗曟爮" align="center" min-width="120" /> - <el-table-column prop="url" label="閾炬帴" align="center" min-width="200"/> - <el-table-column prop="id" align="center" label="鎺掑簭" min-width="180" /> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200"> + <el-table-column prop="menuName" :label="$t('customer.firstmenu')" align="center" min-width="120" /> + <el-table-column prop="url" :label="$t('customer.link')" align="center" min-width="200"/> + <el-table-column prop="id" align="center" :label="$t('customer.sort')" min-width="180" /> + <el-table-column fixed="right" :label="$t('customer.operate')" align="center" width="200"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button> - <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button> + <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">{{ $t('customer.exit') }}</el-button> + <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('customer.delete') }}</el-button> </template> </el-table-column> </el-table> </div> </el-card> </div> - <el-dialog v-model="add" top="23vh" width="37%" title="娣诲姞鑿滃崟" > + <el-dialog v-model="add" top="23vh" width="37%" :title="$t('customer.addmenu')"> <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="150px"> <el-form label-width="100px" label-position="right"> @@ -239,8 +204,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鑿滃崟鏍忥細" :required="true" style="width: 25vw"> - <el-input v-model="menuName" autocomplete="off" /> + <el-form-item :label="$t('customer.menu')" :required="true" style="width: 25vw"> + <el-input v-model="menuName" autocomplete="off" :placeholder="$t('customer.inmenu')"/> </el-form-item></div></div> </el-col> </el-row> @@ -248,8 +213,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="閾炬帴锛�" :required="true" style="width: 25vw"> - <el-input v-model="url" autocomplete="off" /> + <el-form-item :label="$t('customer.linka')" :required="true" style="width: 25vw"> + <el-input v-model="url" autocomplete="off" :placeholder="$t('customer.inlink')"/> </el-form-item></div></div> </el-col> </el-row> @@ -257,8 +222,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鎺掑簭锛�" :required="true" style="width: 25vw"> - <el-input v-model="parentId" autocomplete="off" /> + <el-form-item :label="$t('customer.sorta')" :required="true" style="width: 25vw"> + <el-input v-model="parentId" autocomplete="off" :placeholder="$t('customer.insort')"/> </el-form-item></div></div> </el-col> </el-row> @@ -268,13 +233,13 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="getTableRow"> - 纭 + {{ $t('customer.sure') }} </el-button> - <el-button @click="add = false">鍙栨秷</el-button> + <el-button @click="add = false">{{ $t('customer.cancel') }}</el-button> </div> </template> </el-dialog> - <el-dialog v-model="adda" top="23vh" width="37%" title="淇敼鑿滃崟" > + <el-dialog v-model="adda" top="23vh" width="37%" :title="$t('customer.exmene')"> <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px"> <el-form label-width="100px" label-position="right"> @@ -282,8 +247,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鑿滃崟鏍忥細" :required="true" style="width: 25vw"> - <el-input v-model="editingUser.menuName" autocomplete="off" /> + <el-form-item :label="$t('customer.menu')" :required="true" style="width: 25vw"> + <el-input v-model="editingUser.menuName" autocomplete="off" :placeholder="$t('customer.inmenu')"/> </el-form-item></div></div> </el-col> </el-row> @@ -291,8 +256,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="閾炬帴锛�" :required="true" style="width: 25vw"> - <el-input v-model="editingUser.url" autocomplete="off" /> + <el-form-item :label="$t('customer.linka')" :required="true" style="width: 25vw"> + <el-input v-model="editingUser.url" autocomplete="off" :placeholder="$t('customer.inlink')"/> </el-form-item></div></div> </el-col> </el-row> @@ -300,8 +265,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鎺掑簭锛�" :required="true" style="width: 25vw"> - <el-input v-model="editingUser.parentId" autocomplete="off" /> + <el-form-item :label="$t('customer.sorta')" :required="true" style="width: 25vw"> + <el-input v-model="editingUser.parentId" autocomplete="off" :placeholder="$t('customer.insort')"/> </el-form-item></div></div> </el-col> </el-row> @@ -311,9 +276,9 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="getTableRowa"> - 纭 + {{ $t('customer.sure') }} </el-button> - <el-button @click="adda = false">鍙栨秷</el-button> + <el-button @click="adda = false">{{ $t('customer.cancel') }}</el-button> </div> </template> </el-dialog> diff --git a/UI-Project/src/views/User/rolelist.vue b/UI-Project/src/views/User/rolelist.vue index abbe82c..8a92066 100644 --- a/UI-Project/src/views/User/rolelist.vue +++ b/UI-Project/src/views/User/rolelist.vue @@ -2,6 +2,9 @@ import {Search} from "@element-plus/icons-vue"; import {reactive} from "vue"; import {useRouter} from "vue-router" + import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') const router = useRouter() const add = ref(false) const adda = ref(false) @@ -103,16 +106,16 @@ }; // 鍒犻櫎 const opena = async(row) => { - try { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鍒犻櫎璇ヨ鑹�?', - '鎻愮ず', + t('delivery.derole'), + t('delivery.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('delivery.yes'), + cancelButtonText: t('delivery.cancel'), type: 'warning', - } - ); + } + ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 const response = await request.post("/loadGlass/sys/role/delete", { @@ -130,68 +133,29 @@ // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 console.error('鍙戠敓閿欒:', error); } -}; - -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;" size="mini" id="searchButton" @click="add = true">娣诲姞瑙掕壊</el-button> + <el-button type="primary" style="margin-top: 10px;margin-left: 10px;" size="mini" id="searchButton" @click="add = true">{{ $t('delivery.addrole') }}</el-button> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="240" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="name" align="center" label="瑙掕壊" min-width="180" /> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200"> + <el-table-column prop="name" align="center" :label="$t('delivery.role')" min-width="180" /> + <el-table-column fixed="right" :label="$t('delivery.operate')" align="center" width="200"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button> - <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button> + <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">{{ $t('delivery.edit') }}</el-button> + <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('delivery.delete') }}</el-button> </template> </el-table-column> </el-table> </div> </el-card> </div> - <el-dialog v-model="add" top="23vh" width="37%" title="娣诲姞瑙掕壊" > + <el-dialog v-model="add" top="23vh" width="37%" :title="$t('delivery.addrole')" > <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="150px"> <el-form label-width="100px" label-position="right"> @@ -199,8 +163,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw"> - <el-input placeholder="璇疯緭鍏ヨ鑹�" v-model="name" autocomplete="off" /> + <el-form-item :label="$t('delivery.rolea')" :required="true" style="width: 25vw"> + <el-input :placeholder="$t('delivery.inrole')" v-model="name" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -210,13 +174,13 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="getTableRow"> - 纭 + {{ $t('delivery.sure') }} </el-button> - <el-button @click="add = false">鍙栨秷</el-button> + <el-button @click="add = false"> {{ $t('delivery.cancel') }}</el-button> </div> </template> </el-dialog> - <el-dialog v-model="adda" top="23vh" width="37%" title="淇敼瑙掕壊" > + <el-dialog v-model="adda" top="23vh" width="37%" :title="$t('delivery.editrole')"> <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px"> <el-form label-width="100px" label-position="right"> @@ -224,8 +188,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw"> - <el-input placeholder="璇疯緭鍏ヨ鑹�" v-model="editingUser.name" autocomplete="off" /> + <el-form-item :label="$t('delivery.rolea')" :required="true" style="width: 25vw"> + <el-input :placeholder="$t('delivery.inrole')" v-model="editingUser.name" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -235,9 +199,9 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="getTableRowa"> - 纭 + {{ $t('delivery.sure') }} </el-button> - <el-button @click="adda = false">鍙栨秷</el-button> + <el-button @click="adda = false">{{ $t('delivery.cancel') }}</el-button> </div> </template> </el-dialog> diff --git a/UI-Project/src/views/User/userlist.vue b/UI-Project/src/views/User/userlist.vue index ecd91ed..da399b6 100644 --- a/UI-Project/src/views/User/userlist.vue +++ b/UI-Project/src/views/User/userlist.vue @@ -10,6 +10,9 @@ import { ref, onMounted } from "vue"; // import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' + import { useI18n } from 'vue-i18n' + const { t } = useI18n() + let language = ref(localStorage.getItem('lang') || 'zh') // import LanguageMixin from './lang/LanguageMixin' const selectedProjectNoa = ref(''); // 褰撳墠閫変腑鐨勮鑹� // const options = ref<any[]>([]); // 涓嬫媺閫夐」鍒楄〃 @@ -31,16 +34,16 @@ }); // 閲嶇疆瀵嗙爜 const open = async(row) => { - try { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁閲嶇疆鐢ㄦ埛瀵嗙爜?', - '鎻愮ず', + t('productStock.repassword'), + t('productStock.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('productStock.yes'), + cancelButtonText: t('productStock.cancel'), type: 'warning', - } - ); + } + ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 var url="/loadGlass/sys/user/resetPassword?userId="+row.id; @@ -148,16 +151,16 @@ }; // 鍒犻櫎 const opena = async(row) => { - try { + try { const confirmResult = await ElMessageBox.confirm( - '鏄惁鍒犻櫎璇ョ敤鎴�?', - '鎻愮ず', + t('productStock.deusername'), + t('productStock.prompt'), { - confirmButtonText: '鏄�', - cancelButtonText: '鍙栨秷', + confirmButtonText: t('productStock.yes'), + cancelButtonText: t('productStock.cancel'), type: 'warning', - } - ); + } + ); if (confirmResult === 'confirm') { // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛 const response = await request.post("/loadGlass/sys/user/deleteUser", { @@ -219,32 +222,32 @@ <template> <div> - <el-button type="primary" style="margin-top: 10px;margin-left: 10px;" size="mini" id="searchButton" @click="add = true">娣诲姞鐢ㄦ埛</el-button> + <el-button type="primary" style="margin-top: 10px;margin-left: 10px;" size="mini" id="searchButton" @click="add = true">{{ $t('productStock.addusers') }}</el-button> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="240" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> - <el-table-column prop="userName" align="center" label="鐢ㄦ埛鍚�" min-width="180" /> - <el-table-column align="center" label="瑙掕壊" min-width="80"> + <el-table-column prop="userName" align="center" :label="$t('productStock.username')" min-width="180" /> + <el-table-column align="center" :label="$t('productStock.role')" min-width="80"> <template #default="scope"> <el-tag v-for="role in scope.row.roleList"> {{role.name}} </el-tag> </template> </el-table-column> - <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200"> + <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270"> <template #default="scope"> - <el-button size="mini" type="text" plain @click="open(scope.row)">閲嶇疆瀵嗙爜</el-button> - <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button> - <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button> + <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('productStock.resetpassword') }}</el-button> + <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">{{ $t('productStock.exit') }}</el-button> + <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('productStock.delete') }}</el-button> </template> </el-table-column> </el-table> </div> </el-card> </div> - <el-dialog v-model="add" top="23vh" width="37%" title="娣诲姞鐢ㄦ埛" > + <el-dialog v-model="add" top="23vh" width="37%" :title="$t('productStock.addusers')"> <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="150px"> <el-form label-width="100px" label-position="right"> @@ -252,8 +255,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鐢ㄦ埛鍚嶏細" :required="true" style="width: 25vw"> - <el-input v-model="userName" autocomplete="off" /> + <el-form-item :label="$t('productStock.usernamea')" :required="true" style="width: 25vw"> + <el-input v-model="userName" autocomplete="off" :placeholder="$t('productStock.inusername')" /> </el-form-item></div></div> </el-col> </el-row> @@ -261,12 +264,12 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw;"> + <el-form-item :label="$t('productStock.rolea')" :required="true" style="width: 25vw;"> <el-select v-model="selectedProjectNoa" filterable clearable - placeholder="璇烽�夋嫨瑙掕壊" + :placeholder="$t('productStock.inrole')" style="width: 330px" > <el-option @@ -283,9 +286,10 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="瀵嗙爜锛�" :required="true" style="width: 25vw;"> + <el-form-item :label="$t('productStock.password')" :required="true" style="width: 25vw;"> <el-input style="width: 340px;" v-model="password" + :placeholder="$t('productStock.inpassword')" autocomplete="off" :prefix-icon="Lock" show-password/> @@ -298,13 +302,13 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="getTableRow"> - 纭 + {{ $t('productStock.sure') }} </el-button> - <el-button @click="add = false">鍙栨秷</el-button> + <el-button @click="add = false">{{ $t('productStock.cancel') }}</el-button> </div> </template> </el-dialog> - <el-dialog v-model="adda" top="23vh" width="37%" title="淇敼鐢ㄦ埛" > + <el-dialog v-model="adda" top="23vh" width="37%" :title="$t('productStock.reusername')" > <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px"> <el-form label-width="100px" label-position="right"> @@ -312,8 +316,8 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="鐢ㄦ埛鍚嶏細" :required="true" style="width: 25vw"> - <el-input v-model="editingUser.userName" autocomplete="off" /> + <el-form-item :label="$t('productStock.usernamea')" :required="true" style="width: 25vw"> + <el-input :placeholder="$t('productStock.inusername')" v-model="editingUser.userName" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -328,12 +332,12 @@ </el-tag> </template> </el-table-column> --> - <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw;"> + <el-form-item :label="$t('productStock.rolea')" :required="true" style="width: 25vw;"> <el-select v-model="selectedProjectNoa" filterable clearable - placeholder="璇烽�夋嫨瑙掕壊" + :placeholder="$t('productStock.inrole')" style="width: 330px" > <el-option @@ -350,9 +354,10 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> - <el-form-item label="瀵嗙爜锛�" :required="true" style="width: 25vw;"> + <el-form-item :label="$t('productStock.password')" :required="true" style="width: 25vw;"> <el-input style="width: 340px;" v-model="editingUser.password" + :placeholder="$t('productStock.inpassword')" autocomplete="off" :prefix-icon="Lock" show-password/> @@ -365,9 +370,9 @@ <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="getTableRowa"> - 纭 + {{ $t('productStock.sure') }} </el-button> - <el-button @click="adda = false">鍙栨秷</el-button> + <el-button @click="adda = false">{{ $t('productStock.cancel') }}</el-button> </div> </template> </el-dialog> diff --git a/UI-Project/vite.config.js b/UI-Project/vite.config.js index b93f5ee..8fdf859 100644 --- a/UI-Project/vite.config.js +++ b/UI-Project/vite.config.js @@ -1,17 +1,27 @@ import {fileURLToPath, URL} from 'node:url' - import {defineConfig} from 'vite' import vue from '@vitejs/plugin-vue' import ReactivityTransform from '@vue-macros/reactivity-transform/vite' +import AutoImport from 'unplugin-auto-import/vite' // https://vitejs.dev/config/ export default defineConfig({ plugins: [ vue(), - ReactivityTransform() + ReactivityTransform(), + AutoImport({ + imports: [ + 'vue-i18n', + ], + dts: './auto-imports.d.ts', + eslintrc: { + enabled: false, // 閰嶇疆鏇存柊鏃朵复鏃惰涓簍rue, + }, + }), ], resolve: { alias: { + 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js', '@': fileURLToPath(new URL('./src', import.meta.url)) } }, @@ -48,4 +58,4 @@ }) ); }, -}); \ No newline at end of file +}); diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java index f69a142..5fe46f1 100644 --- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java +++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java @@ -125,7 +125,7 @@ /** * 鏃嬭浆瑙掑害锛堥�嗘椂閽堬級 */ - private Integer angle; + private Double angle; /** * 宸ョ▼鍙� diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java index 19cb029..c83bc33 100644 --- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java +++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java @@ -33,6 +33,17 @@ private Double height; /** + * 瀹� + */ + private Double oHeight; + + /** + * 楂� + */ + private Double oWidth; + + + /** * 鍘氬害 */ private Double glassThickness; @@ -88,5 +99,13 @@ * 灏忕墖缂栧彿 */ private String glassId; + /** + * 璁㈠崟搴忓彿 + */ + private String orderSort; + /** + * 鏃嬭浆瑙掑害 + */ + private Double rotateAngle; } diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java index 25fd269..6e35509 100644 --- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java +++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java @@ -40,12 +40,13 @@ List<OptimizeGlassinfo> optimizeGlassinfos = null; if (engineeringId != null) { optimizeGlassinfos = optimizeProjectMapper.selectJoinList(OptimizeGlassinfo.class, new MPJQueryWrapper<OptimizeProject>() - .select("b.process_id,t.type,b.width,b.height,t.glass_thickness,t.glass_type,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,b.x_axis,b.y_axis,b.project_no,b.glass_id") + .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,c.x_axis,c.y_axis,b.project_no,b.glass_id,c.rotate_angle") .leftJoin("optimize_detail b on t.project_no=b.project_no") + .leftJoin("optimize_heat_detail c on c.project_no=t.project_no and b.heat_layout_id=c.layout_id and b.heat_layout_sort=c.sort") //.eq("t.state",100) .eq("t.project_no", engineeringId)); } - + //order_sort,o_width,o_height // 鍒涘缓涓�涓� List 鐢ㄤ簬淇濆瓨鏄犲皠鍚庣殑瀹炰綋瀵硅薄 List<GlassInfo> resultList = new ArrayList<>(); @@ -57,9 +58,9 @@ glassInfo.setEngineerId(map.getProjectNo()); glassInfo.setFlowCardId(map.getProcessId()); glassInfo.setFilmsid(map.getGlassType()); - glassInfo.setGlassType(map.getType()); - glassInfo.setWidth(map.getWidth()); - glassInfo.setHeight(map.getHeight()); + glassInfo.setGlassType(map.getOrderSort());//璁㈠崟搴忓彿 + glassInfo.setWidth(map.getOWidth());//璁㈠崟瀹� + glassInfo.setHeight(map.getOHeight());//璁㈠崟楂� glassInfo.setEdgWidth(map.getPWidth()); glassInfo.setLayer(map.getLayer()); glassInfo.setTotalLayer(map.getTotalLayer()); @@ -70,7 +71,7 @@ glassInfo.setTemperingFeedSequence(map.getHeatLayoutSort());//閽㈠寲鐗堝浘椤哄簭 glassInfo.setXCoordinate(map.getXAxis()); glassInfo.setYCoordinate(map.getYAxis()); - + glassInfo.setAngle(map.getRotateAngle()); glassInfo.setGlassId(map.getGlassId()); // 灏嗘槧灏勫悗鐨勫璞℃坊鍔犲埌缁撴灉鍒楄〃涓� resultList.add(glassInfo); diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java index 66b5c07..eba025b 100644 --- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java +++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java @@ -22,7 +22,7 @@ // 2銆佸叏灞�閰嶇疆 // 鍏ㄥ眬閰嶇疆 GlobalConfig gc = new GlobalConfig(); - gc.setOutputDir("D:\\Documents\\hangzhoumesParent4\\"); + gc.setOutputDir("D:\\Documents\\hangzhoumesParent6\\"); gc.setServiceName("%sService"); //鍘绘帀Service鎺ュ彛鐨勯瀛楁瘝I gc.setAuthor("wu"); @@ -31,7 +31,7 @@ // 3銆佹暟鎹簮閰嶇疆 DataSourceConfig dsc = new DataSourceConfig(); - dsc.setUrl("jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8"); + dsc.setUrl("jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("beibo.123/"); @@ -41,7 +41,7 @@ // 4銆佸寘閰嶇疆 PackageConfig pc = new PackageConfig(); pc.setParent("com.mes"); - pc.setModuleName("glassinfo"); //妯″潡鍚� + pc.setModuleName("orderdetail"); //妯″潡鍚� pc.setController("controller"); pc.setService("service"); pc.setMapper("mapper"); @@ -50,7 +50,7 @@ // 5銆佺瓥鐣ラ厤缃� StrategyConfig strategy = new StrategyConfig(); - strategy.setInclude("glass_info"); + strategy.setInclude("order_detail"); strategy.setNaming(NamingStrategy.underline_to_camel);//鏁版嵁搴撹〃鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐 diff --git a/hangzhoumesParent/common/springsecurity/pom.xml b/hangzhoumesParent/common/springsecurity/pom.xml index 70e572c..9278822 100644 --- a/hangzhoumesParent/common/springsecurity/pom.xml +++ b/hangzhoumesParent/common/springsecurity/pom.xml @@ -23,6 +23,7 @@ <artifactId>servicebase</artifactId> <version>1.0-SNAPSHOT</version> </dependency> + <!-- Spring Security渚濊禆 --> <dependency> <groupId>org.springframework.boot</groupId> diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/RedisConfig.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/RedisConfig.java deleted file mode 100644 index e469272..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/RedisConfig.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.mes.common.config; - -import com.mes.common.utils.FastJsonRedisSerializer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.serializer.StringRedisSerializer; - -/** - * @Author : zhoush - * @Date: 2024/4/9 19:13 - * @Description: - */ -@Configuration -public class RedisConfig { - - @Bean - @SuppressWarnings(value = {"unchecked", "rawtypes"}) - public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { - RedisTemplate<Object, Object> template = new RedisTemplate<>(); - template.setConnectionFactory(connectionFactory); - - FastJsonRedisSerializer serializer = new FastJsonRedisSerializer(Object.class); - - // 浣跨敤StringRedisSerializer鏉ュ簭鍒楀寲鍜屽弽搴忓垪鍖杛edis鐨刱ey鍊� - template.setKeySerializer(new StringRedisSerializer()); - template.setValueSerializer(serializer); - - // Hash鐨刱ey涔熼噰鐢⊿tringRedisSerializer鐨勫簭鍒楀寲鏂瑰紡 - template.setHashKeySerializer(new StringRedisSerializer()); - template.setHashValueSerializer(serializer); - - template.afterPropertiesSet(); - return template; - } -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/TokenWebSecurityConfig.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/TokenWebSecurityConfig.java deleted file mode 100644 index a130533..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/TokenWebSecurityConfig.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.mes.common.config; - - -import com.mes.common.filter.JwtAuthenticationTokenFilter; -import com.mes.common.handler.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -public class TokenWebSecurityConfig extends WebSecurityConfigurerAdapter { - @Autowired - private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter; - @Autowired - LoginFailureHandler loginFailureHandler; - - @Autowired - LoginSuccessHandler loginSuccessHandler; - - @Autowired - JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; - - @Autowired - JwtAccessDeniedHandler jwtAccessDeniedHandler; - - @Autowired - JwtLogoutSuccessHandler jwtLogoutSuccessHandler; - - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } - - /** - * 閰嶇疆杩囨护瑙勫垯 - */ - @Override - protected void configure(HttpSecurity http) throws Exception { - - http.cors().and().csrf().disable() - - // 鐧诲綍閰嶇疆 - .formLogin() - .successHandler(loginSuccessHandler) - .failureHandler(loginFailureHandler) - - .and() - .logout() - .logoutSuccessHandler(jwtLogoutSuccessHandler) - - // 绂佺敤session - .and() - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - - // 閰嶇疆鎷︽埅瑙勫垯 - .and() - .authorizeRequests() - .antMatchers("/sys/user/login").anonymous() - .antMatchers("/swagger-ui.html").permitAll() - .antMatchers("/webjars/**").permitAll() - .antMatchers("/v2/**").permitAll() - .antMatchers("/swagger-resources/**").permitAll() - .antMatchers("/**").permitAll() - .anyRequest().authenticated() - - // 寮傚父澶勭悊鍣� - .and() - .exceptionHandling() - .authenticationEntryPoint(jwtAuthenticationEntryPoint) - .accessDeniedHandler(jwtAccessDeniedHandler) - - // 閰嶇疆鑷畾涔夌殑杩囨护鍣� - .and() - .addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); - } - - @Bean - @Override - public AuthenticationManager authenticationManagerBean() throws Exception { - return super.authenticationManagerBean(); - } -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java deleted file mode 100644 index 1505d1b..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.mes.common.filter; - -import com.mes.common.utils.JwtUtil; -import com.mes.common.utils.RedisUtil; -import com.mes.common.utils.UserInfoUtils; -import com.mes.userinfo.entity.LoginUser; -import com.mes.userinfo.service.SysUserService; -import io.jsonwebtoken.Claims; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.OncePerRequestFilter; - -import javax.annotation.Resource; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * @Author : zhoush - * @Date: 2024/4/10 9:42 - * @Description: - */ -@Component -public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { - // 姝ゅ瑙i噴涓轰粈涔堜笉鍘诲疄鐜癋ilter鎺ュ彛锛屽洜涓哄湪鏌愪簺鎯呭喌涓嬩細杩囨护涓ゆ锛屾墽琛屼袱娆ilter閲岄潰鐨勬柟娉曪紝鎵�浠ユ垜浠�夋嫨缁ф壙SpringSecurity涓殑OncePerRequestFilter - @Autowired - private RedisUtil redisUtil; - - @Resource - private SysUserService sysUserService; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - //鑾峰彇token - String token = request.getHeader("token"); - if (!StringUtils.hasText(token)) { - //鏀捐 - filterChain.doFilter(request, response); - return; // 姝ゅ鍔犱笂return濂藉鏄悗闈㈢粨鏋滆繑鍥炵殑鏃跺�欏氨涓嶄細鍐嶈蛋涓�閬嶆杩囨护鍣ㄧ殑鏂规硶浜� - } - //瑙f瀽token - String userid; - try { - Claims claims = JwtUtil.getClaimByToken(token); - userid = claims.getSubject(); - } catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException("token闈炴硶"); - } - //浠巖edis涓幏鍙栫敤鎴蜂俊鎭� - String redisKey = "login:" + userid; - LoginUser loginUser = redisUtil.getCacheObject(redisKey); - if (Objects.isNull(loginUser)) { - response.setHeader("token", ""); - throw new RuntimeException("鐢ㄦ埛鏈櫥褰�"); - } - //灏嗙敤鎴蜂俊鎭斁鍏ュ綋鍓嶇嚎绋� - UserInfoUtils.set(loginUser.getUser()); - //瀛樺叆SecurityContextHolder锛屼互渚涘悗闈㈢殑杩囨护鍣ㄤ娇鐢� - List<String> permissionKeyList = sysUserService.getUserAuthorityInfo(Long.parseLong(userid)); - List<GrantedAuthority> authorities = permissionKeyList.stream(). - map(SimpleGrantedAuthority::new) - .collect(Collectors.toList()); - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(loginUser, null, authorities); - SecurityContextHolder.getContext().setAuthentication(authenticationToken); - //鏀捐 - filterChain.doFilter(request, response); - } -} \ No newline at end of file diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtAccessDeniedHandler.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtAccessDeniedHandler.java deleted file mode 100644 index aad53aa..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtAccessDeniedHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.mes.common.handler; - -import cn.hutool.json.JSONUtil; -import com.mes.utils.Result; -import org.springframework.http.HttpStatus; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.web.access.AccessDeniedHandler; -import org.springframework.stereotype.Component; - -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -@Component -public class JwtAccessDeniedHandler implements AccessDeniedHandler { - - @Override - public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { - - response.setContentType("application/json;charset=UTF-8"); - response.setStatus(HttpServletResponse.SC_FORBIDDEN); - - ServletOutputStream outputStream = response.getOutputStream(); - - Result result = Result.error(HttpStatus.FORBIDDEN.value(), "鏉冮檺涓嶈冻"); - - outputStream.write(JSONUtil.toJsonStr(result).getBytes("UTF-8")); - - outputStream.flush(); - outputStream.close(); - - } -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtAuthenticationEntryPoint.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtAuthenticationEntryPoint.java deleted file mode 100644 index a95ca0c..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtAuthenticationEntryPoint.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.mes.common.handler; - -import cn.hutool.json.JSONUtil; -import com.mes.utils.Result; -import org.springframework.http.HttpStatus; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.web.AuthenticationEntryPoint; -import org.springframework.stereotype.Component; - -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -@Component -public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { - - @Override - public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { - - response.setContentType("application/json;charset=UTF-8"); - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - ServletOutputStream outputStream = response.getOutputStream(); - - Result result = Result.error(HttpStatus.UNAUTHORIZED.value(), "璁よ瘉澶辫触璇烽噸鏂扮櫥褰�"); - - outputStream.write(JSONUtil.toJsonStr(result).getBytes("UTF-8")); - - outputStream.flush(); - outputStream.close(); - } -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtLogoutSuccessHandler.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtLogoutSuccessHandler.java deleted file mode 100644 index 3757d4d..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/JwtLogoutSuccessHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.mes.common.handler; - -import cn.hutool.json.JSONUtil; -import com.mes.utils.Result; -import org.springframework.security.core.Authentication; -import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; -import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; -import org.springframework.stereotype.Component; - -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -@Component -public class JwtLogoutSuccessHandler implements LogoutSuccessHandler { - - private static final String header = "Authorization"; - - @Override - public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { - - if (authentication != null) { - new SecurityContextLogoutHandler().logout(request, response, authentication); - } - - response.setContentType("application/json;charset=UTF-8"); - ServletOutputStream outputStream = response.getOutputStream(); - - response.setHeader(header, ""); - - Result result = Result.success(""); - - outputStream.write(JSONUtil.toJsonStr(result).getBytes("UTF-8")); - - outputStream.flush(); - outputStream.close(); - } -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/LoginFailureHandler.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/LoginFailureHandler.java deleted file mode 100644 index 72abdbe..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/LoginFailureHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.mes.common.handler; - -import cn.hutool.json.JSONUtil; -import com.mes.utils.Result; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.web.authentication.AuthenticationFailureHandler; -import org.springframework.stereotype.Component; - -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -@Component -public class LoginFailureHandler implements AuthenticationFailureHandler { - - @Override - public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { - - response.setContentType("application/json;charset=UTF-8"); - ServletOutputStream outputStream = response.getOutputStream(); - - Result result = Result.error("鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒"); - - outputStream.write(JSONUtil.toJsonStr(result).getBytes("UTF-8")); - - outputStream.flush(); - outputStream.close(); - } -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/LoginSuccessHandler.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/LoginSuccessHandler.java deleted file mode 100644 index c5458bb..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/LoginSuccessHandler.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.mes.common.handler; - -import cn.hutool.json.JSONUtil; -import com.mes.common.utils.JwtUtil; -import com.mes.utils.Result; -import org.springframework.security.core.Authentication; -import org.springframework.security.web.authentication.AuthenticationSuccessHandler; -import org.springframework.stereotype.Component; - -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -@Component -public class LoginSuccessHandler implements AuthenticationSuccessHandler { - - private static final String header = "Authorization"; - - @Override - public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { - response.setContentType("application/json;charset=UTF-8"); - ServletOutputStream outputStream = response.getOutputStream(); - - // 鐢熸垚jwt锛屽苟鏀剧疆鍒拌姹傚ご涓� - String jwt = JwtUtil.generateToken(authentication.getName()); - response.setHeader(header, jwt); - - Result result = Result.success(""); - - outputStream.write(JSONUtil.toJsonStr(result).getBytes("UTF-8")); - - outputStream.flush(); - outputStream.close(); - } - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/FastJsonRedisSerializer.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/FastJsonRedisSerializer.java deleted file mode 100644 index f8ab417..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/FastJsonRedisSerializer.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.mes.common.utils; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.parser.ParserConfig; -import com.alibaba.fastjson.serializer.SerializerFeature; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.type.TypeFactory; -import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.data.redis.serializer.SerializationException; - -import java.nio.charset.Charset; - -/** - * @Author : zhoush - * @Date: 2024/4/11 15:28 - * @Description: - */ -public class FastJsonRedisSerializer<T> implements RedisSerializer<T> { - - public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); - - private Class<T> clazz; - - static { - ParserConfig.getGlobalInstance().setAutoTypeSupport(true); - } - - public FastJsonRedisSerializer(Class<T> clazz) { - super(); - this.clazz = clazz; - } - - @Override - public byte[] serialize(T t) throws SerializationException { - if (t == null) { - return new byte[0]; - } - return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); - } - - @Override - public T deserialize(byte[] bytes) throws SerializationException { - if (bytes == null || bytes.length <= 0) { - return null; - } - String str = new String(bytes, DEFAULT_CHARSET); - - return JSON.parseObject(str, clazz); - } - - - protected JavaType getJavaType(Class<?> clazz) { - return TypeFactory.defaultInstance().constructType(clazz); - } -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/JwtUtil.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/JwtUtil.java deleted file mode 100644 index f7af90a..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/JwtUtil.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.mes.common.utils; - - -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; -import lombok.Data; - -import java.util.Date; - -/** - * @Author : zhoush - * @Date: 2024/4/9 19:15 - * @Description: - */ -@Data -public class JwtUtil { - - private static final long expire = 60 * 60 * 1000L; - private static final String secret = "beibo"; - private static final String header = "Authorization"; - - // 鐢熸垚jwt - public static String generateToken(String username) { - - Date nowDate = new Date(); - Date expireDate = new Date(nowDate.getTime() + 1000 * expire); - - return Jwts.builder() - .setHeaderParam("typ", "JWT") - .setSubject(username) - .setIssuedAt(nowDate) - .setExpiration(expireDate)// 7澶╅亷鏈� - .signWith(SignatureAlgorithm.HS512, secret) - .compact(); - } - - // 瑙f瀽jwt - public static Claims getClaimByToken(String jwt) { - try { - return Jwts.parser() - .setSigningKey(secret) - .parseClaimsJws(jwt) - .getBody(); - } catch (Exception e) { - return null; - } - } - - // jwt鏄惁杩囨湡 - public boolean isTokenExpired(Claims claims) { - return claims.getExpiration().before(new Date()); - } - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java deleted file mode 100644 index d11f2bc..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java +++ /dev/null @@ -1,235 +0,0 @@ -package com.mes.common.utils; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.BoundSetOperations; -import org.springframework.data.redis.core.HashOperations; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ValueOperations; -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.concurrent.TimeUnit; - -/** - * spring redis 宸ュ叿绫� - **/ -@Component -public class RedisUtil { - @Autowired - public RedisTemplate redisTemplate; - - /** - * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛� - * - * @param key 缂撳瓨鐨勯敭鍊� - * @param value 缂撳瓨鐨勫�� - */ - public <T> void setCacheObject(final String key, final T value) { - redisTemplate.opsForValue().set(key, value); - } - - /** - * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛� - * - * @param key 缂撳瓨鐨勯敭鍊� - * @param value 缂撳瓨鐨勫�� - * @param timeout 鏃堕棿 - * @param timeUnit 鏃堕棿棰楃矑搴� - */ - public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) { - redisTemplate.opsForValue().set(key, value, timeout, timeUnit); - } - - /** - * 璁剧疆鏈夋晥鏃堕棿 - * - * @param key Redis閿� - * @param timeout 瓒呮椂鏃堕棿 - * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触 - */ - public boolean expire(final String key, final long timeout) { - return expire(key, timeout, TimeUnit.SECONDS); - } - - /** - * 璁剧疆鏈夋晥鏃堕棿 - * - * @param key Redis閿� - * @param timeout 瓒呮椂鏃堕棿 - * @param unit 鏃堕棿鍗曚綅 - * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触 - */ - public boolean expire(final String key, final long timeout, final TimeUnit unit) { - return redisTemplate.expire(key, timeout, unit); - } - - /** - * 鑾峰緱缂撳瓨鐨勫熀鏈璞°�� - * - * @param key 缂撳瓨閿�� - * @return 缂撳瓨閿�煎搴旂殑鏁版嵁 - */ - public <T> T getCacheObject(final String key) { - ValueOperations<String, T> operation = redisTemplate.opsForValue(); - return operation.get(key); - } - - /** - * 鍒犻櫎鍗曚釜瀵硅薄 - * - * @param key - */ - public boolean deleteObject(final String key) { - return redisTemplate.delete(key); - } - - /** - * 鍒犻櫎闆嗗悎瀵硅薄 - * - * @param collection 澶氫釜瀵硅薄 - * @return - */ - public long deleteObject(final Collection collection) { - return redisTemplate.delete(collection); - } - - /** - * 缂撳瓨List鏁版嵁 - * - * @param key 缂撳瓨鐨勯敭鍊� - * @param dataList 寰呯紦瀛樼殑List鏁版嵁 - * @return 缂撳瓨鐨勫璞� - */ - public <T> long setCacheList(final String key, final List<T> dataList) { - Long count = redisTemplate.opsForList().rightPushAll(key, dataList); - return count == null ? 0 : count; - } - - /** - * 鑾峰緱缂撳瓨鐨刲ist瀵硅薄 - * - * @param key 缂撳瓨鐨勯敭鍊� - * @return 缂撳瓨閿�煎搴旂殑鏁版嵁 - */ - public <T> List<T> getCacheList(final String key) { - return redisTemplate.opsForList().range(key, 0, -1); - } - - /** - * 缂撳瓨Set - * - * @param key 缂撳瓨閿�� - * @param dataSet 缂撳瓨鐨勬暟鎹� - * @return 缂撳瓨鏁版嵁鐨勫璞� - */ - public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) { - BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key); - Iterator<T> it = dataSet.iterator(); - while (it.hasNext()) { - setOperation.add(it.next()); - } - return setOperation; - } - - /** - * 鑾峰緱缂撳瓨鐨剆et - * - * @param key - * @return - */ - public <T> Set<T> getCacheSet(final String key) { - return redisTemplate.opsForSet().members(key); - } - - /** - * 缂撳瓨Map - * - * @param key - * @param dataMap - */ - public <T> void setCacheMap(final String key, final Map<String, T> dataMap) { - if (dataMap != null) { - redisTemplate.opsForHash().putAll(key, dataMap); - } - } - - /** - * 鑾峰緱缂撳瓨鐨凪ap - * - * @param key - * @return - */ - public <T> Map<String, T> getCacheMap(final String key) { - return redisTemplate.opsForHash().entries(key); - } - - /** - * 寰�Hash涓瓨鍏ユ暟鎹� - * - * @param key Redis閿� - * @param hKey Hash閿� - * @param value 鍊� - */ - public <T> void setCacheMapValue(final String key, final String hKey, final T value) { - redisTemplate.opsForHash().put(key, hKey, value); - } - - /** - * 鑾峰彇Hash涓殑鏁版嵁 - * - * @param key Redis閿� - * @param hKey Hash閿� - * @return Hash涓殑瀵硅薄 - */ - public <T> T getCacheMapValue(final String key, final String hKey) { - HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash(); - return opsForHash.get(key, hKey); - } - - /** - * 鍒犻櫎Hash涓殑鏁版嵁 - * - * @param key - * @param hkey - */ - public void delCacheMapValue(final String key, final String hkey) { - HashOperations hashOperations = redisTemplate.opsForHash(); - hashOperations.delete(key, hkey); - } - - /** - * 鑾峰彇澶氫釜Hash涓殑鏁版嵁 - * - * @param key Redis閿� - * @param hKeys Hash閿泦鍚� - * @return Hash瀵硅薄闆嗗悎 - */ - public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) { - return redisTemplate.opsForHash().multiGet(key, hKeys); - } - - /** - * 鑾峰緱缂撳瓨鐨勫熀鏈璞″垪琛� - * - * @param pattern 瀛楃涓插墠缂� - * @return 瀵硅薄鍒楄〃 - */ - public Collection<String> keys(final String pattern) { - return redisTemplate.keys(pattern); - } - - /** - * 鍒ゆ柇key鏄惁瀛樺湪 - * - * @param key 閿� - * @return true 瀛樺湪 false涓嶅瓨鍦� - */ - public boolean hasKey(String key) { - try { - return redisTemplate.hasKey(key); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } -} \ No newline at end of file diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/UserInfoUtils.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/UserInfoUtils.java deleted file mode 100644 index 292797c..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/UserInfoUtils.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mes.common.utils; - -import com.mes.userinfo.entity.SysUser; - -/** - * @Author : zhoush - * @Date: 2024/4/25 15:41 - * @Description: - */ -public class UserInfoUtils { - private static InheritableThreadLocal<SysUser> tokenPool = new InheritableThreadLocal<SysUser>(); - - public static SysUser get() { - return tokenPool.get(); - } - - public static void set(SysUser user) { - tokenPool.set(user); - } - - public static void remove() { - if (get() != null) { - tokenPool.remove(); - } - } -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/WebUtils.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/WebUtils.java deleted file mode 100644 index 618144d..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/WebUtils.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.mes.common.utils; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -/** - * @Author : zhoush - * @Date: 2024/4/9 19:16 - * @Description: - */ -public class WebUtils { - /** - * 灏嗗瓧绗︿覆娓叉煋鍒板鎴风 - * - * @param response 娓叉煋瀵硅薄 - * @param string 寰呮覆鏌撶殑瀛楃涓� - * @return null - */ - public static String renderString(HttpServletResponse response, String string) { - try { - response.setStatus(200); - response.setContentType("application/json"); - response.setCharacterEncoding("utf-8"); - response.getWriter().print(string); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java deleted file mode 100644 index 4ca0cb9..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.mes.menu.controller; - -import com.mes.entity.request.GeneralRequest; -import com.mes.menu.entity.SysMenu; -import com.mes.menu.service.SysMenuService; -import com.mes.utils.Result; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * @author zhoush - * @since 2024-04-11 - */ -@Api(description = "鑿滃崟绠$悊") -@RestController -@RequestMapping("/sys/menu") -public class SysMenuController { - - @Autowired - private SysMenuService sysMenuService; - - @ApiOperation("鏂板鑿滃崟") - @PostMapping("/save") -// @PreAuthorize("hasAuthority('sys:menu:save')") - public Result save(@Validated @RequestBody SysMenu sysMenu) { - return Result.success(sysMenuService.save(sysMenu)); - } - - @ApiOperation("淇敼鑿滃崟淇℃伅") - @PostMapping("/updateMenu") -// @PreAuthorize("hasAuthority('sys:menu:update')") - public Result updateMenu(@Validated @RequestBody SysMenu sysMenu) { - sysMenuService.updateMenu(sysMenu); - return Result.success(sysMenu); - } - - @ApiOperation("鑾峰彇鐢ㄦ埛鏈夋潈闄愮殑鎵�鏈夎彍鍗�") - @GetMapping("/getMenuTree") - public Result<List<SysMenu>> getMenuTree(GeneralRequest request) { - return Result.success(sysMenuService.getMenuTree(request)); - } - - @ApiOperation("鑾峰彇鐢ㄦ埛鐨勬潈闄�") - @GetMapping("/getAuthorityInfo") - public Result<List<String>> getAuthorityInfo() { - return Result.success(sysMenuService.getAuthorityInfo()); - } - - - @ApiOperation("鐢ㄦ埛褰撳墠鐢ㄦ埛鐨勮彍鍗曞拰鏉冮檺淇℃伅") - @GetMapping("/nav") - public Result<Map<Object, Object>> nav() { - return Result.success(sysMenuService.nav()); - } - - @ApiOperation("鍒犻櫎鑿滃崟") - @PostMapping("/deleteMenu") -// @PreAuthorize("hasAuthority('sys:menu:delete')") - public Result<String> deleteMenu(Long menuId) { - return Result.success(sysMenuService.deleteMenu(menuId)); - } - - @ApiOperation("鎵归噺鍒犻櫎鑿滃崟") - @PostMapping("/batchDeleteMenu") -// @PreAuthorize("hasAuthority('sys:menu:delete')") - public Result<String> batchDeleteMenu(@RequestBody List<Long> menuIds) { - return Result.success(sysMenuService.batchDeleteMenu(menuIds)); - } - -} - diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java deleted file mode 100644 index 37476c6..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.mes.menu.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.util.Date; -import java.util.List; - -/** - * <p> - * - * </p> - * - * @author zhoush - * @since 2024-04-13 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -public class SysMenu implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 鑷id - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - /** - * 鐖秈d - */ - private Long parentId; - - /** - * 妯″潡鍚嶇О - */ - private String menuName; - - /** - * 鍥炬爣 - */ - private String icon; - - /** - * 鍦板潃 - */ - private String url; - - /** - * 璇█绫诲瀷 - */ - private String languageType; - - /** - * 鐘舵�� - */ - private Integer status; - - /** - * 鎺掑簭 - */ - private String listSort; - - /** - * 鍒涘缓鏃堕棿 - */ - private Date createTime; - - /** - * 鏉冮檺 - */ - private String perms; - - /** - * 瀛愯彍鍗� - */ - @TableField(exist = false) - private List<SysMenu> children; - - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java deleted file mode 100644 index b1ef2d6..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mes.menu.mapper; - -import com.github.yulichang.base.MPJBaseMapper; -import com.mes.menu.entity.SysMenu; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -/** - * <p> - * 鑿滃崟琛� Mapper 鎺ュ彛 - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -@Mapper -public interface SysMenuMapper extends MPJBaseMapper<SysMenu> { - - List<String> selectPermsByUserId(long parseLong); -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/SysMenuService.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/SysMenuService.java deleted file mode 100644 index 014d1cd..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/SysMenuService.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.mes.menu.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.mes.entity.request.GeneralRequest; -import com.mes.menu.entity.SysMenu; - -import java.util.List; -import java.util.Map; - -/** - * <p> - * 鑿滃崟琛� 鏈嶅姟绫� - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -public interface SysMenuService extends IService<SysMenu> { - - /** - * 鏇存柊鑿滃崟淇℃伅 - * - * @param menu - * @return - */ - SysMenu updateMenu(SysMenu menu); - - /** - * 鑾峰彇鐢ㄦ埛鏈夋潈闄愮殑鑿滃崟鏍� - * - * @return - */ - List<SysMenu> getMenuTree(GeneralRequest request); - - /** - * 鑾峰彇鐢ㄦ埛鐨勬潈闄� - * - * @return - */ - List<String> getAuthorityInfo(); - - - /** - * 鑾峰彇鐢ㄦ埛鑿滃崟鍙婃潈闄愪俊鎭� - * - * @return - */ - Map<Object, Object> nav(); - - /** - * 鍒犻櫎鑿滃崟淇℃伅 - * - * @param menuId - * @return - */ - String deleteMenu(Long menuId); - - /** - * 鎵归噺鍒犻櫎鑿滃崟淇℃伅 - * - * @param menuIds - * @return - */ - String batchDeleteMenu(List<Long> menuIds); - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java deleted file mode 100644 index 597f93c..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.mes.menu.service.impl; - -import cn.hutool.core.map.MapUtil; -import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.mes.common.utils.UserInfoUtils; -import com.mes.entity.request.GeneralRequest; -import com.mes.menu.entity.SysMenu; -import com.mes.menu.mapper.SysMenuMapper; -import com.mes.menu.service.SysMenuService; -import com.mes.role.entity.SysRoleMenu; -import com.mes.role.service.SysRoleMenuService; -import com.mes.userinfo.entity.SysUser; -import com.mes.userinfo.entity.SysUserRole; -import com.mes.userinfo.mapper.SysUserRoleMapper; -import com.mes.userinfo.service.SysUserService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * <p> - * 鑿滃崟琛� 鏈嶅姟瀹炵幇绫� - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -@Service -@Slf4j -public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService { - - @Autowired - SysUserService sysUserService; - - @Autowired - SysUserRoleMapper sysUserRoleMapper; - - @Autowired - SysRoleMenuService sysRoleMenuService; - - @Override - public SysMenu updateMenu(SysMenu menu) { - baseMapper.updateById(menu); - // 娓呴櫎鎵�鏈変笌璇ヨ彍鍗曠浉鍏崇殑鏉冮檺缂撳瓨 - sysUserService.clearUserAuthorityInfoByMenuId(menu.getId()); - return menu; - } - - @Override - public List<SysMenu> getMenuTree(GeneralRequest request) { - //todo:闇�瑕佸厛鑾峰彇鐢ㄦ埛鐨勮鑹诧紝瑙掕壊涓嬬殑鑿滃崟鏉冮檺锛屾嬁鍒拌彍鍗昳d鑾峰彇鎵�鏈夎彍鍗� - SysUser user = UserInfoUtils.get(); - MPJLambdaWrapper<SysUserRole> wrapper = new MPJLambdaWrapper<>(); - - wrapper.selectAll(SysMenu.class).distinct() - .innerJoin(SysUser.class, SysUser::getId, SysUserRole::getUserId) - .innerJoin(SysRoleMenu.class, SysRoleMenu::getRoleId, SysUserRole::getRoleId) - .innerJoin(SysMenu.class, SysMenu::getId, SysRoleMenu::getMenuId) - .eq(SysUser::getId, user.getId()) - .like(StringUtils.isNotBlank(request.getKey()), SysMenu::getMenuName, request.getKey()); - - // - List<SysMenu> menuList = sysUserRoleMapper.selectJoinList(SysMenu.class, wrapper); - log.info("userinfos:{}",menuList); - return create(menuList); - } - - @Override - public List<String> getAuthorityInfo() { - SysUser user = UserInfoUtils.get(); - log.info("鑾峰彇鐢ㄦ埛淇℃伅锛岀敤鎴峰悕涓簕}", user); - // 鑾峰彇鏉冮檺淇℃伅 - // ROLE_admin,ROLE_normal,sys:user:list,.... - return sysUserService.getUserAuthorityInfo(user.getId()); - } - - @Override - public Map<Object, Object> nav() { - List<SysMenu> menuTree = getMenuTree(new GeneralRequest()); - List<String> authorityInfo = getAuthorityInfo(); - return MapUtil.builder().put("authoritys", authorityInfo) - .put("tree", menuTree).map(); - } - - @Override - public String deleteMenu(Long menuId) { - int count = this.count(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getParentId, menuId)); - if (count > 0) { - return "鏃犳硶鍒犻櫎,璇峰厛鍒犻櫎瀛愯彍鍗�"; - } - - // 娓呴櫎鎵�鏈変笌璇ヨ彍鍗曠浉鍏崇殑鏉冮檺缂撳瓨 - sysUserService.clearUserAuthorityInfoByMenuId(menuId); - - this.removeById(menuId); - - // 鍚屾鍒犻櫎涓棿鍏宠仈琛� - sysRoleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getMenuId, menuId)); - return "鍒犻櫎鎴愬姛"; - } - - @Override - public String batchDeleteMenu(List<Long> menuIds) { - menuIds.stream().forEach(e -> deleteMenu(e)); - return "鎵归噺鍒犻櫎鎴愬姛"; - } - - - /** - * 灏嗘暟鎹簱涓煡璇㈠嚭鏉ョ殑list闆嗗悎浼犲叆姝ゆ柟娉曞嵆鍙幏寰楁帓鎴愭爲褰㈢粨鏋勭殑list闆嗗悎 - * - * @param lists - * @return - */ - public List<SysMenu> create(List<SysMenu> lists) { - List<SysMenu> deptTreeList = lists.stream() - .filter(item -> item.getParentId() == 0) - .map(item -> { - item.setChildren(getChildren(item, lists)); - return item; - }).collect(Collectors.toList()); - return deptTreeList; - } - - /** - * 姝ゆ柟娉曞皢琚�掑綊璋冪敤 - * - * @param menu - * @param menus - * @return - */ - private List<SysMenu> getChildren(SysMenu menu, List<SysMenu> menus) { - List<SysMenu> res = menus.stream() - .filter(item -> item.getParentId().equals(menu.getId())) - .collect(Collectors.toList()); - log.info("鑿滃崟鏍�:{}", JSONUtil.toJsonStr(res)); - return res; - } - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java deleted file mode 100644 index cb6da80..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.mes.role.controller; - - -import com.mes.entity.request.GeneralRequest; -import com.mes.role.entity.SysRole; -import com.mes.role.entity.vo.SysRoleVO; -import com.mes.role.service.SysRoleService; -import com.mes.utils.Result; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - * @author zhoush - * @since 2024-04-11 - */ -@Api(description = "瑙掕壊绠$悊") -@RestController -@RequestMapping("/sys/role") -public class SysRoleController { - - @Autowired - private SysRoleService sysRoleService; - - @ApiOperation("鏂板瑙掕壊鍙婅鑹蹭笅鐨勬潈闄愪俊鎭�") - @PostMapping("/saveRole") -// @PreAuthorize("hasAuthority('sys:role:save')") - public Result<SysRole> saveRole(@Validated @RequestBody SysRoleVO sysRoleVO) { - return Result.success(sysRoleService.saveRole(sysRoleVO)); - } - - @ApiOperation("缂栬緫瑙掕壊鍙婅鑹蹭笅鐨勬潈闄愪俊鎭�") - @PostMapping("/updateRole") -// @PreAuthorize("hasAuthority('sys:role:save')") - public Result<String> updateRole(@Validated @RequestBody SysRoleVO sysRoleVO) { - return Result.success(sysRoleService.updateRole(sysRoleVO)); - } - - @ApiOperation("鏌ヨ瑙掕壊鍙婅鑹蹭笅鐨勬潈闄愪俊鎭�") - @PostMapping("/queryRole") -// @PreAuthorize("hasAuthority('sys:role:save')") - public Result<List<SysRoleVO>> queryRole(@Validated @RequestBody GeneralRequest request) { - return Result.success(sysRoleService.queryRole(request)); - } - - - @ApiOperation("鍒犻櫎瑙掕壊鍙婅鑹蹭笅鐨勬潈闄愪俊鎭�") - @PostMapping("/delete") -// @PreAuthorize("hasAuthority('sys:role:delete')") - @Transactional - public Result<String> deleteRole(@RequestBody List<Long> ids) { - return Result.success(sysRoleService.deleteRole(ids)); - } - -} \ No newline at end of file diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRole.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRole.java deleted file mode 100644 index 14fd4a3..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRole.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.mes.role.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serializable; - -/** - * <p> - * 瑙掕壊琛� - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -@Data -@EqualsAndHashCode(callSuper = false) -public class SysRole implements Serializable { - - private static final long serialVersionUID = 1L; - - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - private String name; - - /** - * 瑙掕壊鏉冮檺瀛楃涓� - */ - private String roleKey; - - /** - * 瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛� - */ - private String status; - - /** - * 鍒犻櫎鏍囧織 - */ - private Integer delFlag; - - /** - * 澶囨敞 - */ - private String remark; - - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRoleMenu.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRoleMenu.java deleted file mode 100644 index aae2aed..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRoleMenu.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.mes.role.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serializable; - -/** - * <p> - * - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -@Data -@EqualsAndHashCode(callSuper = false) -public class SysRoleMenu implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 瑙掕壊ID - */ - @TableId(type = IdType.NONE) - private Long roleId; - - /** - * 鑿滃崟id - */ - private Long menuId; - - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/vo/SysRoleVO.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/vo/SysRoleVO.java deleted file mode 100644 index 45efd61..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/vo/SysRoleVO.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.mes.role.entity.vo; - -import com.mes.menu.entity.SysMenu; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -/** - * @Author : zhoush - * @Date: 2024/4/26 13:57 - * @Description: - */ -@Api(description = "瑙掕壊淇℃伅") -@Data -public class SysRoleVO implements Serializable { - - @ApiModelProperty(hidden = true) - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "瑙掕壊ID", position = 2) - private Long id; - - @ApiModelProperty(value = "瑙掕壊鍚嶇О", position = 3) - private String name; - - @ApiModelProperty(value = "瑙掕壊鏉冮檺瀛楃涓�", position = 4) - private String roleKey; - - @ApiModelProperty(value = "瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛�", position = 5) - private String status; - - @ApiModelProperty(value = "鍒犻櫎鏍囧織", position = 6) - private Integer delFlag; - - @ApiModelProperty(value = "澶囨敞", position = 7) - private String remark; - - @ApiModelProperty(value = "瑙掕壊鑿滃崟淇℃伅", position = 8) - private List<SysMenu> menuList; - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java deleted file mode 100644 index d9251c1..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mes.role.mapper; - -import com.github.yulichang.base.MPJBaseMapper; -import com.mes.role.entity.SysRole; -import org.apache.ibatis.annotations.Mapper; - -/** - * <p> - * 瑙掕壊琛� Mapper 鎺ュ彛 - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -@Mapper -public interface SysRoleMapper extends MPJBaseMapper<SysRole> { - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java deleted file mode 100644 index 451d7fe..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mes.role.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.mes.role.entity.SysRoleMenu; -import org.apache.ibatis.annotations.Mapper; - -/** - * <p> - * Mapper 鎺ュ彛 - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -@Mapper -public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> { - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMapper.xml b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMapper.xml deleted file mode 100644 index 9a0cd27..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -<mapper namespace="com.mes.role.mapper.SysRoleMapper"> - -</mapper> diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMenuMapper.xml b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMenuMapper.xml deleted file mode 100644 index af0749b..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMenuMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -<mapper namespace="com.mes.role.mapper.SysRoleMenuMapper"> - -</mapper> diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleMenuService.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleMenuService.java deleted file mode 100644 index e4d23dc..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleMenuService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mes.role.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.mes.role.entity.SysRoleMenu; - -/** - * <p> - * 鏈嶅姟绫� - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -public interface SysRoleMenuService extends IService<SysRoleMenu> { - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleService.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleService.java deleted file mode 100644 index 9592106..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleService.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.mes.role.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.mes.entity.request.GeneralRequest; -import com.mes.role.entity.SysRole; -import com.mes.role.entity.vo.SysRoleVO; - -import java.util.List; - -/** - * <p> - * 瑙掕壊琛� 鏈嶅姟绫� - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -public interface SysRoleService extends IService<SysRole> { - - /** - * 鍒涘缓瑙掕壊淇℃伅 - * - * @param sysRoleVO - * @return - */ - SysRole saveRole(SysRoleVO sysRoleVO); - - /** - * 淇敼瑙掕壊淇℃伅鍙婃潈闄� - * - * @param sysRoleVO - * @return - */ - String updateRole(SysRoleVO sysRoleVO); - - /** - * 鎸夌収瑙掕壊鍚嶆煡璇㈣鑹蹭俊鎭� - * - * @param request - * @return - */ - List<SysRoleVO> queryRole(GeneralRequest request); - - /** - * 鏌ヨ瑙掕壊鍙婅鑹蹭笅鐨勬潈闄愪俊鎭� - * - * @param ids - * @return - */ - String deleteRole(List<Long> ids); -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleMenuServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleMenuServiceImpl.java deleted file mode 100644 index 4c8a475..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleMenuServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mes.role.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.mes.role.entity.SysRoleMenu; -import com.mes.role.mapper.SysRoleMenuMapper; -import com.mes.role.service.SysRoleMenuService; -import org.springframework.stereotype.Service; - -/** - * <p> - * 鏈嶅姟瀹炵幇绫� - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -@Service -public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuMapper, SysRoleMenu> implements SysRoleMenuService { - -} diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java deleted file mode 100644 index 2d08603..0000000 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.mes.role.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.mes.entity.request.GeneralRequest; -import com.mes.menu.entity.SysMenu; -import com.mes.role.entity.SysRole; -import com.mes.role.entity.SysRoleMenu; -import com.mes.role.entity.vo.SysRoleVO; -import com.mes.role.mapper.SysRoleMapper; -import com.mes.role.service.SysRoleMenuService; -import com.mes.role.service.SysRoleService; -import com.mes.userinfo.entity.SysUserRole; -import com.mes.userinfo.service.SysUserRoleService; -import com.mes.userinfo.service.SysUserService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * <p> - * 瑙掕壊琛� 鏈嶅姟瀹炵幇绫� - * </p> - * - * @author zhoush - * @since 2024-04-11 - */ -@Service -@Slf4j -public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService { - - @Autowired - SysRoleMenuService sysRoleMenuService; - - @Autowired - SysUserService sysUserService; - - @Autowired - SysUserRoleService sysUserRoleService; - - @Override - @Transactional(rollbackFor = Exception.class) - public SysRole saveRole(SysRoleVO sysRoleVO) { - log.info("淇濆瓨瑙掕壊淇℃伅锛岀敓鎴愬搴旂殑瑙掕壊id"); - SysRole sysRole = new SysRole(); - BeanUtils.copyProperties(sysRoleVO, sysRole); - this.save(sysRole); - //淇濆瓨瑙掕壊鏉冮檺淇℃伅 - saveRoleMenu(sysRole.getId(), sysRoleVO.getMenuList()); - return sysRole; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public String updateRole(SysRoleVO sysRoleVO) { - log.info("淇濆瓨瑙掕壊淇℃伅锛岀敓鎴愬搴旂殑瑙掕壊id"); - SysRole sysRole = new SysRole(); - BeanUtils.copyProperties(sysRoleVO, sysRole); - this.updateById(sysRole); - //淇濆瓨瑙掕壊鏉冮檺淇℃伅 - return saveRoleMenu(sysRole.getId(), sysRoleVO.getMenuList()); - } - - @Override - public List<SysRoleVO> queryRole(GeneralRequest request) { - MPJLambdaWrapper<SysRole> wrapper = new MPJLambdaWrapper<>(); - wrapper.selectAll(SysRole.class) - .selectCollection(SysMenu.class, SysRoleVO::getMenuList) - .leftJoin(SysRoleMenu.class, SysRoleMenu::getRoleId, SysRole::getId) - .leftJoin(SysMenu.class, SysMenu::getId, SysRoleMenu::getMenuId) - .like(StringUtils.hasText(request.getKey()), SysRole::getName, request.getKey()); - return baseMapper.selectJoinList(SysRoleVO.class, wrapper); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public String deleteRole(List<Long> ids) { - log.info("鍒犻櫎瑙掕壊淇℃伅"); - this.removeByIds(ids); - - log.info("鍒犻櫎涓棿琛ㄤ俊鎭�"); - sysUserRoleService.remove(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, ids)); - sysRoleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, ids)); - - log.info("娓呯┖缂撳瓨涓殑鏉冮檺淇℃伅"); - ids.stream().forEach(id -> sysUserService.clearUserAuthorityInfoByRoleId(id)); - return "success"; - } - - /** - * 淇濆瓨瑙掕壊鏉冮檺淇℃伅 - * - * @param roleId - * @param menuList - * @return - */ - private String saveRoleMenu(Long roleId, List<SysMenu> menuList) { - log.info("閰嶇疆瑙掕壊鑿滃崟鍏冲績"); - List<SysRoleMenu> roleMenuList = menuList.stream().map(menu -> { - SysRoleMenu roleMenu = new SysRoleMenu(); - roleMenu.setRoleId(roleId); - roleMenu.setMenuId(menu.getId()); - return roleMenu; - }).collect(Collectors.toList()); - log.info("娓呯┖瑙掕壊鏉冮檺琛ㄤ腑璇ヨ鑹蹭俊鎭�"); - - - // 鍏堝垹闄ゅ師鏉ョ殑璁板綍锛屽啀淇濆瓨鏂扮殑 - sysRoleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, roleId)); - sysRoleMenuService.saveBatch(roleMenuList); - - // 鍒犻櫎缂撳瓨 - sysUserService.clearUserAuthorityInfoByRoleId(roleId); - return "success"; - } -} diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java deleted file mode 100644 index 93ba7fb..0000000 --- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mes.workstation.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.mes.workstation.entity.UpWorkstation; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Select; - -import java.util.Map; - -@Mapper -public interface LoadGlassMapper extends BaseMapper<UpWorkstation> { - //鍒ゆ柇浼樺厛宸ヤ綅鍚哥墖 - @Select("select b.layout_sequence,a.number from up_workstation a left join up_patten_usage b " + - "on a.pattern_width=b.width and a.pattern_height=b.height " + - "and a.pattern_thickness=b.thickness where a.workstation_id=#{id}") - Map<String, Object> selectPriority(int id); - -} diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml index 9918e23..1d19003 100644 --- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml +++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml @@ -14,6 +14,11 @@ username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver + sd: + url: jdbc:mysql://192.168.1.199:3306/sd?serverTimezone=GMT%2b8 + username: root + password: beibo.123/ + driver-class-name: com.mysql.cj.jdbc.Driver cloud: nacos: discovery: diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml index 66f9c31..a8a4157 100644 --- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml +++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml @@ -14,16 +14,11 @@ username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver -# hangzhoumes: -# url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8 -# username: root -# password: beibo.123/ -# driver-class-name: com.mysql.cj.jdbc.Driver -# pp: -# url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8 -# username: root -# password: beibo.123/ -# driver-class-name: com.mysql.cj.jdbc.Driver + sd: + url: jdbc:mysql://192.168.1.199:3306/sd?serverTimezone=GMT%2b8 + username: root + password: beibo.123/ + driver-class-name: com.mysql.cj.jdbc.Driver cloud: nacos: discovery: diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml index c372c41..2c49cb7 100644 --- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml +++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-prod.yml @@ -14,6 +14,11 @@ username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver + sd: + url: jdbc:mysql://192.168.1.199:3306/sd?serverTimezone=GMT%2b8 + username: root + password: beibo.123/ + driver-class-name: com.mysql.cj.jdbc.Driver cloud: nacos: discovery: diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml index 0b433b2..a3a77e9 100644 --- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml +++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml @@ -4,14 +4,25 @@ primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�. datasource: +# hangzhoumes: +# url: jdbc:mysql://192.168.1.199:3306/hangzhoumes?serverTimezone=GMT%2b8 +# username: root +# password: beibo.123/ +# driver-class-name: com.mysql.cj.jdbc.Driver +# +# salve_hangzhoumes: +# url: jdbc:sqlserver://192.168.10.2:1433;databasename=hangzhoumes +# username: sa +# password: beibo.123/ +# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver hangzhoumes: - url: jdbc:mysql://192.168.1.199:3306/hangzhoumes?serverTimezone=GMT%2b8 + url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8 username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: - url: jdbc:sqlserver://192.168.10.2:1433;databasename=hangzhoumes + url: jdbc:sqlserver://10.153.19.150:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml index a5bc31d..b3eae47 100644 --- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml +++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml @@ -4,13 +4,23 @@ primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�. datasource: +# hangzhoumes: +# url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8 +# username: root +# password: beibo.123/ +# driver-class-name: com.mysql.cj.jdbc.Driver +# salve_hangzhoumes: +# url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes +# username: sa +# password: beibo.123/ +# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver hangzhoumes: - url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8 + url: jdbc:mysql:10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8 username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: - url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes + url: jdbc:sqlserver://10.153.19.150:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml index 0a70a4a..12e113b 100644 --- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml +++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml @@ -2,7 +2,7 @@ port: 8084 spring: profiles: - active: cz + active: dev application: name: temperingGlass mybatis-plus: diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java index e5e4608..d6edffc 100644 --- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java +++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java @@ -1,60 +1,60 @@ -//package com.mes; -// -//import com.mes.temperingglass.entity.TemperingGlassInfo; -//import com.mes.temperingglass.service.TemperingAgoService; -//import lombok.extern.slf4j.Slf4j; -//import org.junit.Test; -//import org.junit.runner.RunWith; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.boot.test.context.SpringBootTest; -//import org.springframework.test.context.junit4.SpringRunner; -// -//import java.util.Arrays; -//import java.util.List; -// -///** -// * @Author : zhoush -// * @Date: 2024/3/27 16:37 -// * @Description: -// */ -//@Slf4j -//@RunWith(SpringRunner.class) -//@SpringBootTest(classes = TemperingGlassModuleApplication.class) -//public class TemperingApplicationTest { -// -// @Autowired -// private TemperingAgoService temperingAgoService; -// -// -// @Test -// public void testFindPa() { -// List<TemperingGlassInfo> glass = temperingAgoService.selectIntoGlass(12); -// log.info("杩涚倝涓殑鐜荤拑锛歿}", Arrays.asList(glass)); -// } -// @Test -// public void testFindPa2() { -// List<TemperingGlassInfo> glass = temperingAgoService.selectOutGlass(); -// log.info("宸插嚭涓殑鐜荤拑锛歿}", Arrays.asList(glass)); -// } -// -// @Test -// public void testFindPa3() { -// List<TemperingGlassInfo> glass = temperingAgoService.selectWaitingGlass(); -// log.info("绛夊緟涓殑鐜荤拑锛歿}", Arrays.asList(glass)); -// } -// @Test -// public void testFindPa4() { -// List<TemperingGlassInfo> glass = temperingAgoService.selectOverGlass(); -// log.info("绛夊緟涓殑鐜荤拑锛歿}", Arrays.asList(glass)); -// } -// @Test -// public void testFindPa5() { -// List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId(); -// //杩涚倝涓殑鐜荤拑 -// log.info("鐗堝浘id锛歿}", Arrays.asList(layoutId.get(0).getTemperingLayoutId())); -// List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0).getTemperingLayoutId()); -// log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass)); -// List<TemperingGlassInfo> intoGlass2 = temperingAgoService.selectIntoGlass(layoutId.get(1).getTemperingLayoutId()); -// log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass2)); -// } -//} +package com.mes; + +import com.mes.temperingglass.entity.TemperingGlassInfo; +import com.mes.temperingglass.service.TemperingAgoService; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Arrays; +import java.util.List; + +/** + * @Author : zhoush + * @Date: 2024/3/27 16:37 + * @Description: + */ +@Slf4j +@RunWith(SpringRunner.class) +@SpringBootTest(classes = TemperingGlassModuleApplication.class) +public class TemperingApplicationTest { + + @Autowired + private TemperingAgoService temperingAgoService; + + + @Test + public void testFindPa() { + List<TemperingGlassInfo> glass = temperingAgoService.selectIntoGlass(12); + log.info("杩涚倝涓殑鐜荤拑锛歿}", Arrays.asList(glass)); + } + @Test + public void testFindPa2() { + List<TemperingGlassInfo> glass = temperingAgoService.selectOutGlass(); + log.info("宸插嚭涓殑鐜荤拑锛歿}", Arrays.asList(glass)); + } + + @Test + public void testFindPa3() { + List<TemperingGlassInfo> glass = temperingAgoService.selectWaitingGlass(); + log.info("绛夊緟涓殑鐜荤拑锛歿}", Arrays.asList(glass)); + } + @Test + public void testFindPa4() { + List<TemperingGlassInfo> glass = temperingAgoService.selectOverGlass(); + log.info("绛夊緟涓殑鐜荤拑锛歿}", Arrays.asList(glass)); + } + @Test + public void testFindPa5() { + List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId(); + //杩涚倝涓殑鐜荤拑 + log.info("鐗堝浘id锛歿}", Arrays.asList(layoutId.get(0).getTemperingLayoutId())); + List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0).getTemperingLayoutId()); + log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass)); + List<TemperingGlassInfo> intoGlass2 = temperingAgoService.selectIntoGlass(layoutId.get(1).getTemperingLayoutId()); + log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass2)); + } +} -- Gitblit v1.8.0