Browse Source

fix: 部分bug修复

master
guoapeng 2 weeks ago
parent
commit
ce3af046b6
  1. 152
      src/components/formula/FormulaConfig.vue
  2. 12
      src/components/home/Environment.vue
  3. 43
      src/components/home/HomeLogLevel.vue
  4. 8
      src/components/home/LineChart.vue
  5. 42
      src/components/setting/History.vue
  6. 1
      src/stores/homeStore.ts

152
src/components/formula/FormulaConfig.vue

@ -176,11 +176,15 @@ const getFormData = () => {
* 监听表单数据变化同步更新软键盘输入值 * 监听表单数据变化同步更新软键盘输入值
* @param {Record<string, any>} newValue - 新的表单数据 * @param {Record<string, any>} newValue - 新的表单数据
*/ */
watch(formData, (newValue) => {
if (focusedInput.value) {
inputValue.value = newValue[focusedInput.value].toString()
}
}, { deep: true })
watch(
formData,
(newValue) => {
if (focusedInput.value) {
inputValue.value = newValue[focusedInput.value].toString()
}
},
{ deep: true },
)
const formRef = ref(null) const formRef = ref(null)
/** /**
@ -229,11 +233,14 @@ const onSaveFormula = () => {
const onSaveSetting = async () => { const onSaveSetting = async () => {
// //
const diff = compareJSON(formulaStore.defaultFormulaInfo, formData.value) const diff = compareJSON(formulaStore.defaultFormulaInfo, formData.value)
console.log(diff)
const diffKeys = Object.keys(diff) const diffKeys = Object.keys(diff)
if (diffKeys.length) { if (diffKeys.length) {
await Promise.all(diffKeys.map(async (key) => {
await setSettingFormulaConfig(key, diff[key].newVal)
}))
await Promise.all(
diffKeys.map(async (key) => {
await setSettingFormulaConfig(key, diff[key].newVal || diff[key].obj2)
}),
)
FtMessage.success('配方修改成功') FtMessage.success('配方修改成功')
} }
} }
@ -250,7 +257,7 @@ const setSettingFormulaConfig = async (settingName: string, settingVal: string)
fnName: 'setSettingVal', fnName: 'setSettingVal',
params: { params: {
settingName, settingName,
settingVal: settingVal.toString(),
settingVal: settingVal?.toString(),
}, },
}) })
formulaStore.getFormualDefaultData() formulaStore.getFormualDefaultData()
@ -408,21 +415,21 @@ defineExpose({
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-for="(item) in formulaConfigList"
v-for="item in formulaConfigList"
:key="item.setting_id" :key="item.setting_id"
:label="formulaNameMap[item.setting_id]" :label="formulaNameMap[item.setting_id]"
style="width: 50%;"
style="width: 50%"
> >
<template v-if="item.val_type === 'int'"> <template v-if="item.val_type === 'int'">
<el-input <el-input
style="width: 80%;"
v-model.number="formData[item.setting_id]" v-model.number="formData[item.setting_id]"
v-prevent-keyboard v-prevent-keyboard
style="width: 80%"
type="number" type="number"
:name="item.setting_id" :name="item.setting_id"
:controls="false" :controls="false"
:disabled="!item.is_visible_in_setting_page" :disabled="!item.is_visible_in_setting_page"
@focus="(e) => openKeyboard(e, item)"
@focus="e => openKeyboard(e, item)"
> >
<template v-if="labelUnitMap[item.setting_id]" #append> <template v-if="labelUnitMap[item.setting_id]" #append>
{{ labelUnitMap[item.setting_id] }} {{ labelUnitMap[item.setting_id] }}
@ -431,9 +438,9 @@ defineExpose({
</template> </template>
<template v-else-if="item.val_type === 'enum'"> <template v-else-if="item.val_type === 'enum'">
<el-input <el-input
style="width: 80%;"
v-model="formData[item.setting_id]" v-model="formData[item.setting_id]"
v-prevent-keyboard v-prevent-keyboard
style="width: 80%"
placeholder="请选择" placeholder="请选择"
readonly readonly
@focus="openModal" @focus="openModal"
@ -444,10 +451,7 @@ defineExpose({
</el-input> </el-input>
</template> </template>
<template v-else-if="item.val_type === 'boolean'"> <template v-else-if="item.val_type === 'boolean'">
<el-radio-group
v-model="formData[item.setting_id]"
:disabled="!item.is_visible_in_setting_page"
>
<el-radio-group v-model="formData[item.setting_id]" :disabled="!item.is_visible_in_setting_page">
<el-radio :label="true"> <el-radio :label="true">
</el-radio> </el-radio>
@ -478,7 +482,7 @@ defineExpose({
:keyboard-type="keyboardType" :keyboard-type="keyboardType"
:target-input="targetInputRef" :target-input="targetInputRef"
@confirm="handleConfirm" @confirm="handleConfirm"
@update-keyboard-visible="(visible) => keyboardVisible = visible"
@update-keyboard-visible="visible => (keyboardVisible = visible)"
@close="keyboardVisible = false" @close="keyboardVisible = false"
/> />
</Teleport> </Teleport>
@ -495,63 +499,63 @@ defineExpose({
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.formula-form{
font-size: 20px !important;
padding: 5px;
padding-left: 15px;
align-items: center;
.default-btn{
margin-top: 1rem;
}
.config-btn{
height: 3rem;
width: 8rem;
}
.formula-form {
font-size: 20px !important;
padding: 5px;
padding-left: 15px;
align-items: center;
.default-btn {
margin-top: 1rem;
} }
.formula-form-item{
display: grid;
grid-template-columns: 1fr 1fr;
.config-btn {
height: 3rem;
width: 8rem;
} }
}
.formData-input-config{
width: 10vw;
}
::v-deep .el-input__inner{
text-align: left;
}
::v-deep .el-form-item{
margin-right: 0;
}
::v-deep .el-input__inner{
height: 40px;
}
::v-deep .el-form-item{
align-items: center;
}
.formula-form-item {
display: grid;
grid-template-columns: 1fr 1fr;
}
/* 进入动画的初始状态 */
.slide-right-enter-from {
transform: translateX(100%);
}
/* 进入动画的结束状态(也可以理解为激活状态) */
.slide-right-enter-to {
transform: translateX(0);
}
/* 进入动画的过渡曲线等 */
.slide-right-enter-active {
transition: transform 0.3s ease-in-out;
}
/* 离开动画的初始状态(激活状态) */
.slide-right-leave-from {
transform: translateX(0);
}
/* 离开动画的结束状态 */
.slide-right-leave-to {
transform: translateX(100%);
}
/* 离开动画的过渡曲线等 */
.slide-right-leave-active {
transition: transform 0.3s ease-in-out;
}
.formData-input-config {
width: 10vw;
}
::v-deep .el-input__inner {
text-align: left;
}
::v-deep .el-form-item {
margin-right: 0;
}
::v-deep .el-input__inner {
height: 40px;
}
::v-deep .el-form-item {
align-items: center;
}
/* 进入动画的初始状态 */
.slide-right-enter-from {
transform: translateX(100%);
}
/* 进入动画的结束状态(也可以理解为激活状态) */
.slide-right-enter-to {
transform: translateX(0);
}
/* 进入动画的过渡曲线等 */
.slide-right-enter-active {
transition: transform 0.3s ease-in-out;
}
/* 离开动画的初始状态(激活状态) */
.slide-right-leave-from {
transform: translateX(0);
}
/* 离开动画的结束状态 */
.slide-right-leave-to {
transform: translateX(100%);
}
/* 离开动画的过渡曲线等 */
.slide-right-leave-active {
transition: transform 0.3s ease-in-out;
}
</style> </style>

12
src/components/home/Environment.vue

@ -69,7 +69,9 @@ onMounted(() => {
温度 温度
</div> </div>
<div class="env-row-value"> <div class="env-row-value">
{{ !envParams.temp || envParams.temp === -1 ? '--' : roundNumber(envParams.temp, 2) }}°C
{{
(envParams.temp !== 0 && !envParams.temp) || envParams.temp === -1 ? '--' : roundNumber(envParams.temp, 2)
}}°C
</div> </div>
</div> </div>
<div class="env-row"> <div class="env-row">
@ -77,7 +79,7 @@ onMounted(() => {
相对湿度 相对湿度
</div> </div>
<div class="env-row-value"> <div class="env-row-value">
{{ !envParams.rh || envParams.rh === -1 ? '--' : roundNumber(envParams.rh, 2) }}%RH
{{ (envParams.rh !== 0 && !envParams.rh) || envParams.rh === -1 ? '--' : roundNumber(envParams.rh, 2) }}%RH
</div> </div>
</div> </div>
<div class="env-row odd"> <div class="env-row odd">
@ -85,7 +87,7 @@ onMounted(() => {
相对饱和度 相对饱和度
</div> </div>
<div class="env-row-value"> <div class="env-row-value">
{{ !envParams.rs || envParams.rs === -1 ? '--' : roundNumber(envParams.rs, 2) }}%RS
{{ (envParams.rs !== 0 && !envParams.rs) || envParams.rs === -1 ? '--' : roundNumber(envParams.rs, 2) }}%RS
</div> </div>
</div> </div>
<div class="env-row"> <div class="env-row">
@ -93,7 +95,9 @@ onMounted(() => {
汽化过氧化氢 汽化过氧化氢
</div> </div>
<div class="env-row-value"> <div class="env-row-value">
{{ !envParams.h2o2 || envParams.h2o2 === -1 ? '--' : roundNumber(envParams.h2o2, 2) }}ppm
{{
(envParams.h2o2 !== 0 && !envParams.h2o2) || envParams.h2o2 === -1 ? '--' : roundNumber(envParams.h2o2, 2)
}}ppm
</div> </div>
</div> </div>
</div> </div>

43
src/components/home/HomeLogLevel.vue

@ -1,6 +1,8 @@
<script lang="ts" setup> <script lang="ts" setup>
import { syncSendCmd } from 'apis/system'
import SelectModal from 'components/common/SelectModal/index.vue' import SelectModal from 'components/common/SelectModal/index.vue'
import { ref, watchEffect } from 'vue'
import { useHomeStore } from 'stores/homeStore'
import { computed, ref, watchEffect } from 'vue'
import { useFormulaStore } from '@/stores/formulaStore' import { useFormulaStore } from '@/stores/formulaStore'
@ -9,6 +11,8 @@ const options = ref(formulaStore.logLevelOptions)
const loglevel = ref(formulaStore.loglevel) const loglevel = ref(formulaStore.loglevel)
const isModalOpen = ref(false) const isModalOpen = ref(false)
const homeStore = useHomeStore()
watchEffect(() => { watchEffect(() => {
options.value = formulaStore.logLevelOptions options.value = formulaStore.logLevelOptions
loglevel.value = formulaStore.loglevel loglevel.value = formulaStore.loglevel
@ -18,15 +22,30 @@ const openModal = () => {
isModalOpen.value = true isModalOpen.value = true
} }
const setRealtimeConfig = async (key: string, val: string) => {
await syncSendCmd({
className: 'DisinfectionCtrlServiceExt',
fnName: 'setRealtimeConfig',
params: { key, val },
})
}
const handleConfirm = (value: any) => { const handleConfirm = (value: any) => {
loglevel.value = value loglevel.value = value
formulaStore.updateLogLevel(value) formulaStore.updateLogLevel(value)
isModalOpen.value = false isModalOpen.value = false
if (!operationState.value) {
setRealtimeConfig('loglevel', value)
}
} }
const handleCancel = () => { const handleCancel = () => {
isModalOpen.value = false isModalOpen.value = false
} }
const operationState = computed(() => {
return homeStore.disinfectionState.state === 'idle' || homeStore.disinfectionState.state === 'finished'
})
</script> </script>
<template> <template>
@ -42,13 +61,7 @@ const handleCancel = () => {
@focus="openModal" @focus="openModal"
> >
<template #append> <template #append>
<bt-button
type="primary"
button-text="Log"
text-color="#ffffff"
height="4rem"
text-size="16px"
/>
<bt-button type="primary" button-text="Log" text-color="#ffffff" height="4rem" text-size="16px" />
</template> </template>
</el-input> </el-input>
</div> </div>
@ -64,24 +77,24 @@ const handleCancel = () => {
<style lang="scss" scoped> <style lang="scss" scoped>
$input-height: 3rem; $input-height: 3rem;
.home-right-level{
.home-right-level {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin-top: 24vh; margin-top: 24vh;
//font-family: Source Han Sans; //font-family: Source Han Sans;
font-size: 24px; font-size: 24px;
.input{
.input {
width: 14vw; width: 14vw;
height: $input-height
height: $input-height;
} }
.input-log{
.input-log {
color: #ffffff; color: #ffffff;
height: $input-height
height: $input-height;
} }
} }
.el-button { .el-button {
background-color: #2892F3 !important;
border-radius: 0 var(--el-border-radius-base) var(--el-border-radius-base) 0;
background-color: #2892f3 !important;
border-radius: 0 var(--el-border-radius-base) var(--el-border-radius-base) 0;
} }
</style> </style>

8
src/components/home/LineChart.vue

@ -7,6 +7,12 @@ const props = defineProps<{
}>() }>()
const dataLength = ref(30) const dataLength = ref(30)
const titles = {
Internal: '仓内',
WiredExtSensor: '外接传感器',
WirelessExtSensor: '无线传感器',
}
watch( watch(
() => props.envData, () => props.envData,
(newValue) => { (newValue) => {
@ -19,7 +25,7 @@ watch(
} }
const option = { const option = {
title: { title: {
text: '哈哈哈',
text: titles[newValue?.[0]?.type || ''] || '',
}, },
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',

42
src/components/setting/History.vue

@ -47,24 +47,20 @@ const showDetail = (historyItem: Setting.History) => {
}) })
} }
const onDelHistory = () => { const onDelHistory = () => {
if (selectedRecords.value.length !== 1) {
FtMessage.warning('请选择一条数据进行删除')
if (!selectedRecords.value.length) {
FtMessage.warning('请选择要删除的数据')
return return
} }
ElMessageBox.confirm(
'请确认是否删除?',
'删除',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
},
).then(() => {
ElMessageBox.confirm('请确认是否删除?', '删除', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
const delParams = { const delParams = {
className: 'DisinfectionLogsService', className: 'DisinfectionLogsService',
fnName: 'deleteReport',
fnName: 'deleteReports',
params: { params: {
logName: selectedRecords.value.map(item => item.name)[0],
logNames: selectedRecords.value.map(item => item.name),
}, },
} }
syncSendCmd(delParams).then((res) => { syncSendCmd(delParams).then((res) => {
@ -102,19 +98,11 @@ const onClose = () => {
<template> <template>
<div> <div>
<div class="history-export"> <div class="history-export">
<bt-button
type="primary"
button-text="导出"
@click="onExportHistory"
/>
<bt-button
type="primary"
button-text="删除"
@click="onDelHistory"
/>
<bt-button type="primary" button-text="导出" @click="onExportHistory" />
<bt-button type="primary" button-text="删除" @click="onDelHistory" />
</div> </div>
<div class="history-table"> <div class="history-table">
<el-table :data="tableData" style="width: 100%;" height="100%" @selection-change="handleSelectionChange">
<el-table :data="tableData" style="width: 100%" height="100%" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column prop="name" label="消毒日期" /> <el-table-column prop="name" label="消毒日期" />
<el-table-column prop="detail" label="操作" width="100"> <el-table-column prop="detail" label="操作" width="100">
@ -135,14 +123,14 @@ const onClose = () => {
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.main-content{
.main-content {
height: $main-container-height; height: $main-container-height;
padding: 10px; padding: 10px;
background: $gradient-color; background: $gradient-color;
.history-export{
.history-export {
margin: 10px; margin: 10px;
} }
.history-table{
.history-table {
height: 73vh; height: 73vh;
overflow: auto; overflow: auto;
} }

1
src/stores/homeStore.ts

@ -71,7 +71,6 @@ export const useHomeStore = defineStore('home', () => {
...item, ...item,
} }
}) })
console.log('allData', allData.value)
} }
} }

Loading…
Cancel
Save