Browse Source

优化用户列表

master
LiLongLong 3 months ago
parent
commit
7ae6b9989f
  1. 46
      increment-version.js
  2. 2
      package.json
  3. 3
      src/components/SimpleKeyboard.vue
  4. 4
      src/pages/Index/Index.vue
  5. 238
      src/pages/Index/Settings/Device.vue
  6. 9
      src/pages/Login/index.vue
  7. 44
      src/services/Index/settings/settings.ts

46
increment-version.js

@ -1,23 +1,41 @@
import fs from 'node:fs'
import path, { dirname } from 'node:path'
import { fileURLToPath } from 'node:url'
import semver from 'semver'
import fs from 'node:fs';
import path, { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import semver from 'semver';
import { execSync } from 'child_process'; // 引入 child_process 模块用于执行 Git 命令
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const packagePath = path.resolve(__dirname, 'package.json')
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'))
const packagePath = path.resolve(__dirname, 'package.json');
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
// 读取命令行参数(默认使用 'patch')
const versionType = process.argv[2] || 'patch'
const versionType = process.argv[2] || 'patch';
// 递增版本
const newVersion = semver.inc(packageJson.version, versionType)
const newVersion = semver.inc(packageJson.version, versionType);
if (!newVersion) {
throw new Error(`Invalid version type: ${versionType}`)
throw new Error(`Invalid version type: ${versionType}`);
}
packageJson.version = newVersion
fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2))
console.log(`Version updated to: ${newVersion}`)
packageJson.version = newVersion;
fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2));
console.log(`Version updated to: ${newVersion}`);
// 新增:自动提交 package.json 到远程仓库
try {
// 将 package.json 添加到暂存区
execSync('git add package.json');
console.log('Added package.json to staging area.');
// 提交更改
execSync(`git commit -m "fix: Update version to V${newVersion}"`);
console.log(`Committed changes with message: Update version to ${newVersion}`);
// 推送到远程仓库
execSync('git push');
console.log('Pushed changes to remote repository.');
} catch (error) {
console.error('Failed to commit and push changes:', error.message);
}

2
package.json

