Browse Source

feat: 补全石斑鱼主板参数配置,新增收费策略、电机扩展、TTS 语音等约 45 个可调参数

- DeviceConfig 实体新增收费扩展(车位免费时间/超时策略/最低最高消费)、时区、登录超时、电机扩展(清水泡沫联动/流量收费)、功能开关(镀膜/吹气/水流传感器)、TTS 语音(~30个)等字段
- 修复 DeviceConfigMapper.xml 中 5 个价格字段属性名映射 bug(waterPrice 等→priceWater 等)
- 前端 PC 端配置表单重组为 7 个分组,新增收费策略、电机扩展、完整 TTS 语音配置
- 前端 H5 端同步补全新参数字段
- 远程控制面板新增 timezone、空闲超时策略、联动开关等运维参数
- 新增数据库迁移脚本 docs/sql/device_config_add_columns.sql

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline 2 days ago
parent
commit
208b994fc4

+ 117 - 28
admin-h5/src/pages/setting/device-config-detail.vue

@@ -64,12 +64,24 @@
         </view>
         <view class="form-item">
           <text class="label">屏幕类型</text>
-          <input 
-            class="input" 
-            v-model="configForm.screenType" 
+          <input
+            class="input"
+            v-model="configForm.screenType"
             placeholder="0:不支持视频 1:支持视频"
           />
         </view>
+        <view class="form-item">
+          <text class="label">水流量传感器</text>
+          <input class="input" type="number" v-model="configForm.sensorWater" placeholder="0=未安装, 1=已安装"/>
+        </view>
+        <view class="form-item">
+          <text class="label">镀膜功能开关</text>
+          <input class="input" type="number" v-model="configForm.coatMode" placeholder="0=关, 1=开"/>
+        </view>
+        <view class="form-item">
+          <text class="label">吹气功能开关</text>
+          <input class="input" type="number" v-model="configForm.blowMode" placeholder="0=关, 1=开"/>
+        </view>
         <view class="form-item">
           <text class="label">屏幕左下方文本</text>
           <input 
@@ -88,14 +100,47 @@
         </view>
       </view>
       
+      <!-- 收费策略 -->
+      <view class="form-section">
+        <text class="section-title">收费策略</text>
+        <view class="form-item">
+          <text class="label">车位免费时间(秒)</text>
+          <input class="input" type="number" v-model="configForm.spaceTimeoutSeconds" placeholder="1800=免费30分钟"/>
+        </view>
+        <view class="form-item">
+          <text class="label">车位超时收费方式</text>
+          <input class="input" type="number" v-model="configForm.spaceTimeoutMode" placeholder="0=只收超时费, 1=收全部"/>
+        </view>
+        <view class="form-item">
+          <text class="label">最低消费(元)</text>
+          <input class="input" type="number" v-model="configForm.amountMinLimit" placeholder="0=不限制"/>
+        </view>
+        <view class="form-item">
+          <text class="label">最高消费(元)</text>
+          <input class="input" type="number" v-model="configForm.prepayMoney" placeholder="0=不限制"/>
+        </view>
+        <view class="form-item">
+          <text class="label">快速开机金额(元)</text>
+          <input class="input" type="number" v-model="configForm.quickOpenMoney" placeholder="0=关闭此功能"/>
+        </view>
+        <view class="form-item">
+          <text class="label">空闲超时策略</text>
+          <input class="input" type="number" v-model="configForm.idleTimeoutStrategy" placeholder="0=关机, 1=扣费"/>
+        </view>
+        <view class="form-item">
+          <text class="label">不操作启用收费</text>
+          <input class="input" type="number" v-model="configForm.priceCountdown" placeholder="一段时间不操作设备启用收费"/>
+        </view>
+      </view>
+
       <!-- 时间参数 -->
       <view class="form-section">
         <text class="section-title">时间参数</text>
         <view class="form-item">
           <text class="label">自动启动</text>
           <view class="switch-container">
-            <switch 
-              :checked="configForm.motorFlowOn" 
+            <switch
+              :checked="configForm.motorFlowOn"
               @change="configForm.motorFlowOn = $event.detail.value"
               class="switch"
             />
@@ -105,8 +150,8 @@
         <view class="form-item">
           <text class="label">自动关闭</text>
           <view class="switch-container">
-            <switch 
-              :checked="configForm.motorFlowOff" 
+            <switch
+              :checked="configForm.motorFlowOff"
               @change="configForm.motorFlowOff = $event.detail.value"
               class="switch"
             />
@@ -115,49 +160,78 @@
         </view>
         <view class="form-item">
           <text class="label">启动延时(毫秒)</text>
-          <input 
-            class="input" 
-            type="number" 
-            v-model="configForm.motorOnDelay" 
+          <input
+            class="input"
+            type="number"
+            v-model="configForm.motorOnDelay"
             placeholder="推荐5000毫秒"
           />
         </view>
         <view class="form-item">
           <text class="label">关闭延时(毫秒)</text>
-          <input 
-            class="input" 
-            type="number" 
-            v-model="configForm.motorOffDelay" 
+          <input
+            class="input"
+            type="number"
+            v-model="configForm.motorOffDelay"
             placeholder="推荐1000毫秒"
           />
         </view>
         <view class="form-item">
           <text class="label">关闭灵敏度(毫秒)</text>
-          <input 
-            class="input" 
-            type="number" 
-            v-model="configForm.motorOnInterval" 
+          <input
+            class="input"
+            type="number"
+            v-model="configForm.motorOnInterval"
             placeholder="推荐10000毫秒"
           />
         </view>
         <view class="form-item">
           <text class="label">操作超时关机(秒)</text>
-          <input 
-            class="input" 
-            type="number" 
-            v-model="configForm.operationTimeout" 
+          <input
+            class="input"
+            type="number"
+            v-model="configForm.operationTimeout"
             placeholder="推荐3600秒"
           />
         </view>
         <view class="form-item">
           <text class="label">空闲超时关机(秒)</text>
-          <input 
-            class="input" 
-            type="number" 
-            v-model="configForm.idleTimeout" 
+          <input
+            class="input"
+            type="number"
+            v-model="configForm.idleTimeout"
             placeholder="推荐1200秒"
           />
         </view>
+        <view class="form-item">
+          <text class="label">时区设置(分钟)</text>
+          <input class="input" type="number" v-model="configForm.timezone" placeholder="480=北京时间, 范围±720"/>
+        </view>
+        <view class="form-item">
+          <text class="label">登录超时</text>
+          <input class="input" type="number" v-model="configForm.loginTimeout" placeholder="登录超时时间"/>
+        </view>
+        <view class="form-item">
+          <text class="label">用户输入信息页</text>
+          <input class="input" type="number" v-model="configForm.userInputMode" placeholder="自动洗车机版本适用"/>
+        </view>
+      </view>
+
+      <!-- 电机扩展 -->
+      <view class="form-section">
+        <text class="section-title">电机扩展配置</text>
+        <view class="form-item">
+          <text class="label">清水泡沫联动</text>
+          <input class="input" type="number" v-model="configForm.foamLinkMode" placeholder="0=关, 1=开"/>
+        </view>
+        <view class="form-item">
+          <text class="label">根据流量收费</text>
+          <input class="input" type="number" v-model="configForm.motorFeeFlow" placeholder="0=关, 1=开"/>
+        </view>
+        <view class="form-item">
+          <text class="label">照明继电器复用</text>
+          <input class="input" type="number" v-model="configForm.lightAltMode" placeholder="0=照明, 1=远程控制"/>
+        </view>
       </view>
       
       <!-- 价格参数 -->
