Browse Source

fix:设置显示当前温度

master
guoapeng 3 months ago
parent
commit
f39e504908
  1. 167
      src/pages/Index/Settings/Device.vue

167
src/pages/Index/Settings/Device.vue

@ -46,37 +46,54 @@
@focus="showKeyboard('number', 1)" @focus="showKeyboard('number', 1)"
readonly readonly
/> />
<button @click="updateSetting('allTemperature', settings.allTemperature)">
<button
@click="updateSetting('allTemperature', settings.allTemperature)"
>
设置 设置
</button> </button>
</div> </div>
</div> </div>
<div class="setting-item setting-item-no-border"> <div class="setting-item setting-item-no-border">
<span class="label">孵育盘温度</span>
<span class="label">孵育盘温度 <el-tag type="primary" class="option-tag"> {{ deviceStore.sensorState?.incubateBoxTemperature }}</el-tag></span>
<div class="options"> <div class="options">
<input <input
style="width: 150px" style="width: 150px"
v-model="settings.incubateBoxTemperature" v-model="settings.incubateBoxTemperature"
type="number" type="number"
@focus="showKeyboard('number',2)"
@focus="showKeyboard('number', 2)"
readonly readonly
/> />
<button @click="updateSetting('incubateBoxTemperature', settings.incubateBoxTemperature)">
<button
@click="
updateSetting(
'incubateBoxTemperature',
settings.incubateBoxTemperature,
)
"
>
设置 设置
</button> </button>
</div> </div>
</div> </div>
<div class="setting-item setting-item-no-border"> <div class="setting-item setting-item-no-border">
<span class="label">板夹区温度</span>
<span class="label">板夹区温度 <el-tag type="primary" class="option-tag"> {{ deviceStore.sensorState?.pboxTemperature }}</el-tag></span>
<div class="options"> <div class="options">
<input <input
style="width: 150px" style="width: 150px"
v-model="settings.plateBoxTemperature" v-model="settings.plateBoxTemperature"
type="number" type="number"
@focus="showKeyboard('number',3)"
@focus="showKeyboard('number', 3)"
readonly readonly
/> />
<button @click="updateSetting('plateBoxTemperature', settings.plateBoxTemperature)">
<button
@click="
updateSetting('plateBoxTemperature', settings.plateBoxTemperature)
"
>
设置 设置
</button> </button>
</div> </div>
@ -169,15 +186,15 @@
</div> </div>
<!-- 键盘 --> <!-- 键盘 -->
<transition name="slide-up"> <transition name="slide-up">
<div class="keyboard" v-if="keyboardVisible">
<SimpleKeyboard
:input="currentInputValue"
:layout
@onChange="handleKeyboardInput"
@onKeyPress="handleKeyPress"
/>
</div>
</transition>
<div class="keyboard" v-if="keyboardVisible">
<SimpleKeyboard
:input="currentInputValue"
:layout
@onChange="handleKeyboardInput"
@onKeyPress="handleKeyPress"
/>
</div>
</transition>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -191,9 +208,15 @@ import {
getTemperatureRange, getTemperatureRange,
setDHCP, setDHCP,
setLocalIP, setLocalIP,
setAutoLogoutTime, setAllTemperature, setIncubateBoxTemperature, setPlateBoxTemperature, setDateAndTime
setAutoLogoutTime,
setAllTemperature,
setIncubateBoxTemperature,
setPlateBoxTemperature,
setDateAndTime,
} from '@/services' } from '@/services'
import { eMessage, isValidIPv4 } from '../utils' import { eMessage, isValidIPv4 } from '../utils'
import { useDeviceStore } from '@/store/index'
const deviceStore = useDeviceStore()
const layout = ref() const layout = ref()
@ -202,7 +225,7 @@ const numericLayout = {
'1 2 3', '1 2 3',
'4 5 6', '4 5 6',
'7 8 9', '7 8 9',
'{bksp} 0 {enter}' //
'{bksp} 0 {enter}', //
], ],
} }
@ -213,7 +236,7 @@ interface Settings {
autoLogout: boolean autoLogout: boolean
autoLogoutTimeout: number autoLogoutTimeout: number
allTemperature: number | undefined allTemperature: number | undefined
incubateBoxTemperature:number
incubateBoxTemperature: number
plateBoxTemperature: number plateBoxTemperature: number
DHCP: boolean DHCP: boolean
localIp: string localIp: string
@ -225,7 +248,7 @@ const settings = ref<Settings>({
autoLogout: false, autoLogout: false,
autoLogoutTimeout: 10, autoLogoutTimeout: 10,
allTemperature: 20, allTemperature: 20,
incubateBoxTemperature:20,
incubateBoxTemperature: 20,
plateBoxTemperature: 20, plateBoxTemperature: 20,
DHCP: true, DHCP: true,
localIp: '', localIp: '',
@ -283,8 +306,8 @@ const fetchSettings = async () => {
function isIntegerInRange(str: string): boolean { function isIntegerInRange(str: string): boolean {
// 20-40 // 20-40
const regex = /^(2[0-9]|3[0-9]|40)$/;
return regex.test(str);
const regex = /^(2[0-9]|3[0-9]|40)$/
return regex.test(str)
} }
// //
@ -352,9 +375,13 @@ const updateSetting = async (key: string, value: any) => {
settings.value = { ...settings.value, [key]: value } settings.value = { ...settings.value, [key]: value }
if (key === 'allTemperature') { if (key === 'allTemperature') {
settings.value.incubateBoxTemperature = settings.value.plateBoxTemperature = value
settings.value.incubateBoxTemperature =
settings.value.plateBoxTemperature = value
} }
if (settings.value.incubateBoxTemperature === settings.value.plateBoxTemperature) {
if (
settings.value.incubateBoxTemperature ===
settings.value.plateBoxTemperature
) {
settings.value.allTemperature = settings.value.incubateBoxTemperature settings.value.allTemperature = settings.value.incubateBoxTemperature
} else { } else {
settings.value.allTemperature = undefined settings.value.allTemperature = undefined
@ -374,7 +401,7 @@ const startTimer = () => {
intervalId.value = setInterval(() => { intervalId.value = setInterval(() => {
const now = new Date() const now = new Date()
currentDate.value = now currentDate.value = now
time.value = format(now, 'yyyy.MM.dd HH:mm:ss');
time.value = format(now, 'yyyy.MM.dd HH:mm:ss')
}, 1000) }, 1000)
} }
@ -412,7 +439,7 @@ const showKeyboard = (KeyboardType: string | undefined, type: number) => {
inputNumberType.value = type inputNumberType.value = type
if (KeyboardType) { if (KeyboardType) {
layout.value = numericLayout layout.value = numericLayout
}else{
} else {
layout.value = undefined layout.value = undefined
} }
keyboardVisible.value = false keyboardVisible.value = false
@ -426,15 +453,14 @@ const showKeyboard = (KeyboardType: string | undefined, type: number) => {
const inputNumberType = ref(0) const inputNumberType = ref(0)
const inputType = { const inputType = {
1:'allTemperature',
2:'incubateBoxTemperature',
3:'plateBoxTemperature',
4:'localIp',
1: 'allTemperature',
2: 'incubateBoxTemperature',
3: 'plateBoxTemperature',
4: 'localIp',
} }
// //
const handleKeyboardInput = (value: string) => { const handleKeyboardInput = (value: string) => {
// //
currentInputValue.value = value currentInputValue.value = value
settings.value[inputType[inputNumberType.value]] = value settings.value[inputType[inputNumberType.value]] = value
@ -469,18 +495,17 @@ onUnmounted(() => {
const pauseTimer = () => { const pauseTimer = () => {
if (intervalId.value) { if (intervalId.value) {
console.log(111) console.log(111)
clearInterval(intervalId.value);
intervalId.value = null;
clearInterval(intervalId.value)
intervalId.value = null
} }
};
}
// //
const resumeTimer = () => { const resumeTimer = () => {
if (!intervalId.value) { if (!intervalId.value) {
startTimer();
startTimer()
} }
};
}
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@ -494,8 +519,8 @@ const resumeTimer = () => {
flex-direction: column; flex-direction: column;
gap: 20px; gap: 20px;
.setting-item-box > :nth-child(2) { .setting-item-box > :nth-child(2) {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
} }
.setting-item-no-border { .setting-item-no-border {
@ -516,6 +541,13 @@ const resumeTimer = () => {
font-size: 28px; font-size: 28px;
font-weight: 500; font-weight: 500;
color: #303133; color: #303133;
display: flex;
align-items: center;
.option-tag {
font-size: 25px;
padding: 20px 10px;
margin: 0 10px;
}
} }
.value { .value {
@ -562,34 +594,35 @@ const resumeTimer = () => {
} }
} }
.keyboard { .keyboard {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 300px;
background-color: #f5f7fa;
border-top-left-radius: 16px;
border-top-right-radius: 16px;
box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.1);
z-index: 1000;
}
//
.slide-up-enter-active,
.slide-up-leave-active {
transition: transform 0.3s ease;
}
.slide-up-enter-from,
.slide-up-leave-to {
transform: translateY(100%);
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 300px;
background-color: #f5f7fa;
border-top-left-radius: 16px;
border-top-right-radius: 16px;
box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.1);
z-index: 1000;
}
//
.slide-up-enter-active,
.slide-up-leave-active {
transition: transform 0.3s ease;
}
.slide-up-enter-from,
.slide-up-leave-to {
transform: translateY(100%);
}
:deep(.date-input) {
width: 250px;
margin-right: 30px;
.el-input__wrapper {
height: 40px;
} }
:deep(.date-input) {
width: 250px;
margin-right: 30px;
.el-input__wrapper {
height: 40px;
}
.el-input__inner {
font-size: 18px;
}
.el-input__inner {
font-size: 18px;
} }
}
</style> </style>
Loading…
Cancel
Save