forked from gzt/A8000
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
6.0 KiB
269 lines
6.0 KiB
<template>
|
|
<div v-if="!lisVisible" class="lis-setting">
|
|
<div class="setting-item">
|
|
<span class="label">类型</span>
|
|
<div class="options">
|
|
{{ LISTypeMap[lisSettings && lisSettings.lisType || ''] }}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="setting-item">
|
|
<span class="label">自动上报</span>
|
|
<div class="options">
|
|
{{ lisSettings?.lisAutoExport ? '开启' : '关闭' }}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="setting-item">
|
|
<span class="label">协议</span>
|
|
<div class="options">
|
|
Boditech
|
|
</div>
|
|
</div>
|
|
<div class="setting-item">
|
|
<span class="label">接口</span>
|
|
<div class="options">
|
|
{{ LISInterfaceMap[lisSettings && lisSettings.lisIf || ''] }}
|
|
</div>
|
|
</div>
|
|
<div
|
|
v-if="lisSettings && lisSettings.lisIf === 'NETWORK'"
|
|
class="setting-item"
|
|
>
|
|
<span class="label">Host's IP</span>
|
|
<div class="options">
|
|
{{ lisSettings.lisNetIp }}
|
|
</div>
|
|
</div>
|
|
<div
|
|
v-if="lisSettings && lisSettings.lisIf === 'NETWORK'"
|
|
class="setting-item"
|
|
>
|
|
<span class="label">Host's Port</span>
|
|
<div class="options">
|
|
{{ lisSettings.LISNetPortStr }}
|
|
</div>
|
|
</div>
|
|
<div
|
|
v-if="lisSettings && lisSettings.lisIf === 'SERIAL'"
|
|
class="setting-item"
|
|
>
|
|
<span class="label">传输速度</span>
|
|
<div class="options">
|
|
{{ LISSerialBaudrateMap[lisSettings && lisSettings.lisSerialBaudrate || '']}}
|
|
</div>
|
|
</div>
|
|
<div class="lis-btn">
|
|
<button class="edit-lis" @click="onEditList" >
|
|
编辑LIS
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<EditLis v-else @save-success="saveSuccess" @close="onCloseDialog"/>
|
|
<!-- 键盘 -->
|
|
<transition name="slide-up">
|
|
<div class="keyboard" v-if="keyboardVisible">
|
|
<SoftKeyboard
|
|
ref="softKeyboardRef"
|
|
v-model="inputValue"
|
|
:is-visible="keyboardVisible"
|
|
:keyboard-type="keyboardType"
|
|
@update-keyboard-visible="(visible) => keyboardVisible = visible"
|
|
@confirm="()=>{}"
|
|
@close="keyboardVisible = false"
|
|
/>
|
|
</div>
|
|
</transition>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import {
|
|
getLISSetting,
|
|
LISInterfaceMap,
|
|
LISSerialBaudrateMap,
|
|
LISSettings,
|
|
LISTypeMap,
|
|
} from '@/services'
|
|
import { onMounted, onUnmounted, ref, watch } from 'vue'
|
|
import SoftKeyboard from '@/components/SoftKeyboard.vue'
|
|
import EditLis from '@/pages/Index/Settings/EditLis.vue'
|
|
|
|
const inputValue = ref('')
|
|
const keyboardType = ref<'text' | 'number'>('number')
|
|
const softKeyboardRef = ref()
|
|
const lisVisible = ref(false)
|
|
const lisSettings = ref<(LISSettings & { LISNetPortStr: string, lisAutoExport: boolean }) | undefined>(
|
|
undefined,
|
|
)
|
|
const getLisSetting = async () => {
|
|
const res = await getLISSetting()
|
|
if (res && res.success) {
|
|
lisSettings.value = {
|
|
...res.data,
|
|
LISNetPortStr: res.data.lisNetPort.toString(),
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
onMounted(() => {
|
|
console.log()
|
|
getLisSetting()
|
|
})
|
|
// 键盘相关状态
|
|
const keyboardVisible = ref(false)
|
|
const currentInputValue = ref('')
|
|
const currentInputField = ref<'ip' | 'port' | ''>('')
|
|
|
|
// 处理键盘输入
|
|
const handleKeyboardInput = (value: string) => {
|
|
if (!inputValue.value) return
|
|
// 更新当前输入值
|
|
inputValue.value = value
|
|
// 更新对应字段的值
|
|
if (currentInputField.value === 'ip') {
|
|
lisSettings.value!.lisNetIp = value
|
|
} else {
|
|
lisSettings.value!.LISNetPortStr = value
|
|
}
|
|
}
|
|
|
|
|
|
watch(inputValue, (newVal: string) => {
|
|
if(newVal){
|
|
handleKeyboardInput(newVal)
|
|
}
|
|
})
|
|
|
|
// 隐藏键盘
|
|
const hideKeyboard = () => {
|
|
keyboardVisible.value = false
|
|
currentInputField.value = ''
|
|
currentInputValue.value = ''
|
|
}
|
|
|
|
const onEditList = () => {
|
|
lisVisible.value = true
|
|
}
|
|
|
|
const saveSuccess = () => {
|
|
onCloseDialog()
|
|
getLisSetting()
|
|
}
|
|
|
|
|
|
const onCloseDialog = () => {
|
|
lisVisible.value = false
|
|
}
|
|
|
|
// 在组件卸载时清理状态
|
|
onUnmounted(() => {
|
|
hideKeyboard()
|
|
})
|
|
</script>
|
|
|
|
<style lang="less" scoped>
|
|
.lis-setting {
|
|
background-color: #f5f7fa;
|
|
width: 100%;
|
|
height: 87vh;
|
|
box-sizing: border-box;
|
|
padding: 20px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 20px;
|
|
.setting-item {
|
|
background-color: #fff;
|
|
border-radius: 12px;
|
|
padding: 24px 32px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
|
|
transition: all 0.3s ease;
|
|
height: 4rem;
|
|
.label {
|
|
font-size: 28px;
|
|
font-weight: 500;
|
|
color: #303133;
|
|
}
|
|
|
|
input {
|
|
padding: 8px;
|
|
border: 1px solid #ccc;
|
|
font-size: 30px;
|
|
transition: box-shadow 0.2s ease;
|
|
border-radius: 10px;
|
|
}
|
|
|
|
.options {
|
|
display: flex;
|
|
gap: 12px;
|
|
flex-wrap: wrap;
|
|
font-size: 1.75rem;
|
|
button {
|
|
min-width: 120px;
|
|
height: 56px;
|
|
padding: 0 24px;
|
|
border: 1px solid #dcdfe6;
|
|
background-color: #fff;
|
|
border-radius: 8px;
|
|
font-size: 24px;
|
|
color: #606266;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
|
|
&.active {
|
|
color: #fff;
|
|
background-color: #409eff;
|
|
border-color: #409eff;
|
|
box-shadow: 0 2px 8px rgba(64, 158, 255, 0.3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.edit-lis{
|
|
width: 100vw;
|
|
height: 5rem;
|
|
padding: 0 24px;
|
|
border: 1px solid #dcdfe6;
|
|
border-radius: 8px;
|
|
font-size: 24px;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
color: #fff;
|
|
background-color: #409eff;
|
|
}
|
|
.lis-btn{
|
|
width: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.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%);
|
|
}
|
|
</style>
|