diff --git a/apps/hand-factory/api/pocket/deviceEnum.js b/apps/hand-factory/api/pocket/deviceEnum.js new file mode 100644 index 0000000..f0399da --- /dev/null +++ b/apps/hand-factory/api/pocket/deviceEnum.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function listDeviceEnumAll() { + return request({ + url: '/api/deviceEnum/all', + method: 'get' + }) +} + diff --git a/apps/hand-factory/api/pocket/deviceFieldMeta.js b/apps/hand-factory/api/pocket/deviceFieldMeta.js new file mode 100644 index 0000000..9d6f05d --- /dev/null +++ b/apps/hand-factory/api/pocket/deviceFieldMeta.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function getDeviceFieldMetaAll() { + return request({ + url: '/api/deviceFieldMeta/all', + method: 'get' + }) +} + diff --git a/apps/hand-factory/api/pocket/deviceSnapshot.js b/apps/hand-factory/api/pocket/deviceSnapshot.js new file mode 100644 index 0000000..18866cc --- /dev/null +++ b/apps/hand-factory/api/pocket/deviceSnapshot.js @@ -0,0 +1,20 @@ +import request from '@/utils/request' + +// 获取最新N条设备快照 +export function listDeviceSnapshotLatest(params) { + return request({ + url: '/api/deviceSnapshot/latest', + method: 'get', + params + }) +} + +// 按时间范围查询设备快照 +export function listDeviceSnapshotRange(params) { + return request({ + url: '/api/deviceSnapshot/range', + method: 'get', + params + }) +} + diff --git a/apps/hand-factory/components/lines/zinc1.vue b/apps/hand-factory/components/lines/zinc1.vue index e9a661e..3cb144a 100644 --- a/apps/hand-factory/components/lines/zinc1.vue +++ b/apps/hand-factory/components/lines/zinc1.vue @@ -2,8 +2,8 @@ - - + - - - + + + - - - - 🔒 - 该功能未启用 - 镀锌线1实时监控功能暂未启用,请联系管理员 + + + + + Socket + {{ isConnected ? '已连接' : '未连接' }} + + + + 更新时间 + {{ lastUpdateTime }} + + + + 设备数 + {{ deviceDefs.length }} + - - - - - - - - - + + {{ dev.desc }}({{ dev.deviceCode }}) + + + + + + {{ getFieldLabel(fieldName) }} + {{ getFieldUnit(fieldName) }} + + + + + + + + AVG{{ formatNum(fieldTrendMap[dev.deviceCode][fieldName].avg) }} + MAX{{ formatNum(fieldTrendMap[dev.deviceCode][fieldName].max) }} + MIN{{ formatNum(fieldTrendMap[dev.deviceCode][fieldName].min) }} + LAST{{ formatNum(fieldTrendMap[dev.deviceCode][fieldName].last) }} + + + + + 等待 {{ getFieldLabel(fieldName) }} 数据... + + + + + + 等待 {{ dev.desc }} 数据...(滚动到此处加载) + + diff --git a/apps/hand-factory/pages/login.vue b/apps/hand-factory/pages/login.vue index ba3b7ff..2af7dcd 100644 --- a/apps/hand-factory/pages/login.vue +++ b/apps/hand-factory/pages/login.vue @@ -51,8 +51,9 @@ register: false, globalConfig: getApp().globalData.config, loginForm: { - username: "admin", - password: "admin123", + // 1. 修改默认值为空 + username: "", + password: "", code: "", uuid: "" } @@ -67,8 +68,43 @@ this.$tab.reLaunch('/pages/easycode/easycode') } //#endif + + // 2. 页面加载时读取本地存储的账号密码 + this.loadLoginInfo() }, methods: { + // 新增:读取本地存储的登录信息 + loadLoginInfo() { + try { + // 从本地存储获取用户名 + const savedUsername = uni.getStorageSync('login_username') + // 从本地存储获取密码 + const savedPassword = uni.getStorageSync('login_password') + + // 如果有保存的信息,填充到表单 + if (savedUsername) { + this.loginForm.username = savedUsername + } + if (savedPassword) { + this.loginForm.password = savedPassword + } + } catch (e) { + console.error('读取本地登录信息失败:', e) + } + }, + + // 新增:保存登录信息到本地存储 + saveLoginInfo() { + try { + // 保存用户名到本地 + uni.setStorageSync('login_username', this.loginForm.username) + // 保存密码到本地 + uni.setStorageSync('login_password', this.loginForm.password) + } catch (e) { + console.error('保存登录信息失败:', e) + } + }, + // 用户注册 handleUserRegister() { this.$tab.redirectTo(`/pages/register`) @@ -120,6 +156,9 @@ }, // 登录成功后,处理函数 loginSuccess(result) { + // 3. 登录成功后保存账号密码到本地存储 + this.saveLoginInfo() + // 设置用户信息 this.$store.dispatch('GetInfo').then(res => { this.$tab.reLaunch('/pages/index') @@ -177,7 +216,6 @@ text-align: left; padding-left: 15px; } - } .login-btn { @@ -207,5 +245,4 @@ } } } - - + \ No newline at end of file diff --git a/apps/hand-factory/static/pocket.sql b/apps/hand-factory/static/pocket.sql new file mode 100644 index 0000000..29a0e64 --- /dev/null +++ b/apps/hand-factory/static/pocket.sql @@ -0,0 +1,448 @@ +/* +SQLyog Ultimate v12.09 (64 bit) +MySQL - 8.0.43 : Database - klp_pocketfactory +********************************************************************* +*/ + + +/*!40101 SET NAMES utf8 */; + +/*!40101 SET SQL_MODE=''*/; + +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +CREATE DATABASE /*!32312 IF NOT EXISTS*/`klp_pocketfactory` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `klp_pocketfactory`; + +/*Table structure for table `klptcm1_pdi_plan` */ + +DROP TABLE IF EXISTS `klptcm1_pdi_plan`; + +CREATE TABLE `klptcm1_pdi_plan` ( + `COILID` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SEQID` decimal(10,0) DEFAULT NULL, + `SEQUENCENR` decimal(10,0) DEFAULT NULL, + `SCHEDULENR` decimal(10,0) DEFAULT NULL, + `ENTRY_WIDTH` decimal(10,4) DEFAULT NULL, + `ENTRY_THICK` decimal(10,4) DEFAULT NULL, + `ENTRY_LENGTH` decimal(10,4) DEFAULT NULL, + `ENTRY_WEIGHT` decimal(10,4) DEFAULT NULL, + `ENTRY_OUTER_DIAMETER` decimal(10,4) DEFAULT NULL, + `ENTRY_INNER_DIAMETER` decimal(10,4) DEFAULT '508.0000', + `STATUS` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `CUSTOMER` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ORDERNR` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `STEEL_GRADE` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SURFACE_CODE` decimal(10,0) DEFAULT NULL, + `YIELD_POINT` decimal(10,0) DEFAULT NULL, + `WELD_CODE` decimal(1,0) DEFAULT NULL, + `SCRAP_FLAG` decimal(10,0) DEFAULT NULL, + `THICK_TOLMAX` decimal(10,4) DEFAULT NULL, + `THICK_TOLMIN` decimal(10,4) DEFAULT NULL, + `HEADEND_GAUGE_LENGTH` decimal(10,4) DEFAULT NULL, + `TAILEND_GAUGE_LENGTH` decimal(10,4) DEFAULT NULL, + `HEAT_CYCLE` decimal(10,0) DEFAULT NULL, + `COATING_SELECTION` decimal(10,0) DEFAULT NULL, + `AIM_WEIGHT_TOP` decimal(10,4) DEFAULT NULL, + `MAXTOL_WEIGHT_TOP` decimal(10,4) DEFAULT NULL, + `AIM_WEIGHT_BOTTOM` decimal(10,4) DEFAULT NULL, + `MAXTOL_WEIGHT_BOTTOM` decimal(10,4) DEFAULT NULL, + `SPM_FLAG` decimal(10,0) DEFAULT NULL, + `SPM_ELONGATION` decimal(10,4) DEFAULT NULL, + `SPM_ROLLFORCE` decimal(10,4) DEFAULT NULL, + `SPM_PROCESS_TYPE` decimal(10,0) DEFAULT NULL, + `SPM_CONTROL_MODE` decimal(10,0) DEFAULT NULL, + `TLV_FLAG` decimal(10,0) DEFAULT NULL, + `TLV_ELONGATION` decimal(10,4) DEFAULT NULL, + `CHROMATING` decimal(10,0) DEFAULT NULL, + `COATING_CODE` decimal(10,0) DEFAULT NULL, + `OILING_FLAG` decimal(2,0) DEFAULT NULL, + `OILING_TOP` decimal(10,4) DEFAULT NULL, + `OILING_BOTTOM` decimal(10,4) DEFAULT NULL, + `SAMPLE_FLAG` decimal(10,0) DEFAULT NULL, + `SPLIT_FLAG` decimal(2,0) DEFAULT NULL, + `SPLIT_NUM` decimal(10,0) NOT NULL DEFAULT '1', + `EXIT_WEIGHT1` decimal(10,4) DEFAULT NULL, + `WINDING1` decimal(10,0) DEFAULT '1', + `CUT_MODE1` decimal(10,0) DEFAULT NULL, + `EXIT_WEIGHT2` decimal(10,4) DEFAULT NULL, + `WINDING2` decimal(10,0) DEFAULT '1', + `CUT_MODE2` decimal(10,0) DEFAULT NULL, + `EXIT_WEIGHT3` decimal(10,4) DEFAULT NULL, + `WINDING3` decimal(10,0) DEFAULT '1', + `CUT_MODE3` decimal(10,0) DEFAULT NULL, + `EXIT_WEIGHT4` decimal(10,4) DEFAULT NULL, + `WINDING4` decimal(10,0) DEFAULT '1', + `CUT_MODE4` decimal(10,0) DEFAULT NULL, + `EXIT_WEIGHT5` decimal(10,4) DEFAULT NULL, + `WINDING5` decimal(10,0) DEFAULT '1', + `CUT_MODE5` decimal(10,0) DEFAULT NULL, + `EXIT_WEIGHT6` decimal(10,4) DEFAULT NULL, + `WINDING6` decimal(10,0) DEFAULT '1', + `CUT_MODE6` decimal(10,0) DEFAULT NULL, + `EXIT_WEIGHT7` decimal(10,4) DEFAULT NULL, + `WINDING7` decimal(10,0) DEFAULT '1', + `CUT_MODE7` decimal(10,0) DEFAULT NULL, + `TIMESTAMP` datetime DEFAULT CURRENT_TIMESTAMP, + `ONLINE_DATE` datetime DEFAULT CURRENT_TIMESTAMP, + `START_DATE` datetime DEFAULT CURRENT_TIMESTAMP, + `END_DATE` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`COILID`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +/*Table structure for table `klptcm1_pdo_excoil` */ + +DROP TABLE IF EXISTS `klptcm1_pdo_excoil`; + +CREATE TABLE `klptcm1_pdo_excoil` ( + `ENCOILID` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `GRADE` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `THICK_QUALITY` decimal(15,4) DEFAULT NULL, + `SHAPE_QUALITY` decimal(15,4) DEFAULT NULL, + `ENTRY_THICK` decimal(15,4) DEFAULT NULL, + `EXIT_THICK` decimal(15,4) DEFAULT NULL, + `ENTRY_WIDTH` decimal(15,4) DEFAULT NULL, + `EXIT_WIDTH` decimal(15,4) DEFAULT NULL, + `ENTRY_WEIGHT` decimal(15,4) DEFAULT NULL, + `EXIT_WEIGHT` decimal(15,4) DEFAULT NULL, + `ONLINE_DATE` datetime DEFAULT CURRENT_TIMESTAMP, + `START_DATE` datetime DEFAULT CURRENT_TIMESTAMP, + `END_DATE` datetime DEFAULT CURRENT_TIMESTAMP, + `INSDATE` datetime DEFAULT CURRENT_TIMESTAMP, + `SHIFT` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `CREW` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `EXCOILID` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +/*Table structure for table `klptcm1_plan_trace` */ + +DROP TABLE IF EXISTS `klptcm1_plan_trace`; + +CREATE TABLE `klptcm1_plan_trace` ( + `POSITION_NAME` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `COILID` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `GRADE` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ENTRY_THICK` decimal(15,4) DEFAULT NULL, + `EXIT_THICK` decimal(15,4) DEFAULT NULL, + `ENTRY_WIDTH` decimal(15,4) DEFAULT NULL, + `EXIT_WIDTH` decimal(15,4) DEFAULT NULL, + `ENTRY_WEIGHT` decimal(15,4) DEFAULT NULL, + `ENTRY_LENGTH` decimal(15,4) DEFAULT NULL, + `ENTRY_INNER_DIAMETER` decimal(10,0) DEFAULT '762', + `ENTRY_OUTER_DIAMETER` decimal(10,0) DEFAULT NULL, + `ROLL_MODE` decimal(1,0) DEFAULT NULL, + `NEXT_UNIT` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'C000', + `L1MAPIDX` decimal(3,0) NOT NULL, + `INSDATE` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`L1MAPIDX`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +/*Table structure for table `klptcm1_pro_plant_state_current` */ + +DROP TABLE IF EXISTS `klptcm1_pro_plant_state_current`; + +CREATE TABLE `klptcm1_pro_plant_state_current` ( + `INSDATE` datetime DEFAULT CURRENT_TIMESTAMP, + `YEAR` decimal(10,0) DEFAULT NULL, + `MONTH` decimal(10,0) DEFAULT NULL, + `DAY` decimal(10,0) DEFAULT NULL, + `HOUR` decimal(10,0) DEFAULT NULL, + `MINUTE` decimal(10,0) DEFAULT NULL, + `TYPE` decimal(10,0) DEFAULT NULL, + `VALUE1` decimal(15,4) DEFAULT NULL, + `VALUE2` decimal(15,4) DEFAULT NULL, + `VALUE3` decimal(15,4) DEFAULT NULL, + `VALUE4` decimal(15,4) DEFAULT NULL, + `VALUE5` decimal(15,4) DEFAULT NULL, + `VALUE6` decimal(15,4) DEFAULT NULL, + `VALUE7` decimal(15,4) DEFAULT NULL, + `VALUE8` decimal(15,4) DEFAULT NULL, + `VALUE9` decimal(15,4) DEFAULT NULL, + `VALUE10` decimal(15,4) DEFAULT NULL, + `VALUE11` decimal(15,4) DEFAULT NULL, + `VALUE12` decimal(15,4) DEFAULT NULL, + `VALUE13` decimal(15,4) DEFAULT NULL, + `VALUE14` decimal(15,4) DEFAULT NULL, + `VALUE15` decimal(15,4) DEFAULT NULL, + `VALUE16` decimal(15,4) DEFAULT NULL, + `VALUE17` decimal(15,4) DEFAULT NULL, + `VALUE18` decimal(15,4) DEFAULT NULL, + `VALUE19` decimal(15,4) DEFAULT NULL, + `VALUE20` decimal(15,4) DEFAULT NULL, + `VALUE21` decimal(15,4) DEFAULT NULL, + `VALUE22` decimal(15,4) DEFAULT NULL, + `VALUE23` decimal(15,4) DEFAULT NULL, + `VALUE24` decimal(15,4) DEFAULT NULL, + `VALUE25` decimal(15,4) DEFAULT NULL, + `VALUE26` decimal(15,4) DEFAULT NULL, + `VALUE27` decimal(15,4) DEFAULT NULL, + `VALUE28` decimal(15,4) DEFAULT NULL, + `VALUE29` decimal(15,4) DEFAULT NULL, + `VALUE30` decimal(15,4) DEFAULT NULL, + `VALUE31` decimal(15,4) DEFAULT NULL, + `VALUE32` decimal(15,4) DEFAULT NULL, + `VALUE33` decimal(15,4) DEFAULT NULL, + `VALUE34` decimal(15,4) DEFAULT NULL, + `VALUE35` decimal(15,4) DEFAULT NULL, + `VALUE36` decimal(15,4) DEFAULT NULL, + `VALUE37` decimal(15,4) DEFAULT NULL, + `VALUE38` decimal(15,4) DEFAULT NULL, + `VALUE39` decimal(15,4) DEFAULT NULL, + `VALUE40` decimal(15,4) DEFAULT NULL, + `VALUE41` decimal(15,4) DEFAULT NULL, + `VALUE42` decimal(15,4) DEFAULT NULL, + `VALUE43` decimal(15,4) DEFAULT NULL, + `VALUE44` decimal(15,4) DEFAULT NULL, + `VALUE45` decimal(15,4) DEFAULT NULL, + `VALUE46` decimal(15,4) DEFAULT NULL, + `VALUE47` decimal(15,4) DEFAULT NULL, + `VALUE48` decimal(15,4) DEFAULT NULL, + `VALUE49` decimal(15,4) DEFAULT NULL, + `VALUE50` decimal(15,4) DEFAULT NULL, + `VALUE51` decimal(15,4) DEFAULT NULL, + `VALUE52` decimal(15,4) DEFAULT NULL, + `VALUE53` decimal(15,4) DEFAULT NULL, + `VALUE54` decimal(15,4) DEFAULT NULL, + `VALUE55` decimal(15,4) DEFAULT NULL, + `VALUE56` decimal(15,4) DEFAULT NULL, + `VALUE57` decimal(15,4) DEFAULT NULL, + `VALUE58` decimal(15,4) DEFAULT NULL, + `VALUE59` decimal(15,4) DEFAULT NULL, + `VALUE60` decimal(15,4) DEFAULT NULL, + `VALUE61` decimal(15,4) DEFAULT NULL, + `VALUE62` decimal(15,4) DEFAULT NULL, + `VALUE63` decimal(15,4) DEFAULT NULL, + `VALUE64` decimal(15,4) DEFAULT NULL, + `VALUE65` decimal(15,4) DEFAULT NULL, + `VALUE66` decimal(15,4) DEFAULT NULL, + `VALUE67` decimal(15,4) DEFAULT NULL, + `VALUE68` decimal(15,4) DEFAULT NULL, + `VALUE69` decimal(15,4) DEFAULT NULL, + `VALUE70` decimal(15,4) DEFAULT NULL, + `VALUE71` decimal(15,4) DEFAULT NULL, + `VALUE72` decimal(15,4) DEFAULT NULL, + `VALUE73` decimal(15,4) DEFAULT NULL, + `VALUE74` decimal(15,4) DEFAULT NULL, + `VALUE75` decimal(15,4) DEFAULT NULL, + `VALUE76` decimal(15,4) DEFAULT NULL, + `VALUE77` decimal(15,4) DEFAULT NULL, + `VALUE78` decimal(15,4) DEFAULT NULL, + `VALUE79` decimal(15,4) DEFAULT NULL, + `VALUE80` decimal(15,4) DEFAULT NULL, + `VALUE81` decimal(15,4) DEFAULT NULL, + `VALUE82` decimal(15,4) DEFAULT NULL, + `VALUE83` decimal(15,4) DEFAULT NULL, + `VALUE84` decimal(15,4) DEFAULT NULL, + `VALUE85` decimal(15,4) DEFAULT NULL, + `VALUE86` decimal(15,4) DEFAULT NULL, + `VALUE87` decimal(15,4) DEFAULT NULL, + `VALUE88` decimal(15,4) DEFAULT NULL, + `VALUE89` decimal(15,4) DEFAULT NULL, + `VALUE90` decimal(15,4) DEFAULT NULL, + `VALUE91` decimal(15,4) DEFAULT NULL, + `VALUE92` decimal(15,4) DEFAULT NULL, + `VALUE93` decimal(15,4) DEFAULT NULL, + `VALUE94` decimal(15,4) DEFAULT NULL, + `VALUE95` decimal(15,4) DEFAULT NULL, + `VALUE96` decimal(15,4) DEFAULT NULL, + `VALUE97` decimal(15,4) DEFAULT NULL, + `VALUE98` decimal(15,4) DEFAULT NULL, + `VALUE99` decimal(15,4) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +/*Table structure for table `klptcm1_pro_plant_state_define` */ + +DROP TABLE IF EXISTS `klptcm1_pro_plant_state_define`; + +CREATE TABLE `klptcm1_pro_plant_state_define` ( + `ID` decimal(10,0) DEFAULT NULL, + `NAME` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `UNITS` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `COMMENTS` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `INSDATE` datetime DEFAULT CURRENT_TIMESTAMP, + `MODELTYPE` decimal(10,0) DEFAULT '2' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +/*Table structure for table `klptcm1_pro_plant_state_history` */ + +DROP TABLE IF EXISTS `klptcm1_pro_plant_state_history`; + +CREATE TABLE `klptcm1_pro_plant_state_history` ( + `INSDATE` datetime DEFAULT CURRENT_TIMESTAMP, + `YEAR` decimal(10,0) DEFAULT NULL, + `MONTH` decimal(10,0) DEFAULT NULL, + `DAY` decimal(10,0) DEFAULT NULL, + `HOUR` decimal(10,0) DEFAULT NULL, + `MINUTE` decimal(10,0) DEFAULT NULL, + `TYPE` decimal(10,0) DEFAULT NULL, + `VALUE1` decimal(15,4) DEFAULT NULL, + `VALUE2` decimal(15,4) DEFAULT NULL, + `VALUE3` decimal(15,4) DEFAULT NULL, + `VALUE4` decimal(15,4) DEFAULT NULL, + `VALUE5` decimal(15,4) DEFAULT NULL, + `VALUE6` decimal(15,4) DEFAULT NULL, + `VALUE7` decimal(15,4) DEFAULT NULL, + `VALUE8` decimal(15,4) DEFAULT NULL, + `VALUE9` decimal(15,4) DEFAULT NULL, + `VALUE10` decimal(15,4) DEFAULT NULL, + `VALUE11` decimal(15,4) DEFAULT NULL, + `VALUE12` decimal(15,4) DEFAULT NULL, + `VALUE13` decimal(15,4) DEFAULT NULL, + `VALUE14` decimal(15,4) DEFAULT NULL, + `VALUE15` decimal(15,4) DEFAULT NULL, + `VALUE16` decimal(15,4) DEFAULT NULL, + `VALUE17` decimal(15,4) DEFAULT NULL, + `VALUE18` decimal(15,4) DEFAULT NULL, + `VALUE19` decimal(15,4) DEFAULT NULL, + `VALUE20` decimal(15,4) DEFAULT NULL, + `VALUE21` decimal(15,4) DEFAULT NULL, + `VALUE22` decimal(15,4) DEFAULT NULL, + `VALUE23` decimal(15,4) DEFAULT NULL, + `VALUE24` decimal(15,4) DEFAULT NULL, + `VALUE25` decimal(15,4) DEFAULT NULL, + `VALUE26` decimal(15,4) DEFAULT NULL, + `VALUE27` decimal(15,4) DEFAULT NULL, + `VALUE28` decimal(15,4) DEFAULT NULL, + `VALUE29` decimal(15,4) DEFAULT NULL, + `VALUE30` decimal(15,4) DEFAULT NULL, + `VALUE31` decimal(15,4) DEFAULT NULL, + `VALUE32` decimal(15,4) DEFAULT NULL, + `VALUE33` decimal(15,4) DEFAULT NULL, + `VALUE34` decimal(15,4) DEFAULT NULL, + `VALUE35` decimal(15,4) DEFAULT NULL, + `VALUE36` decimal(15,4) DEFAULT NULL, + `VALUE37` decimal(15,4) DEFAULT NULL, + `VALUE38` decimal(15,4) DEFAULT NULL, + `VALUE39` decimal(15,4) DEFAULT NULL, + `VALUE40` decimal(15,4) DEFAULT NULL, + `VALUE41` decimal(15,4) DEFAULT NULL, + `VALUE42` decimal(15,4) DEFAULT NULL, + `VALUE43` decimal(15,4) DEFAULT NULL, + `VALUE44` decimal(15,4) DEFAULT NULL, + `VALUE45` decimal(15,4) DEFAULT NULL, + `VALUE46` decimal(15,4) DEFAULT NULL, + `VALUE47` decimal(15,4) DEFAULT NULL, + `VALUE48` decimal(15,4) DEFAULT NULL, + `VALUE49` decimal(15,4) DEFAULT NULL, + `VALUE50` decimal(15,4) DEFAULT NULL, + `VALUE51` decimal(15,4) DEFAULT NULL, + `VALUE52` decimal(15,4) DEFAULT NULL, + `VALUE53` decimal(15,4) DEFAULT NULL, + `VALUE54` decimal(15,4) DEFAULT NULL, + `VALUE55` decimal(15,4) DEFAULT NULL, + `VALUE56` decimal(15,4) DEFAULT NULL, + `VALUE57` decimal(15,4) DEFAULT NULL, + `VALUE58` decimal(15,4) DEFAULT NULL, + `VALUE59` decimal(15,4) DEFAULT NULL, + `VALUE60` decimal(15,4) DEFAULT NULL, + `VALUE61` decimal(15,4) DEFAULT NULL, + `VALUE62` decimal(15,4) DEFAULT NULL, + `VALUE63` decimal(15,4) DEFAULT NULL, + `VALUE64` decimal(15,4) DEFAULT NULL, + `VALUE65` decimal(15,4) DEFAULT NULL, + `VALUE66` decimal(15,4) DEFAULT NULL, + `VALUE67` decimal(15,4) DEFAULT NULL, + `VALUE68` decimal(15,4) DEFAULT NULL, + `VALUE69` decimal(15,4) DEFAULT NULL, + `VALUE70` decimal(15,4) DEFAULT NULL, + `VALUE71` decimal(15,4) DEFAULT NULL, + `VALUE72` decimal(15,4) DEFAULT NULL, + `VALUE73` decimal(15,4) DEFAULT NULL, + `VALUE74` decimal(15,4) DEFAULT NULL, + `VALUE75` decimal(15,4) DEFAULT NULL, + `VALUE76` decimal(15,4) DEFAULT NULL, + `VALUE77` decimal(15,4) DEFAULT NULL, + `VALUE78` decimal(15,4) DEFAULT NULL, + `VALUE79` decimal(15,4) DEFAULT NULL, + `VALUE80` decimal(15,4) DEFAULT NULL, + `VALUE81` decimal(15,4) DEFAULT NULL, + `VALUE82` decimal(15,4) DEFAULT NULL, + `VALUE83` decimal(15,4) DEFAULT NULL, + `VALUE84` decimal(15,4) DEFAULT NULL, + `VALUE85` decimal(15,4) DEFAULT NULL, + `VALUE86` decimal(15,4) DEFAULT NULL, + `VALUE87` decimal(15,4) DEFAULT NULL, + `VALUE88` decimal(15,4) DEFAULT NULL, + `VALUE89` decimal(15,4) DEFAULT NULL, + `VALUE90` decimal(15,4) DEFAULT NULL, + `VALUE91` decimal(15,4) DEFAULT NULL, + `VALUE92` decimal(15,4) DEFAULT NULL, + `VALUE93` decimal(15,4) DEFAULT NULL, + `VALUE94` decimal(15,4) DEFAULT NULL, + `VALUE95` decimal(15,4) DEFAULT NULL, + `VALUE96` decimal(15,4) DEFAULT NULL, + `VALUE97` decimal(15,4) DEFAULT NULL, + `VALUE98` decimal(15,4) DEFAULT NULL, + `VALUE99` decimal(15,4) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +/*Table structure for table `klptcm1_pro_stoppage` */ + +DROP TABLE IF EXISTS `klptcm1_pro_stoppage`; + +CREATE TABLE `klptcm1_pro_stoppage` ( + `STOPID` decimal(10,0) DEFAULT NULL, + `ENCOILID` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `SHIFT` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `CREW` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `AREA` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `UNIT` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `SETON` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `REMARK` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `START_DATE` datetime DEFAULT CURRENT_TIMESTAMP, + `END_DATE` datetime DEFAULT CURRENT_TIMESTAMP, + `DURATION` decimal(10,0) DEFAULT NULL, + `INS_DATE` datetime DEFAULT CURRENT_TIMESTAMP, + `STOP_TYPE` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +/*Table structure for table `klptcm1_roll_history` */ + +DROP TABLE IF EXISTS `klptcm1_roll_history`; + +CREATE TABLE `klptcm1_roll_history` ( + `ROLLID` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `CHANGEID` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SETON` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `TYPE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `POSITION` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `STANDID` decimal(2,0) DEFAULT NULL, + `COMPOSITION` decimal(2,0) DEFAULT NULL, + `DIAMETER` decimal(20,6) DEFAULT NULL, + `ROUGH` decimal(20,6) DEFAULT NULL, + `CROWN` decimal(20,6) DEFAULT NULL, + `ROLLED_LENGTH` decimal(20,6) DEFAULT NULL, + `ROLLED_WEIGHT` decimal(20,6) DEFAULT NULL, + `ROLLED_COUNT` decimal(10,0) DEFAULT NULL, + `TOTAL_ROLLED_LENGTH` decimal(20,6) DEFAULT NULL, + `TOTAL_ROLLED_WEIGHT` decimal(20,6) DEFAULT NULL, + `TOTAL_ROLLED_COUNT` decimal(10,0) DEFAULT NULL, + `GRIND_COUNT` decimal(10,0) DEFAULT NULL, + `CHANGE_TYPE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `INSTAL_TIME` datetime DEFAULT NULL, + `DEINSTAL_TIME` datetime DEFAULT NULL, + `CHANGE_TIME` datetime DEFAULT NULL, + `SEND` decimal(1,0) DEFAULT NULL, + `SHIFT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `CREW` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `SHAPE` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +/*Table structure for table `klptcm1_shift_current` */ + +DROP TABLE IF EXISTS `klptcm1_shift_current`; + +CREATE TABLE `klptcm1_shift_current` ( + `SHIFT` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `CREW` decimal(10,0) DEFAULT NULL, + `SEQ_NUM` decimal(10,0) DEFAULT NULL, + `SYS_TIME` datetime DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/apps/hand-factory/utils/socketMeasure.js b/apps/hand-factory/utils/socketMeasure.js new file mode 100644 index 0000000..cf89815 --- /dev/null +++ b/apps/hand-factory/utils/socketMeasure.js @@ -0,0 +1,62 @@ +import config from '@/config' + +/** + * 测量数据 WebSocket(与 l2/socket/index.vue 类似) + * 默认订阅 type=track_measure + */ +export function createMeasureSocket({ + type = 'track_measure', + onOpen, + onClose, + onError, + onMessage +} = {}) { + let socket = null + let manualClose = false + + const wsBase = (config.wsUrl || config.baseUrl || '').replace(/^http/, 'ws') + const url = `${wsBase}/websocket?type=${type}` + + function connect() { + manualClose = false + socket = new WebSocket(url) + + socket.onopen = () => { + onOpen && onOpen() + } + + socket.onmessage = (evt) => { + onMessage && onMessage(evt.data) + } + + socket.onerror = (err) => { + onError && onError(err) + } + + socket.onclose = (evt) => { + onClose && onClose(evt) + if (!manualClose) { + setTimeout(connect, 3000) + } + } + } + + function close() { + manualClose = true + if (socket) { + socket.close(1000, 'client close') + socket = null + } + } + + function send(data) { + if (socket && socket.readyState === WebSocket.OPEN) { + socket.send(JSON.stringify(data)); + } else { + console.error('WebSocket is not open. Cannot send message.'); + } + } + + return { connect, close, send } +} + diff --git a/apps/l2/src/api/l2/pdo.js b/apps/l2/src/api/l2/pdo.js index f639514..43bc06b 100644 --- a/apps/l2/src/api/l2/pdo.js +++ b/apps/l2/src/api/l2/pdo.js @@ -68,4 +68,17 @@ export function deletePdo(excoilid, planId) { }) } +/** + * PDO - 下载质保单(单卷) + * @param {string} excoilid 成品卷号 + * @returns {Promise} + */ +export function downloadWarranty(excoilid) { + return l2Request({ + method: 'get', + url: `/api/pdo/warranty/download/${excoilid}`, + responseType: 'blob' + }) +} + diff --git a/apps/l2/src/views/l2/pdo/index.vue b/apps/l2/src/views/l2/pdo/index.vue index 000855c..d857a30 100644 --- a/apps/l2/src/views/l2/pdo/index.vue +++ b/apps/l2/src/views/l2/pdo/index.vue @@ -79,7 +79,7 @@
- +
@@ -535,4 +535,4 @@ export default { height: 100%; padding-left: 15px; } - \ No newline at end of file + diff --git a/apps/l2/src/views/l2/send/drive.vue b/apps/l2/src/views/l2/send/drive.vue index 81d4b07..eff3eca 100644 --- a/apps/l2/src/views/l2/send/drive.vue +++ b/apps/l2/src/views/l2/send/drive.vue @@ -17,6 +17,50 @@
+ +
+
+ + 生产队列 + +
+
+
+
+ + + {{ plan.status === 'PRODUCING' ? '生产中' : + plan.status === 'READY' ? '就绪' : '新建' }} + +
+
+ {{ plan.planid }} + {{ plan.coilid }} +
+
+
+ 暂无生产计划 +
+
+
+
@@ -60,10 +104,19 @@ type="primary" size="mini" icon="el-icon-s-promotion" - @click="handleSend(setup)" + @click="handleSendCurrent(setup)" :loading="setup.sending" > - 下发 + 当前计划下发 + + + 下一计划下发
@@ -103,6 +156,7 @@ import { listSetup } from '@/api/business/setup' import { createSendJob, executeSendJob } from '@/api/l2/sendJob' import { getLastSuccess } from '@/api/l2/sendTemplate' +import { listPlan } from '@/api/l2/plan' // 传动字段定义(中文界面,贴合工业场景) const DRIVE_FIELDS = [ @@ -165,6 +219,8 @@ export default { loading: false, lastSuccess: null, setups: [], + planQueueLoading: false, + planQueue: [], driveFields: DRIVE_FIELDS, driveAddress: { ...DRIVE_ADDRESS } } @@ -172,8 +228,53 @@ export default { created() { this.reload() }, + computed: { + // 生产队列(不含已完成),按优先级排序:生产中 > 就绪 > 新建 + sortedPlanQueue() { + const statusPriority = { PRODUCING: 1, READY: 2, NEW: 3 } + return (this.planQueue || []).slice().sort((a, b) => { + const pa = statusPriority[a.status] || 999 + const pb = statusPriority[b.status] || 999 + return pa - pb + }) + }, + // 下一计划:队列中第一个非生产中计划(READY/NEW);若没有则取队列第一个 + nextPlan() { + const list = this.sortedPlanQueue + if (!list.length) return null + const next = list.find(p => p.status !== 'PRODUCING') + return next || list[0] + } + }, methods: { + // 获取生产计划队列 + async getPlanQueue() { + this.planQueueLoading = true + try { + // 查询状态为 PRODUCING, READY, NEW 的计划 + const res = await listPlan({ + status: 'PRODUCING,READY,NEW', + pageSize: 100, // 获取足够多的计划 + pageNum: 1 + }) + this.planQueue = res.data || [] + } catch (e) { + console.error('获取计划队列失败:', e) + this.$message.error('获取计划队列失败') + } finally { + this.planQueueLoading = false + } + }, + async reload() { + // 同时加载计划队列和设置 + await Promise.all([ + this.getPlanQueue(), + this.loadSetups() + ]) + }, + + async loadSetups() { this.loading = true try { // 1. 获取传动模块上次成功下发数据 @@ -204,7 +305,8 @@ export default { return { ...s, params, - sending: false + sending: false, + sendingNext: false } }) } catch (e) { @@ -242,7 +344,7 @@ export default { return new Date(t).toLocaleString() }, - handleSend(setup) { + handleSendCurrent(setup) { this.$confirm( `确认要下发【${setup.coilid || '-'}】钢卷的传动参数吗?`, '提示', @@ -254,29 +356,53 @@ export default { ).then(() => this.doSend(setup)).catch(() => {}) }, - async doSend(setup) { - setup.sending = true + handleSendNext(setup) { + if (!this.nextPlan) { + this.$message.warning('暂无下一计划') + return + } + const plan = this.nextPlan + this.$confirm( + `确认要按下一计划【${plan.coilid || '-'}】下发传动参数吗?`, + '提示', + { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + } + ).then(() => this.doSendNextPlan(setup, plan)).catch(() => {}) + }, + + async doSend(setup, plan) { + const isNextPlan = !!plan + if (isNextPlan) { + setup.sendingNext = true + } else { + setup.sending = true + } + try { const items = this.driveFields.map(f => ({ paramCode: f.key, address: this.driveAddress[f.key], valueRaw: String(setup.params[f.key] || ''), setTime: new Date() - })).filter(it => !!it.address) // 过滤无OPC地址的项 + })).filter(it => !!it.address) if (!items.length) { this.$message.warning('OPC地址未配置,无可下发内容') return } + const bizKey = isNextPlan ? plan.coilid : setup.coilid const dto = { deviceName: 'CGL_LINE_1', - bizKey: setup.coilid, + bizKey: bizKey, groups: [ { groupNo: 1, groupType: 'DRIVE', - groupName: `传动参数_${setup.coilid || ''}`, + groupName: `传动参数_${bizKey || ''}`, items } ] @@ -294,8 +420,16 @@ export default { console.error(e) this.$message.error(e.message || '下发失败') } finally { - setup.sending = false + if (isNextPlan) { + setup.sendingNext = false + } else { + setup.sending = false + } } + }, + + doSendNextPlan(setup, plan) { + this.doSend(setup, plan) } } } @@ -303,6 +437,60 @@ export default { \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4823c88 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,166 @@ +{ + "name": "my-turborepo", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "my-turborepo", + "devDependencies": { + "turbo": "^2.5.8" + } + }, + "node_modules/turbo": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.6.3.tgz", + "integrity": "sha512-bf6YKUv11l5Xfcmg76PyWoy/e2vbkkxFNBGJSnfdSXQC33ZiUfutYh6IXidc5MhsnrFkWfdNNLyaRk+kHMLlwA==", + "dev": true, + "bin": { + "turbo": "bin/turbo" + }, + "optionalDependencies": { + "turbo-darwin-64": "2.6.3", + "turbo-darwin-arm64": "2.6.3", + "turbo-linux-64": "2.6.3", + "turbo-linux-arm64": "2.6.3", + "turbo-windows-64": "2.6.3", + "turbo-windows-arm64": "2.6.3" + } + }, + "node_modules/turbo-darwin-64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.6.3.tgz", + "integrity": "sha512-BlJJDc1CQ7SK5Y5qnl7AzpkvKSnpkfPmnA+HeU/sgny3oHZckPV2776ebO2M33CYDSor7+8HQwaodY++IINhYg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/turbo-darwin-arm64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.6.3.tgz", + "integrity": "sha512-MwVt7rBKiOK7zdYerenfCRTypefw4kZCue35IJga9CH1+S50+KTiCkT6LBqo0hHeoH2iKuI0ldTF2a0aB72z3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/turbo-linux-64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.6.3.tgz", + "integrity": "sha512-cqpcw+dXxbnPtNnzeeSyWprjmuFVpHJqKcs7Jym5oXlu/ZcovEASUIUZVN3OGEM6Y/OTyyw0z09tOHNt5yBAVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-linux-arm64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.6.3.tgz", + "integrity": "sha512-MterpZQmjXyr4uM7zOgFSFL3oRdNKeflY7nsjxJb2TklsYqiu3Z9pQ4zRVFFH8n0mLGna7MbQMZuKoWqqHb45w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-windows-64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.6.3.tgz", + "integrity": "sha512-biDU70v9dLwnBdLf+daoDlNJVvqOOP8YEjqNipBHzgclbQlXbsi6Gqqelp5er81Qo3BiRgmTNx79oaZQTPb07Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/turbo-windows-arm64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.6.3.tgz", + "integrity": "sha512-dDHVKpSeukah3VsI/xMEKeTnV9V9cjlpFSUs4bmsUiLu3Yv2ENlgVEZv65wxbeE0bh0jjpmElDT+P1KaCxArQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + } + }, + "dependencies": { + "turbo": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.6.3.tgz", + "integrity": "sha512-bf6YKUv11l5Xfcmg76PyWoy/e2vbkkxFNBGJSnfdSXQC33ZiUfutYh6IXidc5MhsnrFkWfdNNLyaRk+kHMLlwA==", + "dev": true, + "requires": { + "turbo-darwin-64": "2.6.3", + "turbo-darwin-arm64": "2.6.3", + "turbo-linux-64": "2.6.3", + "turbo-linux-arm64": "2.6.3", + "turbo-windows-64": "2.6.3", + "turbo-windows-arm64": "2.6.3" + } + }, + "turbo-darwin-64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.6.3.tgz", + "integrity": "sha512-BlJJDc1CQ7SK5Y5qnl7AzpkvKSnpkfPmnA+HeU/sgny3oHZckPV2776ebO2M33CYDSor7+8HQwaodY++IINhYg==", + "dev": true, + "optional": true + }, + "turbo-darwin-arm64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.6.3.tgz", + "integrity": "sha512-MwVt7rBKiOK7zdYerenfCRTypefw4kZCue35IJga9CH1+S50+KTiCkT6LBqo0hHeoH2iKuI0ldTF2a0aB72z3w==", + "dev": true, + "optional": true + }, + "turbo-linux-64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.6.3.tgz", + "integrity": "sha512-cqpcw+dXxbnPtNnzeeSyWprjmuFVpHJqKcs7Jym5oXlu/ZcovEASUIUZVN3OGEM6Y/OTyyw0z09tOHNt5yBAVg==", + "dev": true, + "optional": true + }, + "turbo-linux-arm64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.6.3.tgz", + "integrity": "sha512-MterpZQmjXyr4uM7zOgFSFL3oRdNKeflY7nsjxJb2TklsYqiu3Z9pQ4zRVFFH8n0mLGna7MbQMZuKoWqqHb45w==", + "dev": true, + "optional": true + }, + "turbo-windows-64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.6.3.tgz", + "integrity": "sha512-biDU70v9dLwnBdLf+daoDlNJVvqOOP8YEjqNipBHzgclbQlXbsi6Gqqelp5er81Qo3BiRgmTNx79oaZQTPb07Q==", + "dev": true, + "optional": true + }, + "turbo-windows-arm64": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.6.3.tgz", + "integrity": "sha512-dDHVKpSeukah3VsI/xMEKeTnV9V9cjlpFSUs4bmsUiLu3Yv2ENlgVEZv65wxbeE0bh0jjpmElDT+P1KaCxArQQ==", + "dev": true, + "optional": true + } + } +}