@@ -381,8 +455,18 @@ const configForm = ref({
   maintenanceMode: 0,
   workMode: 1,
   screenType: 0,
+  sensorWater: 0,
+  coatMode: 0,
+  blowMode: 0,
   userMessage1: '',
   userMessage2: '',
+  spaceTimeoutSeconds: 1800,
+  spaceTimeoutMode: 0,
+  amountMinLimit: 0,
+  prepayMoney: 0,
+  quickOpenMoney: 0,
+  idleTimeoutStrategy: 0,
+  priceCountdown: 0,
   motorFlowOn: false,
   motorFlowOff: true,
   motorOnDelay: 5000,
@@ -390,6 +474,12 @@ const configForm = ref({
   motorOnInterval: 10000,
   operationTimeout: 3600,
   idleTimeout: 1200,
+  timezone: 480,
+  loginTimeout: 0,
+  userInputMode: 0,
+  foamLinkMode: 0,
+  motorFeeFlow: 0,
+  lightAltMode: 0,
   priceWater: 0,
   priceFoam: 0,
   priceCoat: 0,
@@ -398,7 +488,6 @@ const configForm = ref({
   priceTap: 0,
   priceSpace: 0,
   priceUserExt: 0,
-  quickOpenMoney: 0,
   lightTimePeriod1: '',
   lightTimePeriod2: '',
   workTimePeriod1: '',

+ 241 - 272
admin-web/src/views/admin/platform/deviceConfig/dialog.vue

@@ -6,7 +6,7 @@
     <el-dialog
         :title="state.dialog.title"
         v-model="state.dialog.isShowDialog"
-        width="820px"
+        width="860px"
         draggable
         destroy-on-close
         :close-on-click-modal="false"
@@ -43,322 +43,290 @@
         </el-form-item>
 
         <div class="sub-group-bottom">选项参数</div>
-        <el-form-item label="灯光工作模式( 0:全天暂停营业 1:全天营业 2:根据时间段开始营业)" prop="lightMode" class="w100">
-          <el-input
-              v-model="state.ruleForm.lightMode"
-              placeholder="灯光工作模式 0:全天暂停营业 1:全天营业 2:根据时间段开始营业"
-              clearable
-              class="w100">
-          </el-input>
+        <el-form-item label="工作模式(0:全天暂停营业 1:全天营业 2:按时间段营业)" prop="workMode" class="w100">
+          <el-input v-model="state.ruleForm.workMode" placeholder="0:全天暂停营业 1:全天营业 2:按时间段营业" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="维护模式(维护模式 0:未设置,1:已设置(屏幕显示设备维护界面))" prop="maintenanceMode" class="w100">
-          <el-input
-              v-model="state.ruleForm.maintenanceMode"
-              placeholder="维护模式 0:未设置,1:已设置(屏幕显示设备维护界面)"
-              clearable
-              class="w100">
-          </el-input>
+        <el-form-item label="灯光工作模式(0:全天关 1:全天开 2:按时间段)" prop="lightMode" class="w100">
+          <el-input v-model="state.ruleForm.lightMode" placeholder="0:全天关 1:全天开 2:按时间段" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="工作模式(工作模式 0:全天暂停营业 1:全天营业 2:根据时间段开始营业)" prop="workMode" class="w100">
-          <el-input
-              v-model="state.ruleForm.workMode"
-              placeholder="工作模式 0:全天暂停营业 1:全天营业 2:根据时间段开始营业"
-              clearable
-              class="w100">
-          </el-input>
+        <el-form-item label="维护模式(0:正常,1:维护)" prop="maintenanceMode" class="w100">
+          <el-input v-model="state.ruleForm.maintenanceMode" placeholder="0:正常模式,1:维护模式" clearable class="w100"/>
         </el-form-item>
-
-        <el-form-item label="屏幕类型(屏幕类型 0:不支持视频播放,1:支持视频播放,两种屏型号不同,填写错误会导致没有语音。)" prop="screenType" class="w100">
-          <el-input
-              v-model="state.ruleForm.screenType"
-              placeholder="屏幕类型(0:不支持视频播放的屏幕,1:支持视频播放的屏幕,两种屏型号不同,填写错误会导致没有语音。)"
-              clearable
-              class="w100">
-          </el-input>
+        <el-form-item label="屏幕类型(0:不支持视频,1:支持视频)" prop="screenType" class="w100">
+          <el-input v-model="state.ruleForm.screenType" placeholder="0:不支持视频,1:支持视频" clearable class="w100"/>
         </el-form-item>
-
-<!--实体类中无此属性
-        <el-form-item label="是否安装了水流量传感器" prop="sensorWater" class="wd300">
-          <ext-boolean
-              v-model="state.ruleForm.sensorWater"
-              placeholder="是否安装了水流量传感器"
-              clearable
-              class="w100"/>
+        <el-form-item label="水流量传感器(0:未安装,1:已安装)" prop="sensorWater" class="w100">
+          <el-input v-model="state.ruleForm.sensorWater" placeholder="0=未安装,1=已安装" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="镀膜功能开关(0:关,1:开)" prop="coatMode" class="w100">
+          <el-input v-model="state.ruleForm.coatMode" placeholder="0=关,1=开" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="吹气功能开关(0:关,1:开)" prop="blowMode" class="w100">
+          <el-input v-model="state.ruleForm.blowMode" placeholder="0=关,1=开" clearable class="w100"/>
         </el-form-item>
--->
-
         <el-form-item label="屏幕左下方文本" prop="userMessage1" class="wd300">
-          <el-input
-              v-model="state.ruleForm.userMessage1"
-              placeholder="屏幕左下方文本"
-              clearable
-              class="w100">
-          </el-input>
+          <el-input v-model="state.ruleForm.userMessage1" placeholder="屏幕左下方文本" clearable class="w100"/>
         </el-form-item>
         <el-form-item label="屏幕右下方文本" prop="userMessage2" class="wd300">
-          <el-input
-              v-model="state.ruleForm.userMessage2"
-              placeholder="屏幕右下方文本"
-              clearable
-              class="w100">
-          </el-input>
+          <el-input v-model="state.ruleForm.userMessage2" placeholder="屏幕右下方文本" clearable class="w100"/>
         </el-form-item>
-        <div class="sub-group-bottom">时间参数</div>
 
-        <el-form-item label="自动启动(有流量的时候是否自动启动水泵,推荐关闭)" prop="motorFlowOn" class="wd300">
-          <ext-boolean
-              v-model="state.ruleForm.motorFlowOn"
-              placeholder="自动启动,有流量的时候是否自动启动水泵,推荐关闭"
-              clearable
-              class="w100">
-          </ext-boolean>
+        <div class="sub-group-bottom">收费策略</div>
+        <el-form-item label="车位免费时间(秒,0-86400,1800=30分钟)" prop="spaceTimeoutSeconds" class="w100">
+          <el-input-number v-model="state.ruleForm.spaceTimeoutSeconds" placeholder="车位免费时间(秒)" :min="0" :max="86400" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="自动关闭(没有流量的时候是否自动关闭水泵,推荐开启)" prop="motorFlowOff" class="wd300">
-          <ext-boolean
-              v-model="state.ruleForm.motorFlowOff"
-              placeholder="自动关闭,没有流量的时候是否自动关闭水泵,推荐开启"
-              clearable
-              class="w100">
-          </ext-boolean>
+        <el-form-item label="车位超时收费方式(0:只收超时费,1:收全部时间费)" prop="spaceTimeoutMode" class="w100">
+          <el-input v-model="state.ruleForm.spaceTimeoutMode" placeholder="0=只收超时费,1=收全部时间费" clearable class="w100"/>
         </el-form-item>
-
-        <el-form-item label="启动延时,电机每次启动最少要开多少毫秒(推荐5000毫秒)" prop="motorOnDelay" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.motorOnDelay"
-              placeholder="启动延时,电机每次启动最少要开多少毫秒"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="最低消费(元,0=不限制)" prop="amountMinLimit" class="wd300">
+          <el-input-number v-model="state.ruleForm.amountMinLimit" placeholder="最低消费(元)" :min="0" :precision="2" :step="0.1" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="关闭延时,电机每次关闭最少要关闭多少毫秒(推荐1000毫秒)" prop="motorOffDelay" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.motorOffDelay"
-              placeholder="关闭延时,电机每次关闭最少要关闭多少毫秒"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="最高消费/预付金额(元,0=不限制)" prop="prepayMoney" class="wd300">
+          <el-input-number v-model="state.ruleForm.prepayMoney" placeholder="最高消费/预付金额(元)" :min="0" :precision="2" :step="1" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="快速开机金额(元,0=关闭)" prop="quickOpenMoney" class="wd300">
+          <el-input-number v-model="state.ruleForm.quickOpenMoney" placeholder="按键直接开机金额(元),0=关闭" :min="0" :precision="2" :step="1" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="空闲超时策略(0:超时后关机,1:超时后倒计时扣费)" prop="idleTimeoutStrategy" class="w100">
+          <el-input v-model="state.ruleForm.idleTimeoutStrategy" placeholder="0=超时关机,1=超时扣费" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="不操作设备启用收费" prop="priceCountdown" class="w100">
+          <el-input-number v-model="state.ruleForm.priceCountdown" placeholder="一段时间不操作设备启用收费" :min="0" clearable class="w100"/>
         </el-form-item>
 
-        <el-form-item label="关闭灵敏度(推荐10000毫秒)" prop="motorOnInterval" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.motorOnInterval"
-              placeholder="关闭灵敏度,多久收不到流量信号就关闭电机"
-              clearable
-              class="w100">
-          </el-input-number>
+        <div class="sub-group-bottom">时间参数</div>
+        <el-form-item label="自动启动(有流量时自动启动水泵)" prop="motorFlowOn" class="wd300">
+          <ext-boolean v-model="state.ruleForm.motorFlowOn" placeholder="有流量时自动启动水泵" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="空闲超时提示音倒计时" prop="noticeThresholdIdle" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.noticeThresholdIdle"
-              placeholder="空闲超时提示音倒计时,60表示当空闲超时倒计时不足60秒的时候发出提示音,提示用户按任意功能键阻止设备关闭"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="自动关闭(无流量时自动关闭水泵)" prop="motorFlowOff" class="wd300">
+          <ext-boolean v-model="state.ruleForm.motorFlowOff" placeholder="无流量时自动关闭水泵" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="操作超时提示音倒计时" prop="noticeThresholdOperation" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.noticeThresholdOperation"
-              placeholder="操作超时提示音倒计时,300表示当剩余操作时间不足5分钟的时候发出提示音,提示用户合理安排剩余时间"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="启动延时(毫秒,推荐5000)" prop="motorOnDelay" class="w100">
+          <el-input-number v-model="state.ruleForm.motorOnDelay" placeholder="电机启动最少要开多少毫秒" :min="100" :max="30000" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="操作超时关机" prop="operationTimeout" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.operationTimeout"
-              placeholder="操作超时关机,3600表示每次开机后有60分钟的操作时间,60分钟到了会强制结束订单。"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="关闭延时(毫秒,推荐1000)" prop="motorOffDelay" class="w100">
+          <el-input-number v-model="state.ruleForm.motorOffDelay" placeholder="电机每次关闭最少关多少毫秒" :min="100" :max="5000" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="洗车结束后" prop="billDelay" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.billDelay"
-              placeholder="洗车结束后,费用明细页面显示多久(单位秒)"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="关闭灵敏度(毫秒,推荐10000)" prop="motorOnInterval" class="w100">
+          <el-input-number v-model="state.ruleForm.motorOnInterval" placeholder="多久收不到流量信号就关闭电机" :min="100" :max="30000" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="空闲超时关" prop="idleTimeout" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.idleTimeout"
-              placeholder="空闲超时关,1200表示20分钟不操作机器自动结束订单,用户操作一次就重新开始倒计时一下"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="空闲超时关机(秒)" prop="idleTimeout" class="w100">
+          <el-input-number v-model="state.ruleForm.idleTimeout" placeholder="空闲超时关机,0=关闭" :min="0" :max="86400" clearable class="w100"/>
         </el-form-item>
-
-        <el-form-item label='照明时间段1' prop="lightTimePeriod1" class="w100">
-          <el-input
-              v-model="state.ruleForm.lightTimePeriod1"
-              placeholder='时间段1:"18:00 - 22:00" 下午6点到晚上10点打开照明'
-              clearable
-              class="w100">
-          </el-input>
+        <el-form-item label="空闲超时提示音倒计时(秒)" prop="noticeThresholdIdle" class="w100">
+          <el-input-number v-model="state.ruleForm.noticeThresholdIdle" placeholder="倒计时不足此秒数时发出提示音" :min="0" :max="86400" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label='照明时间段2' prop="lightTimePeriod2" class="w100">
-          <el-input
-              v-model="state.ruleForm.lightTimePeriod2"
-              placeholder='时间段2:"18:00 - 08:00" 下午6点到早上8点打开照明'
-              clearable
-              class="w100">
-          </el-input>
+        <el-form-item label="操作超时关机(秒)" prop="operationTimeout" class="w100">
+          <el-input-number v-model="state.ruleForm.operationTimeout" placeholder="操作超时强制结束订单,0=不限制" :min="0" :max="86400" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label='营业时间段1' prop="workTimePeriod1" class="w100">
-          <el-input
-              v-model="state.ruleForm.workTimePeriod1"
-              placeholder='时间段1:"08:00 - 12:00" 上午8点到中午12点营业'
-              clearable
-              class="w100">
-          </el-input>
+        <el-form-item label="操作超时提示音倒计时(秒)" prop="noticeThresholdOperation" class="w100">
+          <el-input-number v-model="state.ruleForm.noticeThresholdOperation" placeholder="剩余时间不足此秒数时发出提示" :min="0" :max="86400" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label='营业间段2' prop="workTimePeriod2" class="w100">
-          <el-input
-              v-model="state.ruleForm.workTimePeriod2"
-              placeholder='时间段2:"14:00 - 21:00" 下午2点到晚上9点营业'
-              clearable
-              class="w100">
-          </el-input>
+        <el-form-item label="洗车结束后账单显示时长(秒)" prop="billDelay" class="w100">
+          <el-input-number v-model="state.ruleForm.billDelay" placeholder="费用明细页面显示多久" :min="0" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="水龙头自动关闭延时" prop="tapOnDelay" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.tapOnDelay"
-              placeholder="水龙头自动关闭延时,30表示打开水龙头后30秒自动关闭水龙头,0表示不允许自动关闭水龙头"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="照明时间段1" prop="lightTimePeriod1" class="w100">
+          <el-input v-model="state.ruleForm.lightTimePeriod1" placeholder='例:"18:00 - 22:00"' clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="照明时间段2" prop="lightTimePeriod2" class="w100">
+          <el-input v-model="state.ruleForm.lightTimePeriod2" placeholder='例:"18:00 - 08:00"' clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="营业时间段1" prop="workTimePeriod1" class="w100">
+          <el-input v-model="state.ruleForm.workTimePeriod1" placeholder='例:"08:00 - 12:00"' clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="营业时间段2" prop="workTimePeriod2" class="w100">
+          <el-input v-model="state.ruleForm.workTimePeriod2" placeholder='例:"14:00 - 21:00"' clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="水龙头自动关闭延时(秒,0=禁止)" prop="tapOnDelay" class="w100">
+          <el-input-number v-model="state.ruleForm.tapOnDelay" placeholder="打开水龙头后多少秒自动关闭" :min="0" :max="86400" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="视频播放延时(秒)" prop="videoPlayDelay" class="w100">
+          <el-input-number v-model="state.ruleForm.videoPlayDelay" placeholder="设备空闲多久开始循环播放广告视频" :min="0" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="视频源(0:内置,1:TF卡,2:U盘)" prop="videoSource" class="w100">
+          <el-input v-model="state.ruleForm.videoSource" placeholder="0:内置视频,1:TF卡,2:U盘" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="工作指示灯关闭延时(秒)" prop="workLightDelay" class="w100">
+          <el-input-number v-model="state.ruleForm.workLightDelay" placeholder="关机后延时多少秒关闭工作指示灯,0=立刻关" :min="0" :max="86400" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="时区设置(分钟,北京时间=480)" prop="timezone" class="w100">
+          <el-input-number v-model="state.ruleForm.timezone" placeholder="时区设置,范围±720" :min="-720" :max="720" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="用户输入信息页" prop="userInputMode" class="w100">
+          <el-input v-model="state.ruleForm.userInputMode" placeholder="用户输入信息页(自动洗车机版本)" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="登录超时时间" prop="loginTimeout" class="w100">
+          <el-input-number v-model="state.ruleForm.loginTimeout" placeholder="登录超时时间" :min="0" clearable class="w100"/>
         </el-form-item>
 
-        <el-form-item label="视频播放延时(单位秒)" prop="videoPlayDelay" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.videoPlayDelay"
-              placeholder="视频播放延时(单位秒),设备空闲多久开始循环播放⼴告视频"
-              clearable
-              class="w100">
-          </el-input-number>
+        <div class="sub-group-bottom">电机扩展配置</div>
+        <el-form-item label="清水泡沫联动(0:关,1:开)" prop="foamLinkMode" class="w100">
+          <el-input v-model="state.ruleForm.foamLinkMode" placeholder="0=关,1=开(开泡沫同时开清水)" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="视频源" prop="videoSource" class="w100">
-          <el-input
-              v-model="state.ruleForm.videoSource"
-              placeholder="视频源(0:内置视频,1:TF卡内的视频,2:U盘内的视频)"
-              clearable
-              class="w100">
-          </el-input>
+        <el-form-item label="根据流量收费(0:关,1:开)" prop="motorFeeFlow" class="w100">
+          <el-input v-model="state.ruleForm.motorFeeFlow" placeholder="0=关,1=开(有流量才收费)" clearable class="w100"/>
         </el-form-item>
-        <el-form-item label="工作指示灯(室内照明)关闭延时" prop="workLightDelay" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.workLightDelay"
-              placeholder="工作指示灯(室内照明)关闭延时,30表示洗车结束关机后延时30秒关闭工作指示灯,0表示立刻关闭指示灯"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="照明继电器复用(0:照明,1:远程控制)" prop="lightAltMode" class="w100">
+          <el-input v-model="state.ruleForm.lightAltMode" placeholder="0=照明继电器,1=远程控制继电器" clearable class="w100"/>
         </el-form-item>
+
         <div class="sub-group-bottom">声音参数</div>
         <el-form-item label="提示音音量(0-100)" prop="soundVolume" class="wd300">
-          <el-input-number
-              :min="0"
-              :max="100"
-              v-model="state.ruleForm.soundVolume"
-              placeholder="提示音音量(0-100)"
-              clearable
-              class="w100">
-          </el-input-number>
+          <el-input-number :min="0" :max="100" v-model="state.ruleForm.soundVolume" placeholder="提示音音量" clearable class="w100"/>
         </el-form-item>
-        <div class="sub-group-bottom">价格参数</div>
-
-        <el-form-item label="吹气单价(元/分钟)" prop="priceBlow" class="wd300">
-          <el-input-number
-              v-model="state.ruleForm.priceBlow"
-              placeholder="吹气单价(元/分钟)"
-              :min="0" :precision="2" :step="0.1"
-              clearable
-              class="w100">
-          </el-input-number>
+        <div class="sub-group-bottom" style="font-size:13px;color:#909399;margin-bottom:8px;">-- 开机语音 --</div>
+        <el-form-item label="按键开机提示音" prop="ttsOpenByButton" class="wd300">
+          <el-input v-model="state.ruleForm.ttsOpenByButton" placeholder="按键开机提示音" clearable maxlength="50" class="w100"/>
         </el-form-item>
-        <el-form-item label="吸尘单价(元/分钟)" prop="priceCleaner" class="wd300">
-          <el-input-number
-              v-model="state.ruleForm.priceCleaner"
-              placeholder="吸尘单价(元/分钟)"
-              :min="0" :precision="2" :step="0.1"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="网络开机提示音" prop="ttsOpenByNetwork" class="wd300">
+          <el-input v-model="state.ruleForm.ttsOpenByNetwork" placeholder="网络开机提示音" clearable maxlength="50" class="w100"/>
         </el-form-item>
-        <el-form-item label="镀膜单价(元/分钟)" prop="priceCoat" class="wd300">
-          <el-input-number
-              v-model="state.ruleForm.priceCoat"
-              placeholder="镀膜单价(元/分钟)"
-              :min="0" :precision="2" :step="0.1"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="刷卡开机提示音" prop="ttsOpenByCard" class="wd300">
+          <el-input v-model="state.ruleForm.ttsOpenByCard" placeholder="刷卡开机提示音" clearable maxlength="50" class="w100"/>
         </el-form-item>
-        <el-form-item label="泡沫单价(元/分钟)" prop="priceFoam" class="wd300">
-          <el-input-number
-              v-model="state.ruleForm.priceFoam"
-              placeholder="泡沫单价(元/分钟)"
-              :min="0" :precision="2" :step="0.1"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="投币开机提示音" prop="ttsOpenByCoin" class="wd300">
+          <el-input v-model="state.ruleForm.ttsOpenByCoin" placeholder="投币开机提示音" clearable maxlength="50" class="w100"/>
         </el-form-item>
-        <el-form-item label="场地费单价(元/分钟)" prop="priceSpace" class="wd300">
-          <el-input-number
-              v-model="state.ruleForm.priceSpace"
-              placeholder="场地费单价(元/分钟)"
-              :min="0" :precision="2" :step="0.1"
-              clearable
-              class="w100">
-          </el-input-number>
+        <div class="sub-group-bottom" style="font-size:13px;color:#909399;margin-bottom:8px;">-- 关机语音 --</div>
+        <el-form-item label="按键关机提示音" prop="ttsCloseByButton" class="wd300">
+          <el-input v-model="state.ruleForm.ttsCloseByButton" placeholder="按键关机提示音" clearable maxlength="50" class="w100"/>
         </el-form-item>
-        <el-form-item label="洗手单价(元/分钟)" prop="priceTap" class="wd300">
-          <el-input-number
-              v-model="state.ruleForm.priceTap"
-              placeholder="洗手单价(元/分钟)"
-              :min="0" :precision="2" :step="0.1"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="刷卡关机提示音" prop="ttsCloseByCard" class="wd300">
+          <el-input v-model="state.ruleForm.ttsCloseByCard" placeholder="刷卡关机提示音" clearable maxlength="50" class="w100"/>
         </el-form-item>
-        <el-form-item label="扩展项目单价(元/分钟)" prop="priceUserExt" class="wd300">
-          <el-input-number
-              v-model="state.ruleForm.priceUserExt"
-              placeholder="扩展项目单价(元/分钟)"
-              :min="0" :precision="2" :step="0.1"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="网络关机提示音" prop="ttsCloseByNetwork" class="wd300">
+          <el-input v-model="state.ruleForm.ttsCloseByNetwork" placeholder="网络关机提示音" clearable maxlength="50" class="w100"/>
         </el-form-item>
-        <el-form-item label="清水单价(元/分钟)" prop="priceWater" class="wd300">
-          <el-input-number
-              v-model="state.ruleForm.priceWater"
-              placeholder="清水单价(元/分钟)"
-              :min="0" :precision="2" :step="0.1"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="空闲超时关机提示音" prop="ttsCloseByIdleTimeout" class="wd300">
+          <el-input v-model="state.ruleForm.ttsCloseByIdleTimeout" placeholder="空闲超时关机提示音" clearable maxlength="50" class="w100"/>
         </el-form-item>
-        <el-form-item label="快速开机金额(元)" prop="quickOpenMoney" class="w100">
-          <el-input-number
-              v-model="state.ruleForm.quickOpenMoney"
-              placeholder="快速开机金额(元),按机箱内部的维护按键直接开机(设置为0可以关闭这个功能)"
-              :min="0" :precision="2" :step="1"
-              clearable
-              class="w100">
-          </el-input-number>
+        <el-form-item label="操作超时关机提示音" prop="ttsCloseByOperationTimeout" class="wd300">
+          <el-input v-model="state.ruleForm.ttsCloseByOperationTimeout" placeholder="操作超时关机提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="余额不足关机提示音" prop="ttsCloseByNoBalance" class="wd300">
+          <el-input v-model="state.ruleForm.ttsCloseByNoBalance" placeholder="余额不足关机提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="系统错误关机提示音" prop="ttsCloseBySysError" class="wd300">
+          <el-input v-model="state.ruleForm.ttsCloseBySysError" placeholder="系统错误关机提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <div class="sub-group-bottom" style="font-size:13px;color:#909399;margin-bottom:8px;">-- 功能语音 --</div>
+        <el-form-item label="打开清水" prop="ttsWaterOn" class="wd300">
+          <el-input v-model="state.ruleForm.ttsWaterOn" placeholder="打开清水提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="关闭清水" prop="ttsWaterOff" class="wd300">
+          <el-input v-model="state.ruleForm.ttsWaterOff" placeholder="关闭清水提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="打开泡沫" prop="ttsFoamOn" class="wd300">
+          <el-input v-model="state.ruleForm.ttsFoamOn" placeholder="打开泡沫提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="关闭泡沫" prop="ttsFoamOff" class="wd300">
+          <el-input v-model="state.ruleForm.ttsFoamOff" placeholder="关闭泡沫提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="打开吸尘" prop="ttsCleanerOn" class="wd300">
+          <el-input v-model="state.ruleForm.ttsCleanerOn" placeholder="打开吸尘器提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="关闭吸尘" prop="ttsCleanerOff" class="wd300">
+          <el-input v-model="state.ruleForm.ttsCleanerOff" placeholder="关闭吸尘器提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="打开水龙头" prop="ttsTapOn" class="wd300">
+          <el-input v-model="state.ruleForm.ttsTapOn" placeholder="打开水龙头提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="关闭水龙头" prop="ttsTapOff" class="wd300">
+          <el-input v-model="state.ruleForm.ttsTapOff" placeholder="关闭水龙头提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="打开消毒" prop="ttsUserExtOn" class="wd300">
+          <el-input v-model="state.ruleForm.ttsUserExtOn" placeholder="打开消毒提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="关闭消毒" prop="ttsUserExtOff" class="wd300">
+          <el-input v-model="state.ruleForm.ttsUserExtOff" placeholder="关闭消毒提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <div class="sub-group-bottom" style="font-size:13px;color:#909399;margin-bottom:8px;">-- 登录语音 --</div>
+        <el-form-item label="用户登录" prop="ttsAlertUserLogin" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertUserLogin" placeholder="用户登录提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="登录超时" prop="ttsAlertUserLoginTimeout" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertUserLoginTimeout" placeholder="登录超时提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="未输入账号" prop="ttsAlertAccountRequired" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertAccountRequired" placeholder="未输入账号提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="未输入密码" prop="ttsAlertPasswordRequired" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertPasswordRequired" placeholder="未输入密码提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="账号长度错误" prop="ttsAlertAccountLenError" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertAccountLenError" placeholder="账号长度错误提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="密码长度错误" prop="ttsAlertPasswordLenError" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertPasswordLenError" placeholder="密码长度错误提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <div class="sub-group-bottom" style="font-size:13px;color:#909399;margin-bottom:8px;">-- 其他提示音 --</div>
+        <el-form-item label="系统启动" prop="ttsAlertSysBoot" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertSysBoot" placeholder="系统启动提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="空闲模式" prop="ttsAlertIdleMode" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertIdleMode" placeholder="空闲模式提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="非营业时间" prop="ttsAlertSleepMode" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertSleepMode" placeholder="非营业时间段提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="配置查看模式" prop="ttsAlertConfigMode" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertConfigMode" placeholder="配置查看模式提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="维护模式" prop="ttsAlertMaintenanceMode" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertMaintenanceMode" placeholder="维护模式提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="无水" prop="ttsAlertNoWater" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertNoWater" placeholder="无水提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="无泡沫" prop="ttsAlertNoFoam" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertNoFoam" placeholder="无泡沫提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="电机热保护" prop="ttsAlertMotorError" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertMotorError" placeholder="电机热保护提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="空闲超时关机前" prop="ttsAlertIdleRemainTime" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertIdleRemainTime" placeholder="空闲超时关机前提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="操作超时关机前" prop="ttsAlertOperationRemainTime" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertOperationRemainTime" placeholder="操作超时关机前提示音" clearable maxlength="50" class="w100"/>
+        </el-form-item>
+        <el-form-item label="用户投币后" prop="ttsAlertInsertCoin" class="wd300">
+          <el-input v-model="state.ruleForm.ttsAlertInsertCoin" placeholder="用户投币后提示音" clearable maxlength="50" class="w100"/>
         </el-form-item>
 
-
-
-
+        <div class="sub-group-bottom">单价设置(元/分钟)</div>
+        <el-form-item label="清水单价" prop="priceWater" class="wd300">
+          <el-input-number v-model="state.ruleForm.priceWater" placeholder="清水单价(元/分钟)" :min="0" :precision="2" :step="0.1" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="泡沫单价" prop="priceFoam" class="wd300">
+          <el-input-number v-model="state.ruleForm.priceFoam" placeholder="泡沫单价(元/分钟)" :min="0" :precision="2" :step="0.1" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="吸尘单价" prop="priceCleaner" class="wd300">
+          <el-input-number v-model="state.ruleForm.priceCleaner" placeholder="吸尘单价(元/分钟)" :min="0" :precision="2" :step="0.1" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="洗手单价" prop="priceTap" class="wd300">
+          <el-input-number v-model="state.ruleForm.priceTap" placeholder="洗手单价(元/分钟)" :min="0" :precision="2" :step="0.1" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="消毒单价" prop="priceUserExt" class="wd300">
+          <el-input-number v-model="state.ruleForm.priceUserExt" placeholder="扩展项目单价(元/分钟)" :min="0" :precision="2" :step="0.1" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="镀膜单价" prop="priceCoat" class="wd300">
+          <el-input-number v-model="state.ruleForm.priceCoat" placeholder="镀膜单价(元/分钟)" :min="0" :precision="2" :step="0.1" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="吹气单价" prop="priceBlow" class="wd300">
+          <el-input-number v-model="state.ruleForm.priceBlow" placeholder="吹气单价(元/分钟)" :min="0" :precision="2" :step="0.1" clearable class="w100"/>
+        </el-form-item>
+        <el-form-item label="场地费单价" prop="priceSpace" class="wd300">
+          <el-input-number v-model="state.ruleForm.priceSpace" placeholder="场地费单价(元/分钟)" :min="0" :precision="2" :step="0.1" clearable class="w100"/>
+        </el-form-item>
 
       </el-form>
 
       <template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button :loading="state.btnLoading" type="primary" @click="onSubmit" size="default">{{ state.dialog.submitTxt }}</el-button>
-				</span>
+					<span class="dialog-footer">
+						<el-button @click="onCancel" size="default">取 消</el-button>
+						<el-button :loading="state.btnLoading" type="primary" @click="onSubmit" size="default">{{ state.dialog.submitTxt }}</el-button>
+					</span>
       </template>
     </el-dialog>
   </div>
@@ -417,7 +385,8 @@ const onClose = () => {
 const onCancel = () => {
   onClose();
 };
-const moneyFields = ['priceBlow', 'priceCleaner', 'priceCoat', 'priceFoam', 'priceSpace', 'priceTap', 'priceUserExt', 'priceWater', 'quickOpenMoney'];
+// 以分为单位存储的价格字段(UI 显示为元)
+const moneyFields = ['priceBlow', 'priceCleaner', 'priceCoat', 'priceFoam', 'priceSpace', 'priceTap', 'priceUserExt', 'priceWater', 'quickOpenMoney', 'amountMinLimit', 'prepayMoney'];
 
 // 提交
 const onSubmit = () => {
@@ -463,4 +432,4 @@ defineExpose({
 });
 
 
-</script>
+</script>

+ 1 - 0
admin-web/src/views/admin/platform/deviceConfig/index.vue

@@ -148,6 +148,7 @@ const state = reactive({
     {label: 'ID', width: 180, prop: 'id', query: false, type: '', resizable: true},
     {label: '配置名称', width: 180, prop: 'name', query: true, type: '', resizable: true},
     {label: '配置备注', width: 180, prop: 'remark', query: true, type: '', resizable: true},
+    {label: '工作模式', width: 100, prop: 'workMode', query: false, type: '', resizable: true},
     {label: '自动关闭', width: 180, prop: 'motorFlowOff', query: false, type: '', resizable: true},
     {label: '自动启动', width: 180, prop: 'motorFlowOn', query: false, type: '', resizable: true},
     {label: '创建时间', width: 180, prop: 'createTime', query: true, sortable: 'custom', type: 'datetime', resizable: true, conf: {format: (val: any) => u.fmt.fmtDate(val)}},

+ 12 - 0
admin-web/src/views/admin/station/device/remote.vue

@@ -292,6 +292,18 @@
             <el-form-item label="屏幕右下文本">
               <el-input v-model="state.configForm.userMessage2" size="small" style="width:180px"/>
             </el-form-item>
+            <el-form-item label="时区(分钟)">
+              <el-input-number v-model="state.configForm.timezone" :min="-720" :max="720" size="small" controls-position="right"/>
+            </el-form-item>
+            <el-form-item label="空闲超时策略">
+              <el-input v-model="state.configForm.idleTimeoutStrategy" size="small" style="width:180px" placeholder="0=关机, 1=扣费"/>
+            </el-form-item>
+            <el-form-item label="清水泡沫联动">
+              <el-input v-model="state.configForm.foamLinkMode" size="small" style="width:180px" placeholder="0=关, 1=开"/>
+            </el-form-item>
+            <el-form-item label="流量收费">
+              <el-input v-model="state.configForm.motorFeeFlow" size="small" style="width:180px" placeholder="0=关, 1=开"/>
+            </el-form-item>
           </el-form>
           <div style="margin-top: 10px;">
             <el-button type="primary" size="small" @click="handleWriteConfig" :loading="state.loading">应用配置</el-button>

+ 158 - 0
car-wash-entity/src/main/java/com/kym/entity/DeviceConfig.java

@@ -195,6 +195,164 @@ public class DeviceConfig extends BaseEntity {
      */
     private Boolean motorFlowOff;
 
+    /**
+     * 车位免费时间(秒),1800=免费30分钟
+     */
+    private Integer spaceTimeoutSeconds;
+
+    /**
+     * 车位超时收费方式,0=只收超时后费用,1=收取全部占用时间费用
+     */
+    private Integer spaceTimeoutMode;
+
+    /**
+     * 最低消费(分),累计消费为0时不收取
+     */
+    private Integer amountMinLimit;
+
+    /**
+     * 最高消费/预付金额(分),防止用户忘记关机导致消费过高
+     */
+    private Integer prepayMoney;
+
+    /**
+     * 一段时间不操作设备启用收费
+     */
+    private Integer priceCountdown;
+
+    /**
+     * 空闲超时策略配置,0=超时后结束订单,1=超时后倒计时扣费
+     */
+    private Integer idleTimeoutStrategy;
+
+    /**
+     * 时区设置(分钟),范围±720,北京时间=480
+     */
+    private Integer timezone;
+
+    /**
+     * 用户输入信息页是否需要(自动洗车机版本适用)
+     */
+    private Integer userInputMode;
+
+    /**
+     * 登录超时时间
+     */
+    private Integer loginTimeout;
+
+    /**
+     * 清水泡沫联动,0=关,1=开(打开泡沫继电器同时自动打开清水电磁阀)
+     */
+    private Integer foamLinkMode;
+
+    /**
+     * 根据流量收费,0=关,1=开(只有有流量时才收清水或泡沫费用)
+     */
+    private Integer motorFeeFlow;
+
+    /**
+     * 镀膜功能开关,0=关,1=开
+     */
+    private Integer coatMode;
+
+    /**
+     * 吹气功能开关,0=关,1=开
+     */
+    private Integer blowMode;
+
+    /**
+     * 是否安装了水流量传感器,0=未安装,1=已安装
+     */
+    private Integer sensorWater;
+
+    /**
+     * 照明继电器复用,0=照明继电器,1=远程控制继电器
+     */
+    private Integer lightAltMode;
+
+    // ==================== 语音 TTS 配置 ====================
+
+    /** 按键开机提示音 */
+    private String ttsOpenByButton;
+    /** 网络开机提示音 */
+    private String ttsOpenByNetwork;
+    /** 刷卡开机提示音 */
+    private String ttsOpenByCard;
+    /** 投币开机提示音 */
+    private String ttsOpenByCoin;
+
+    /** 按键关机提示音 */
+    private String ttsCloseByButton;
+    /** 刷卡关机提示音 */
+    private String ttsCloseByCard;
+    /** 网络关机提示音 */
+    private String ttsCloseByNetwork;
+    /** 空闲超时关机提示音 */
+    private String ttsCloseByIdleTimeout;
+    /** 操作超时关机提示音 */
+    private String ttsCloseByOperationTimeout;
+    /** 余额不足关机提示音 */
+    private String ttsCloseByNoBalance;
+    /** 系统错误关机提示音 */
+    private String ttsCloseBySysError;
+
+    /** 打开清水提示音 */
+    private String ttsWaterOn;
+    /** 关闭清水提示音 */
+    private String ttsWaterOff;
+    /** 打开泡沫提示音 */
+    private String ttsFoamOn;
+    /** 关闭泡沫提示音 */
+    private String ttsFoamOff;
+    /** 打开吸尘器提示音 */
+    private String ttsCleanerOn;
+    /** 关闭吸尘器提示音 */
+    private String ttsCleanerOff;
+    /** 打开水龙头提示音 */
+    private String ttsTapOn;
+    /** 关闭水龙头提示音 */
+    private String ttsTapOff;
+    /** 打开消毒提示音 */
+    private String ttsUserExtOn;
+    /** 关闭消毒提示音 */
+    private String ttsUserExtOff;
+
+    /** 用户登录提示音 */
+    private String ttsAlertUserLogin;
+    /** 登录超时提示音 */
+    private String ttsAlertUserLoginTimeout;
+    /** 未输入账号提示音 */
+    private String ttsAlertAccountRequired;
+    /** 未输入密码提示音 */
+    private String ttsAlertPasswordRequired;
+    /** 账号长度错误提示音 */
+    private String ttsAlertAccountLenError;
+    /** 密码长度错误提示音 */
+    private String ttsAlertPasswordLenError;
+
+    /** 系统启动提示音 */
+    private String ttsAlertSysBoot;
+    /** 空闲模式提示音 */
+    private String ttsAlertIdleMode;
+    /** 非营业时间段提示音 */
+    private String ttsAlertSleepMode;
+    /** 配置查看模式提示音 */
+    private String ttsAlertConfigMode;
+    /** 维护模式提示音 */
+    private String ttsAlertMaintenanceMode;
+    /** 无水提示音 */
+    private String ttsAlertNoWater;
+    /** 无泡沫提示音 */
+    private String ttsAlertNoFoam;
+    /** 电机热保护提示音 */
+    private String ttsAlertMotorError;
+    /** 空闲超时关机前提示音 */
+    private String ttsAlertIdleRemainTime;
+    /** 操作超时关机前提示音 */
+    private String ttsAlertOperationRemainTime;
+    /** 用户投币后提示音 */
+    private String ttsAlertInsertCoin;
+
     private String name;
     private String remark;
 

+ 72 - 6
car-wash-mapper/src/main/resources/mappers/DeviceConfigMapper.xml

@@ -8,13 +8,43 @@
         <result column="remark" property="remark" />
         <result column="user_message_1" property="userMessage1" />
         <result column="user_message_2" property="userMessage2" />
-        <result column="water_price" property="waterPrice" />
-        <result column="foam_price" property="foamPrice" />
-        <result column="cleaner_price" property="cleanerPrice" />
-        <result column="tap_price" property="tapPrice" />
-        <result column="user_ext_price" property="userExtPrice" />
+        <!-- 价格字段(修复:属性名与实体字段对齐) -->
+        <result column="water_price" property="priceWater" />
+        <result column="foam_price" property="priceFoam" />
+        <result column="cleaner_price" property="priceCleaner" />
+        <result column="tap_price" property="priceTap" />
+        <result column="user_ext_price" property="priceUserExt" />
+        <result column="space_price" property="priceSpace" />
+        <result column="coat_price" property="priceCoat" />
+        <result column="blow_price" property="priceBlow" />
+        <result column="quick_open_money" property="quickOpenMoney" />
+        <!-- 收费扩展 -->
+        <result column="space_timeout_seconds" property="spaceTimeoutSeconds" />
+        <result column="space_timeout_mode" property="spaceTimeoutMode" />
+        <result column="amount_min_limit" property="amountMinLimit" />
         <result column="prepay_money" property="prepayMoney" />
+        <result column="price_countdown" property="priceCountdown" />
+        <!-- 其他扩展 -->
+        <result column="idle_timeout_strategy" property="idleTimeoutStrategy" />
+        <result column="timezone" property="timezone" />
+        <result column="user_input_mode" property="userInputMode" />
+        <result column="login_timeout" property="loginTimeout" />
+        <!-- 电机扩展 -->
+        <result column="foam_link_mode" property="foamLinkMode" />
+        <result column="motor_fee_flow" property="motorFeeFlow" />
+        <!-- 功能模式 -->
+        <result column="coat_mode" property="coatMode" />
+        <result column="blow_mode" property="blowMode" />
+        <result column="sensor_water" property="sensorWater" />
+        <result column="light_alt_mode" property="lightAltMode" />
+        <!-- 现有字段 -->
+        <result column="maintenance_mode" property="maintenanceMode" />
+        <result column="sound_volume" property="soundVolume" />
+        <result column="screen_type" property="screenType" />
+        <result column="video_source" property="videoSource" />
+        <result column="video_play_delay" property="videoPlayDelay" />
         <result column="work_light_delay" property="workLightDelay" />
+        <result column="bill_delay" property="billDelay" />
         <result column="tap_on_delay" property="tapOnDelay" />
         <result column="idle_timeout" property="idleTimeout" />
         <result column="notice_threshold_idle" property="noticeThresholdIdle" />
@@ -31,9 +61,13 @@
         <result column="light_mode" property="lightMode" />
         <result column="light_time_period_1" property="lightTimePeriod1" />
         <result column="light_time_period_2" property="lightTimePeriod2" />
+        <!-- 语音 TTS -->
         <result column="tts_open_by_button" property="ttsOpenByButton" />
         <result column="tts_open_by_network" property="ttsOpenByNetwork" />
+        <result column="tts_open_by_card" property="ttsOpenByCard" />
+        <result column="tts_open_by_coin" property="ttsOpenByCoin" />
         <result column="tts_close_by_button" property="ttsCloseByButton" />
+        <result column="tts_close_by_card" property="ttsCloseByCard" />
         <result column="tts_close_by_network" property="ttsCloseByNetwork" />
         <result column="tts_close_by_idle_timeout" property="ttsCloseByIdleTimeout" />
         <result column="tts_close_by_operation_timeout" property="ttsCloseByOperationTimeout" />
@@ -49,6 +83,12 @@
         <result column="tts_tap_off" property="ttsTapOff" />
         <result column="tts_user_ext_on" property="ttsUserExtOn" />
         <result column="tts_user_ext_off" property="ttsUserExtOff" />
+        <result column="tts_alert_user_login" property="ttsAlertUserLogin" />
+        <result column="tts_alert_user_login_timeout" property="ttsAlertUserLoginTimeout" />
+        <result column="tts_alert_account_required" property="ttsAlertAccountRequired" />
+        <result column="tts_alert_password_required" property="ttsAlertPasswordRequired" />
+        <result column="tts_alert_account_len_error" property="ttsAlertAccountLenError" />
+        <result column="tts_alert_password_len_error" property="ttsAlertPasswordLenError" />
         <result column="tts_alert_sys_boot" property="ttsAlertSysBoot" />
         <result column="tts_alert_idle_mode" property="ttsAlertIdleMode" />
         <result column="tts_alert_sleep_mode" property="ttsAlertSleepMode" />
@@ -59,11 +99,37 @@
         <result column="tts_alert_motor_error" property="ttsAlertMotorError" />
         <result column="tts_alert_idle_remain_time" property="ttsAlertIdleRemainTime" />
         <result column="tts_alert_operation_remain_time" property="ttsAlertOperationRemainTime" />
+        <result column="tts_alert_insert_coin" property="ttsAlertInsertCoin" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        name,remark,user_message_1, user_message_2, water_price, foam_price, cleaner_price, tap_price, user_ext_price, prepay_money, work_light_delay, tap_on_delay, idle_timeout, notice_threshold_idle, operation_timeout, notice_threshold_operation, motor_on_delay, motor_off_delay, motor_on_interval, motor_flow_on, motor_flow_off, work_mode, work_time_period_1, work_time_period_2, light_mode, light_time_period_1, light_time_period_2, tts_open_by_button, tts_open_by_network, tts_close_by_button, tts_close_by_network, tts_close_by_idle_timeout, tts_close_by_operation_timeout, tts_close_by_no_balance, tts_close_by_sys_error, tts_water_on, tts_water_off, tts_foam_on, tts_foam_off, tts_cleaner_on, tts_cleaner_off, tts_tap_on, tts_tap_off, tts_user_ext_on, tts_user_ext_off, tts_alert_sys_boot, tts_alert_idle_mode, tts_alert_sleep_mode, tts_alert_config_mode, tts_alert_maintenance_mode, tts_alert_no_water, tts_alert_no_foam, tts_alert_motor_error, tts_alert_idle_remain_time, tts_alert_operation_remain_time
+        name, remark,
+        user_message_1, user_message_2,
+        water_price, foam_price, cleaner_price, tap_price, user_ext_price,
+        space_price, coat_price, blow_price, quick_open_money,
+        space_timeout_seconds, space_timeout_mode, amount_min_limit, prepay_money, price_countdown,
+        idle_timeout_strategy, timezone, user_input_mode, login_timeout,
+        foam_link_mode, motor_fee_flow,
+        coat_mode, blow_mode, sensor_water, light_alt_mode,
+        maintenance_mode, sound_volume, screen_type, video_source, video_play_delay,
+        work_light_delay, bill_delay, tap_on_delay,
+        idle_timeout, notice_threshold_idle, operation_timeout, notice_threshold_operation,
+        motor_on_delay, motor_off_delay, motor_on_interval, motor_flow_on, motor_flow_off,
+        work_mode, work_time_period_1, work_time_period_2,
+        light_mode, light_time_period_1, light_time_period_2,
+        tts_open_by_button, tts_open_by_network, tts_open_by_card, tts_open_by_coin,
+        tts_close_by_button, tts_close_by_card, tts_close_by_network,
+        tts_close_by_idle_timeout, tts_close_by_operation_timeout, tts_close_by_no_balance, tts_close_by_sys_error,
+        tts_water_on, tts_water_off, tts_foam_on, tts_foam_off,
+        tts_cleaner_on, tts_cleaner_off, tts_tap_on, tts_tap_off, tts_user_ext_on, tts_user_ext_off,
+        tts_alert_user_login, tts_alert_user_login_timeout,
+        tts_alert_account_required, tts_alert_password_required,
+        tts_alert_account_len_error, tts_alert_password_len_error,
+        tts_alert_sys_boot, tts_alert_idle_mode, tts_alert_sleep_mode,
+        tts_alert_config_mode, tts_alert_maintenance_mode,
+        tts_alert_no_water, tts_alert_no_foam, tts_alert_motor_error,
+        tts_alert_idle_remain_time, tts_alert_operation_remain_time, tts_alert_insert_coin
     </sql>
 
 </mapper>

+ 76 - 0
docs/sql/device_config_add_columns.sql

@@ -0,0 +1,76 @@
+-- ============================================
+-- 石斑鱼主板参数配置补全
+-- 为 t_device_config 表新增缺失的参数列
+-- 生成时间: 2026-06-04
+-- ============================================
+
+-- 收费扩展
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS space_timeout_seconds INT DEFAULT 1800 COMMENT '车位免费时间(秒),1800=免费30分钟';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS space_timeout_mode INT DEFAULT 0 COMMENT '车位超时收费方式,0=只收超时后费用,1=收取全部时间费用';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS amount_min_limit INT DEFAULT 0 COMMENT '最低消费(分),累计消费为0时不收取';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS prepay_money INT DEFAULT 0 COMMENT '最高消费/预付金额(分),防止消费过高';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS price_countdown INT DEFAULT 0 COMMENT '一段时间不操作设备启用收费';
+
+-- 其他扩展
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS idle_timeout_strategy INT DEFAULT 0 COMMENT '空闲超时策略,0=超时后结束订单,1=超时后倒计时扣费';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS timezone INT DEFAULT 480 COMMENT '时区设置(分钟),480=北京时间';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS user_input_mode INT DEFAULT 0 COMMENT '用户输入信息页是否需要(自动洗车机版本适用)';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS login_timeout INT DEFAULT 0 COMMENT '登录超时时间';
+
+-- 电机扩展
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS foam_link_mode INT DEFAULT 0 COMMENT '清水泡沫联动,0=关,1=开(打开泡沫同时自动打开清水)';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS motor_fee_flow INT DEFAULT 0 COMMENT '根据流量收费,0=关,1=开(只有有流量时才收费)';
+
+-- 功能模式开关
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS coat_mode INT DEFAULT 0 COMMENT '镀膜功能开关,0=关,1=开';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS blow_mode INT DEFAULT 0 COMMENT '吹气功能开关,0=关,1=开';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS sensor_water INT DEFAULT 0 COMMENT '水流量传感器,0=未安装,1=已安装';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS light_alt_mode INT DEFAULT 0 COMMENT '照明继电器复用,0=照明继电器,1=远程控制继电器';
+
+-- 语音 TTS 配置(开机语音)
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_open_by_button VARCHAR(50) DEFAULT NULL COMMENT '按键开机提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_open_by_network VARCHAR(50) DEFAULT NULL COMMENT '网络开机提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_open_by_card VARCHAR(50) DEFAULT NULL COMMENT '刷卡开机提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_open_by_coin VARCHAR(50) DEFAULT NULL COMMENT '投币开机提示音';
+
+-- 语音 TTS 配置(关机语音)
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_close_by_button VARCHAR(50) DEFAULT NULL COMMENT '按键关机提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_close_by_card VARCHAR(50) DEFAULT NULL COMMENT '刷卡关机提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_close_by_network VARCHAR(50) DEFAULT NULL COMMENT '网络关机提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_close_by_idle_timeout VARCHAR(50) DEFAULT NULL COMMENT '空闲超时关机提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_close_by_operation_timeout VARCHAR(50) DEFAULT NULL COMMENT '操作超时关机提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_close_by_no_balance VARCHAR(50) DEFAULT NULL COMMENT '余额不足关机提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_close_by_sys_error VARCHAR(50) DEFAULT NULL COMMENT '系统错误关机提示音(保留)';
+
+-- 语音 TTS 配置(功能语音)
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_water_on VARCHAR(50) DEFAULT NULL COMMENT '打开清水提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_water_off VARCHAR(50) DEFAULT NULL COMMENT '关闭清水提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_foam_on VARCHAR(50) DEFAULT NULL COMMENT '打开泡沫提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_foam_off VARCHAR(50) DEFAULT NULL COMMENT '关闭泡沫提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_cleaner_on VARCHAR(50) DEFAULT NULL COMMENT '打开吸尘器提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_cleaner_off VARCHAR(50) DEFAULT NULL COMMENT '关闭吸尘器提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_tap_on VARCHAR(50) DEFAULT NULL COMMENT '打开水龙头提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_tap_off VARCHAR(50) DEFAULT NULL COMMENT '关闭水龙头提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_user_ext_on VARCHAR(50) DEFAULT NULL COMMENT '打开消毒提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_user_ext_off VARCHAR(50) DEFAULT NULL COMMENT '关闭消毒提示音';
+
+-- 语音 TTS 配置(登录语音)
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_user_login VARCHAR(50) DEFAULT NULL COMMENT '用户登录提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_user_login_timeout VARCHAR(50) DEFAULT NULL COMMENT '登录超时提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_account_required VARCHAR(50) DEFAULT NULL COMMENT '未输入账号提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_password_required VARCHAR(50) DEFAULT NULL COMMENT '未输入密码提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_account_len_error VARCHAR(50) DEFAULT NULL COMMENT '账号长度错误提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_password_len_error VARCHAR(50) DEFAULT NULL COMMENT '密码长度错误提示音';
+
+-- 语音 TTS 配置(其他提示音)
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_sys_boot VARCHAR(50) DEFAULT NULL COMMENT '系统启动提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_idle_mode VARCHAR(50) DEFAULT NULL COMMENT '空闲模式提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_sleep_mode VARCHAR(50) DEFAULT NULL COMMENT '非营业时间段提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_config_mode VARCHAR(50) DEFAULT NULL COMMENT '配置查看模式提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_maintenance_mode VARCHAR(50) DEFAULT NULL COMMENT '维护模式提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_no_water VARCHAR(50) DEFAULT NULL COMMENT '无水提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_no_foam VARCHAR(50) DEFAULT NULL COMMENT '无泡沫提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_motor_error VARCHAR(50) DEFAULT NULL COMMENT '电机热保护提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_idle_remain_time VARCHAR(50) DEFAULT NULL COMMENT '空闲超时关机前提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_operation_remain_time VARCHAR(50) DEFAULT NULL COMMENT '操作超时关机前提示音';
+ALTER TABLE t_device_config ADD COLUMN IF NOT EXISTS tts_alert_insert_coin VARCHAR(50) DEFAULT NULL COMMENT '用户投币后提示音';

+ 178 - 0
docs/石斑鱼主板参数配置完整版.md

@@ -0,0 +1,178 @@
+
+# 阿里云物联网设备认证信息
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 产品标识 | product_key | string(32) | 字节 | - | 使用生产工具写入 |
+| 设备名称 | device_name | string(32) | 字节 | - | 使用生产工具写入 |
+| 设备密钥 | device_secret | string(32) | 字节 | - | 使用生产工具写入 |
+
+# 屏幕个性化配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 屏幕二维码 | qrcode_url | string(128) | 字节 | - | 使用生产工具写入 |
+| 屏幕二维码格式 | qrcode_format | int(0 - 1) | - | 为0时自动追加设备认证信息(产品标识和设备名称),为1表示直接显示 | 网络配置 |
+| 屏幕左下方文本 | user_message.1 | string(50) | 字节 | 屏幕左下角文字 | 不同版本固件有长度限制 |
+| 屏幕右下方文本 | user_message.2 | string(50) | 字节 | 屏幕右下角文字 | 不同版本固件有长度限制 |
+
+# 收费配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 清水单价 | water_price | int(0 - 50000) | 分/分钟 | 100表示一元每分钟 | - |
+| 泡沫单价 | foam_price | int(0 - 50000) | 分/分钟 | 100表示一元每分钟 | - |
+| 吸尘单价 | cleaner_price | int(0 - 50000) | 分/分钟 | 100表示一元每分钟 | - |
+| 洗手单价 | tap_price | int(0 - 50000) | 分/分钟 | 100表示一元每分钟 | - |
+| 消毒单价 | user_ext_price | int(0 - 50000) | 分/分钟 | 100表示一元每分钟 | - |
+| 车位占用单价 | space_price | int(0 - 50000) | 分/分钟 | 100表示一元每分钟 | - |
+| 车位免费时间 | space_timeout_seconds | int(0 - 86400) | 秒 | 1800表示车位免费使用30分钟 | - |
+| 车位占用超时后的收费方式 | space_timeout_mode | int(0 - 1) | - | 例如车位占用40分钟,0表示只收取超时后10分钟费用,1表示收取40分的费用 | - |
+| 最低消费 | amount_min_limit | int(0 - 50000) | 分 | 100表示每次开机最少收1元 | 当累计消费为0时不收取费用 |
+| 最高消费(预付金额) | prepay_money | int(0 - 50000) | 分 | 2000表示每次开机最多消费20元 | 防止用户忘记关机导致消费过高 |
+| 按键开机可用金额 | quick_open_money | int(0 - 50000) | 分 | 2000表示按一次维护按键直接开机的金额 | 0表示关闭这个功能 |
+| 一段时间不操作设备启用收费 | price_countdown | int(0 - 50000) | 分 | 配合空闲超时策略配置使用 | - |
+
+# 其他配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 工作指示灯(室内照明)关闭延时 | work_light_delay | int(0 - 86400) | 秒 | 30表示洗车结束关机后延时30秒关闭工作指示灯 | 0表示立刻关闭指示灯 |
+| 水龙头自动关闭延时 | tap_on_delay | int(0 - 86400) | 秒 | 30表示打开水龙头后30秒自动关闭水龙头 | 0表示不允许自动关闭水龙头 |
+| 空闲超时关机 | idle_timeout | int(0 - 86400) | 秒 | 1200表示20分钟不操作机器自动结束订单,用户操作一次就重新开始倒计时一下。 | - |
+| 空闲超时提示音倒计时 | notice_threshold_idle | int(0 - 86400) | 秒 | 60表示当空闲超时倒计时不足60秒的时候发出提示音,提示用户按任意功能键阻止设备关闭。 | - |
+| 操作超时关机 | operation_timeout | int(0 - 86400) | 秒 | 3600表示每次开机后有60分钟的操作时间,60分钟到了会强制结束订单。 | - |
+| 操作超时提示音倒计时 | notice_threshold_operation | int(0 - 86400) | 秒 | 300表示当剩余操作时间不足5分钟的时候发出提示音,提示用户合理安排剩余时间。 | - |
+| 空闲超时策略配置 | idle_timeout_strategy | int(0 - 1) | - | 一段时间不操作设备的话,是开始收费还是强制结束订单。默认策略0:超时后结束订单。策略1:超时后倒计时扣费 | - |
+| 时区设置 | timezone | int(0 - 720) | 分 | 单位是分钟,范围是正负720 ,比如北京时间就是UTC时间+8小时, 要设置为8*60=480 | - |
+| 用户输入信息页是否需要 | user_input_mode | - | - | 自动洗车机版本适用,信息输入页是否需要 | - |
+
+# 刷卡配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 卡密码 | card_key | int(0 - 999999) | - | 123456表示密码为123456的卡可以在本机使用。 | 刷卡按照最高消费来扣费,洗完车再次刷卡可以根据配置是否退回余额。卡密码使用卡管理工具写入到卡里面,修改后会导致以前的卡失效。 |
+| 刷卡是否退回余额 | card_return_money | int(0 - 1) | - | 0表示再次刷卡不退回余额,1表示再次刷卡退回余额 | - |
+| 刷卡扣费延时 | card_return_money_delay | int(0 - 86400) | 秒 | 30表示当设置为不退款的情况下,如果不超过30秒还是可以退款的。 | - |
+
+# 投币配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 工作模式 | coin_mode | int(0 - 1) | - | 0表示没有投币器,1表示有投币器 | - |
+| 最少投币数量 | coin_min_num | int(1 - 100) | - | 最少要投几个币开机 | - |
+| 硬币的面值 | coin_money | int(0 - 50000) | 分 | 100表示一个硬币信号代表100分钱 | - |
+| 每次投币增加操作时间 | coin_add_second | int(0 - 86400) | 秒 | 600表示每次投币在默认操作超时的基础上增加操作时间10分钟 | - |
+| 连续投币的等待时间 | coin_wait_timeout | int(0 - 86400) | 秒 | 60表示连续投币达到最少投币数量就立即开机,不到最低投币数量限制就等待60秒,等待超时就清零已投币计数。 | - |
+
+# 电机配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 启动延时 | motor_on_delay | int(100 - 30000) | 毫秒 | 电机每次启动最少要开多少毫秒 | 推荐5秒 |
+| 关闭延时 | motor_off_delay | int(100 - 5000) | 毫秒 | 电机每次关闭最少要关闭多少毫秒 | 推荐1秒 |
+| 关闭灵敏度 | motor_on_interval | int(100 - 30000) | 毫秒 | 多久收不到流量信号就关闭电机 | 推荐10秒 |
+| 自动启动 | motor_flow_on | int(0 - 1) | - | 有流量的时候是否自动启动水泵 | 推荐关闭 |
+| 自动关闭 | motor_flow_off | int(0 - 1) | - | 没有流量的时候是否自动关闭水泵 | 推荐开启 |
+| 清水泡沫联动 | foam_link_mode | int(0 - 1) | - | 打开泡沫继电器的同时自动打开清水电磁阀(泡沫水管方案决定的) | 请根据实际需要配置 |
+| 根据流量收费 | motor_fee_flow | int(0 - 1) | - | 只有当有流量的时候才收清水或泡沫的费用 | 请根据实际需要配置 |
+
+# 营业时间配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 工作模式 | work_mode | int(0 - 2) | - | 0:全天暂停营业 1:全天营业 2:根据时间段开始营业 | 网络在线时主板每小时自动同步时间。 |
+| 时间段1 | work_time_period.1 | string(32) | 字节 | "08:00 - 12:00" 上午8点到中午12点营业 | 当时间错误时继续营业。 |
+| 时间段2 | work_time_period.2 | string(32) | 字节 | "14:00 - 21:00" 下午2点到晚上9点营业 | - |
+
+# 照明配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 工作模式 | light_mode | int(0 - 2) | - | 0:全天暂停营业 1:全天营业 2:根据时间段开始营业 | 网络在线时主板每小时自动同步时间。 |
+| 时间段1 | light_time_period.1 | string(32) | 字节 | "18:00 - 22:00" 下午6点到晚上10点打开照明 | 当时间错误时关闭照明。 |
+| 时间段2 | light_time_period.2 | string(32) | 字节 | "18:00 - 08:00" 下午6点到早上8点打开照明 | - |
+
+# 维护模式配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 维护模式标志 | maintenance_mode | int(0 - 1) | - | 0:正常模式,1:维护模式(显示系统维护,机器无法使用)
+可以连按三次维护按键进入/退出维护模式 | 在机器故障的时候使用,阻止用户开机使用。 |
+
+# 闸机联动
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 工作模式 | gate_mode | int(0 - 2) | - | 0:无闸机 1:闪开模式 2:闪断模式 | - |
+| 闸机信号宽度 | gate_delay | int(0 - 3000) | 毫秒 | 闸机信号宽度,一般闸机300毫秒即可。 | - |
+| 开机的时候是否打开闸机 | gate_open_enter | int(0 - 1) | - | 0表示无操作,1表示收到订单后开机的时候是否打开闸机,让车子开进来。 | - |
+| 关机的时候是否打开闸机 | gate_open_exit | int(0 - 1) | - | 0表示无操作,1表示结束订单的关机的时候是否打开闸机,让车子开出去。 | - |
+
+# 语音配置(仅4G版本支持)
+
+> V4.105版本之后转为直接修改MP3语音文件,不再支持文字配置。
+
+
+# 开机语音配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 按键开机提示音 | tts_open_by_button | string(50) | 字节 | - | - |
+| 网络开机提示音 | tts_open_by_network | string(50) | 字节 | - | - |
+| 刷卡开机提示音 | tts_open_by_card | string(50) | 字节 | - | - |
+| 投币开机提示音 | tts_open_by_coin | string(50) | 字节 | - | - |
+
+# 关机语音配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 按键关机 | tts_close_by_button | string(50) | 字节 | - | - |
+| 刷卡关机 | tts_close_by_card | string(50) | 字节 | - | - |
+| 网络关机 | tts_close_by_network | string(50) | 字节 | - | - |
+| 空闲超时关机 | tts_close_by_idle_timeout | string(50) | 字节 | - | - |
+| 操作超时关机 | tts_close_by_operation_timeout | string(50) | 字节 | - | - |
+| 余额不足关机 | tts_close_by_no_balance | string(50) | 字节 | - | - |
+| 系统错误关机 | tts_close_by_sys_error | string(50) | 字节 | - | 保留 |
+
+# 功能语音配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 打开清水提示音 | tts_water_on | string(50) | 字节 | - | - |
+| 关闭清水提示音 | tts_water_off | string(50) | 字节 | - | - |
+| 打开泡沫提示音 | tts_foam_on | string(50) | 字节 | - | - |
+| 关闭泡沫提示音 | tts_foam_off | string(50) | 字节 | - | - |
+| 打开吸尘器提示音 | tts_cleaner_on | string(50) | 字节 | - | - |
+| 关闭吸尘器提示音 | tts_cleaner_off | string(50) | 字节 | - | - |
+| 打开水龙头提示音 | tts_tap_on | string(50) | 字节 | - | - |
+| 关闭水龙头提示音 | tts_tap_off | string(50) | 字节 | - | - |
+| 打开消毒提示音 | tts_user_ext_on | string(50) | 字节 | - | - |
+| 关闭消毒提示音 | tts_user_ext_off | string(50) | 字节 | - | - |
+
+# 登录提示音配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 用户输完正确的账号密码后点击登陆按钮发出的提示音 | tts_alert_user_login | string(50) | 字节 | 正在登陆,请稍候 | 需要触摸屏和响应的固件支持。 |
+| 登陆超时提示音 | tts_alert_user_login_timeout | string(50) | 字节 | 等待服务器响应超时,请稍后重试 | - |
+| 用户未输入账号提示音 | tts_alert_account_required | string(50) | 字节 | 请输入账号 | - |
+| 用户未输入密码提示音 | tts_alert_password_required | string(50) | 字节 | 请输入密码 | - |
+| 用户账号长度错误提示音 | tts_alert_account_len_error | string(50) | 字节 | 账号长度错误 | - |
+| 用户密码长度错误提示音 | tts_alert_password_len_error | string(50) | 字节 | 账号密码错误 | - |
+
+# 其它提示音配置
+
+| 参数名称 | 标识符 | 类型 | 单位 | 示例 | 备注 |
+|---|---|---|---|---|---|
+| 系统启动提示音音 | tts_alert_sys_boot | string(50) | 字节 | - | - |
+| 空闲模式提示音 | tts_alert_idle_mode | string(50) | 字节 | - | - |
+| 非营业时间段提示音 | tts_alert_sleep_mode | string(50) | 字节 | - | - |
+| 配置查看模式提示音 | tts_alert_config_mode | string(50) | 字节 | - | - |
+| 维护模式提示音 | tts_alert_maintenance_mode | string(50) | 字节 | - | - |
+| 没有水的时候提示音 | tts_alert_no_water | string(50) | 字节 | - | - |
+| 没有泡沫时的时候提示音 | tts_alert_no_foam | string(50) | 字节 | - | - |
+| 电机热保护提示音 | tts_alert_motor_error | string(50) | 字节 | - | - |
+| 空闲超时关机前的提示音 | tts_alert_idle_remain_time | string(50) | 字节 | - | - |
+| 操作超时关机前前的提示音 | tts_alert_operation_remain_time | string(50) | 字节 | - | - |
+| 用户投币后的提示音 | tts_alert_insert_coin | string(50) | 字节 | - | - |