@ -1,7 +1,7 @@
{
"name": "a8000-plus",
"private": true,
"version": "1.0.1",
"version": "0.0.8",
"type": "module",
"scripts": {
"dev": "vite",

3
src/components/SimpleKeyboard.vue

@ -33,7 +33,8 @@ export default {
}
if(this.layout){
keyParams.display = {
'{bksp}': "回退" //
'{bksp}': "删除", //
'{enter}': "回车" //
}
}
this.keyboard = new Keyboard(this.keyboardClass, keyParams)

4
src/pages/Index/Index.vue

@ -625,12 +625,12 @@ const onCloseDevice = ()=> {
OkBtn: '确认',
confirmCallback: () => {
//
isLoading.value = true
isLoading.value = false
confirmVisible.value = false
//loading1sloading
setTimeout(async () => {
await shutdown()
shutdownMessage.value = '设备已关机,请拔掉电源'
eMessage.success('设备已关机,请拔掉电源')
}, 1000)
},
cancelCallback: () => {

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

@ -1,8 +1,18 @@
<template>
<div class="device-management">
<div class="setting-item">
<span class="label">日期</span>
<span class="value">{{ formattedDate }}</span>
<span class="label">日期与时间</span>
<el-date-picker
class="date-input"
v-model="time"
type="datetime"
placeholder="修改日期与时间"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
@change="(val) => updateSetting('date', val)"
@focus="pauseTimer"
@blur="resumeTimer"
/>
</div>
<!-- <div class="setting-item">
@ -24,20 +34,55 @@
</button>
</div>
</div>
<div class="setting-item">
<span class="label">孵育温度</span>
<div class="options">
<button
v-for="t in temperatures"
:key="t"
:class="{ active: settings.temperature === t }"
@click="updateSetting('temperature', t)"
>
{{ t }}
</button>
<div class="setting-item-box">
<div class="setting-item setting-item-no-border">
<span class="label">整体温度控制</span>
<div class="options">
<input
style="width: 150px"
v-model="settings.allTemperature"
type="number"
@focus="showKeyboard('number', 1)"
readonly
/>
<button @click="updateSetting('allTemperature', settings.allTemperature)">
设置
</button>
</div>
</div>
<div class="setting-item setting-item-no-border">
<span class="label">孵育盘温度</span>
<div class="options">
<input
style="width: 150px"
v-model="settings.incubateBoxTemperature"
type="number"
@focus="showKeyboard('number',2)"
readonly
/>
<button @click="updateSetting('incubateBoxTemperature', settings.incubateBoxTemperature)">
设置
</button>
</div>
</div>
<div class="setting-item setting-item-no-border">
<span class="label">板夹区温度</span>
<div class="options">
<input
style="width: 150px"
v-model="settings.plateBoxTemperature"
type="number"
@focus="showKeyboard('number',3)"
readonly
/>
<button @click="updateSetting('plateBoxTemperature', settings.plateBoxTemperature)">
设置
</button>
</div>
</div>
</div>
<div class="setting-item">
<div class="setting-item" style="border-radius: 0">
<span class="label">DHCP</span>
<div class="options">
<button
@ -65,7 +110,7 @@
style="min-width: 250px"
v-model="settings.localIp"
type="text"
@focus="showKeyboard()"
@focus="showKeyboard(undefined, 4)"
readonly
/>
<button @click="updateSetting('localIP', settings.localIp)">
@ -126,6 +171,7 @@
<div class="keyboard" v-if="keyboardVisible">
<SimpleKeyboard
:input="currentInputValue"
:layout
@onChange="handleKeyboardInput"
@onKeyPress="handleKeyPress"
/>
@ -142,20 +188,32 @@ import {
setAutoPrint,
setAutoLogout,
getTemperatureRange,
setTemperature,
setDHCP,
setLocalIP,
setAutoLogoutTime,
} from '../../../services/Index/settings/settings'
setAutoLogoutTime, setAllTemperature, setIncubateBoxTemperature, setPlateBoxTemperature, setDateAndTime
} from '@/services'
import { eMessage, isValidIPv4 } from '../utils'
const layout = ref()
const numericLayout = {
default: [
'1 2 3',
'4 5 6',
'7 8 9',
'{bksp} 0 {enter}' //
],
}
//
interface Settings {
language: string
autoPrint: boolean
autoLogout: boolean
autoLogoutTimeout: number
temperature: number
allTemperature: number | undefined
incubateBoxTemperature:number
plateBoxTemperature: number
DHCP: boolean
localIp: string
}
@ -165,7 +223,9 @@ const settings = ref<Settings>({
autoPrint: true,
autoLogout: false,
autoLogoutTimeout: 10,
temperature: 0,
allTemperature: 20,
incubateBoxTemperature:20,
plateBoxTemperature: 20,
DHCP: true,
localIp: '',
})
@ -210,17 +270,33 @@ const fetchSettings = async () => {
const res = await getSystemSettings()
if (res.success) {
settings.value = res.data
if (res.data.incubateBoxTemperature === res.data.plateBoxTemperature) {
settings.value.allTemperature = res.data.incubateBoxTemperature
}
}
} catch (error) {
eMessage.error('获取系统设置失败')
}
}
function isIntegerInRange(str: string): boolean {
// 20-40
const regex = /^(2[0-9]|3[0-9]|40)$/;
return regex.test(str);
}
//
const updateSetting = async (key: string, value: any) => {
try {
let res
switch (key) {
case 'date':
//
clearInterval(intervalId.value)
res = await setDateAndTime(value)
//
startTimer()
break
case 'language':
res = await setLanguage(value)
break
@ -233,8 +309,26 @@ const updateSetting = async (key: string, value: any) => {
case 'autoLogoutTimeout':
res = await setAutoLogoutTime(value)
break
case 'temperature':
res = await setTemperature(value)
case 'allTemperature':
if (!isIntegerInRange(value)) {
eMessage.error('输入有误, 温度范围为20℃-40℃')
return
}
res = await setAllTemperature(value)
break
case 'incubateBoxTemperature':
if (!isIntegerInRange(value)) {
eMessage.error('输入有误, 温度范围为20℃-40℃')
return
}
res = await setIncubateBoxTemperature(value)
break
case 'plateBoxTemperature':
if (!isIntegerInRange(value)) {
eMessage.error('输入有误, 温度范围为20℃-40℃')
return
}
res = await setPlateBoxTemperature(value)
break
case 'DHCP':
res = await setDHCP(value)
@ -252,24 +346,42 @@ const updateSetting = async (key: string, value: any) => {
if (res?.success) {
settings.value = { ...settings.value, [key]: value }
if (key === 'allTemperature') {
settings.value.incubateBoxTemperature = settings.value.plateBoxTemperature = value
}
if (settings.value.incubateBoxTemperature === settings.value.plateBoxTemperature) {
settings.value.allTemperature = settings.value.incubateBoxTemperature
} else {
settings.value.allTemperature = undefined
}
}
} catch (error) {
console.log(error)
eMessage.error('设置更新失败')
}
}
//
const intervalId = ref<number | null>(null)
//
const startTimer = () => {
intervalId.value = setInterval(() => {
const now = new Date()
currentDate.value = now
time.value = format(now, 'yyyy.MM.dd HH:mm:ss');
}, 1000)
}
const temperatures = ref<number[]>([])
//
onMounted(async () => {
await fetchSettings()
//
setInterval(() => {
const now = new Date()
currentDate.value = now
time.value = now.toLocaleTimeString()
}, 1000)
//
startTimer()
const res = await getTemperatureRange()
if (res && res.success) {
@ -279,22 +391,49 @@ onMounted(async () => {
}
})
//
onUnmounted(() => {
if (intervalId.value) {
clearInterval(intervalId.value)
}
hideKeyboard()
})
//
const keyboardVisible = ref(false)
const currentInputValue = ref('')
//
const showKeyboard = () => {
const showKeyboard = (KeyboardType: string | undefined, type: number) => {
inputNumberType.value = type
if (KeyboardType) {
layout.value = numericLayout
}else{
layout.value = undefined
}
keyboardVisible.value = false
setTimeout(() => {
keyboardVisible.value = true
}, 200)
//
currentInputValue.value = settings.value.localIp
keyboardVisible.value = true
currentInputValue.value = settings.value[inputType[type]]
}
const inputNumberType = ref(0)
const inputType = {
1:'allTemperature',
2:'incubateBoxTemperature',
3:'plateBoxTemperature',
4:'localIp',
}
//
const handleKeyboardInput = (value: string) => {
//
currentInputValue.value = value
settings.value.localIp = value
settings.value[inputType[inputNumberType.value]] = value
}
//
@ -321,6 +460,23 @@ const hideKeyboard = () => {
onUnmounted(() => {
hideKeyboard()
})
//
const pauseTimer = () => {
if (intervalId.value) {
console.log(111)
clearInterval(intervalId.value);
intervalId.value = null;
}
};
//
const resumeTimer = () => {
if (!intervalId.value) {
startTimer();
}
};
</script>
<style scoped lang="less">
@ -333,7 +489,15 @@ onUnmounted(() => {
display: flex;
flex-direction: column;
gap: 20px;
.setting-item-box > :nth-child(2) {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
}
.setting-item-no-border {
border-radius: 0 !important;
box-shadow: none !important;
}
.setting-item {
background-color: #fff;
border-radius: 12px;
@ -414,4 +578,14 @@ onUnmounted(() => {
.slide-up-leave-to {
transform: translateY(100%);
}
:deep(.date-input) {
width: 250px;
margin-right: 30px;
.el-input__wrapper {
height: 40px;
}
.el-input__inner {
font-size: 18px;
}
}
</style>

9
src/pages/Login/index.vue

@ -68,6 +68,7 @@ const submitPin = async () => {
if (!resData.data) {
//
eMessage.error('设备正在初始化,请稍候重试')
password.value = ''
return
}
const params = {
@ -90,10 +91,14 @@ const submitPin = async () => {
const showPassword = ref(false)
const next = () => {
showPassword.value = true
if (activeUser.value?.id) {
showPassword.value = true
}
}
const back = () => {
showPassword.value = false
showPassword.value = false;
password.value = ''
}
const version = __APP_VERSION__

44
src/services/Index/settings/settings.ts

@ -1,14 +1,52 @@
import apiClient from '../../../utils/axios'
export const setDateAndTime = async (data: any) => {
try {
const res = await apiClient.post(
`/api/v1/app/DeviceSetting/setDateAndTime?datetime=${data}`,
)
return res.data
} catch (error) {
console.log('修改时间出错', error)
}
}
// 设置设备温度
export const setTemperature = async (data: any) => {
export const setAllTemperature = async (data: any) => {
try {
const res = await apiClient.post(
`/api/v1/app/DeviceSetting/setIncubateBoxTemperature?val=${data}`,
)
await apiClient.post(
`/api/v1/app/DeviceSetting/setPlateBoxTemperature?val=${data}`,
)
return res.data
} catch (error) {
console.log('修改温度出错', error)
}
}
export const setIncubateBoxTemperature = async (data: any) => {
try {
const res = await apiClient.post(
`/api/v1/app/DeviceSetting/setIncubateBoxTemperature?val=${data}`,
)
return res.data
} catch (error) {
console.log('修改温度出错', error)
}
}
export const setPlateBoxTemperature = async (data: any) => {
try {
const res = await apiClient.post(
`/api/v1/app/DeviceSetting/setTemperature?val=${data}`,
`/api/v1/app/DeviceSetting/setPlateBoxTemperature?val=${data}`,
)
return res.data
} catch (error) {
console.log('修改设备温度出错', error)
console.log('修改温度出错', error)
}
}

Loading…
Cancel
Save