Browse Source

fix:配置url环境变量,更改一些小bug

master
gzt 8 months ago
parent
commit
602d618013
  1. 2
      components.d.ts
  2. 1
      package.json
  3. 123
      src/components/Keyboard.vue
  4. 63
      src/pages/Index/Regular/Emergency.vue
  5. 2
      src/pages/NotFound/NotFound.vue
  6. 2
      src/router/router.ts
  7. 14
      src/types/Index/Running.ts
  8. 2
      tsconfig.app.tsbuildinfo
  9. 30
      vite.config.ts

2
components.d.ts

@ -8,7 +8,6 @@ export {}
declare module 'vue' {
export interface GlobalComponents {
ElButton: typeof import('element-plus/es')['ElButton']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElEmpty: typeof import('element-plus/es')['ElEmpty']
ElFooter: typeof import('element-plus/es')['ElFooter']
ElHeader: typeof import('element-plus/es')['ElHeader']
@ -16,7 +15,6 @@ declare module 'vue' {
ElInput: typeof import('element-plus/es')['ElInput']
ElMain: typeof import('element-plus/es')['ElMain']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElSlider: typeof import('element-plus/es')['ElSlider']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
Keyboard: typeof import('./src/components/Keyboard.vue')['default']

1
package.json

@ -42,6 +42,7 @@
"jest": "^29.7.0",
"postcss-pxtorem": "^6.1.0",
"prettier": "^3.3.3",
"terser": "^5.37.0",
"ts-node": "^10.9.2",
"typescript": "^5.6.3",
"unplugin-auto-import": "^0.18.3",

123
src/components/Keyboard.vue

@ -1,32 +1,14 @@
<template>
<div class="keyboard-wrapper">
<el-input
ref="inputRef"
v-model="model"
@focus="focusInput"
@keyup.enter="handleEnter"
v-bind="$attrs"
>
<template v-for="(item, index) in $slots" :key="index" #[index]>
<el-input ref="inputRef" v-model="model" @focus="focusInput" @keyup.enter="handleEnter" v-bind="$attrs">
<template v-for="index in Object.keys($slots)" :key="index" #[index]>
<slot :name="index"></slot>
</template>
</el-input>
<el-popover
ref="popoverRef"
:visible="visible"
:virtual-ref="inputRef"
virtual-triggering
placement="bottom"
:width="width"
:show-arrow="false"
:hide-after="0"
popper-style="padding: 0px;color:#000"
:persistent="false"
popper-class="keyboard-popper"
@after-enter="afterEnter"
@before-leave="beforeLeave"
>
<el-popover ref="popoverRef" :visible="visible" :virtual-ref="inputRef" virtual-triggering placement="bottom"
:width="width" :show-arrow="false" :hide-after="0" popper-style="padding: 0px;color:#000" :persistent="false"
popper-class="keyboard-popper" @after-enter="afterEnter" @before-leave="beforeLeave">
<div class="simple-keyboard"></div>
</el-popover>
</div>
@ -291,11 +273,15 @@ defineExpose({ inputRef, visible, open, close })
// .simple-keyboard
::v-deep(.simple-keyboard) {
width: 100% !important; /* 键盘宽度占满父容器 */
max-width: 100vw !important; /* 限制键盘最大宽度 */
width: 100% !important;
/* 键盘宽度占满父容器 */
max-width: 100vw !important;
/* 限制键盘最大宽度 */
height: auto !important;
overflow-x: hidden !important; /* 禁止水平拖动 */
overflow-y: auto !important; /* 如果键盘内容超长,允许垂直滚动 */
overflow-x: hidden !important;
/* 禁止水平拖动 */
overflow-y: auto !important;
/* 如果键盘内容超长,允许垂直滚动 */
box-sizing: border-box !important;
}
@ -350,21 +336,25 @@ defineExpose({ inputRef, visible, open, close })
cursor: not-allowed !important;
}
}
// space
::v-deep(.hg-button-space) {
flex: 3 !important; //
}
::v-deep(.hg-button-clear),
::v-deep(.hg-button-close) {
flex: 2 !important; //
font-size: 16px !important;
}
//
::v-deep(.hg-disabled) {
background-color: @disabled-bg !important;
color: @disabled-color !important;
cursor: not-allowed !important;
}
//
::v-deep(.hg-row:not(:last-child)) {
border-bottom: 1px solid #eeeeee !important; // 线
@ -373,49 +363,76 @@ defineExpose({ inputRef, visible, open, close })
// el-popover
::v-deep(.el-popover) {
position: fixed !important;
width: 100vw !important; /* 确保弹出层宽度占满屏幕 */
max-width: 100vw !important; /* 限制最大宽度 */
height: 100vh !important; /* 确保高度占满屏幕 */
left: 0 !important; /* 左对齐屏幕 */
top: 100px !important; /* 定位 */
width: 100vw !important;
/* 确保弹出层宽度占满屏幕 */
max-width: 100vw !important;
/* 限制最大宽度 */
height: 100vh !important;
/* 确保高度占满屏幕 */
left: 0 !important;
/* 左对齐屏幕 */
top: 100px !important;
/* 定位 */
padding: 0 !important;
background-color: transparent !important;
transform: none !important; /* 移除默认偏移 */
overflow-x: hidden !important; /* 禁止水平滚动 */
overflow-y: auto !important; /* 垂直滚动,确保键盘内容不超出 */
transform: none !important;
/* 移除默认偏移 */
overflow-x: hidden !important;
/* 禁止水平滚动 */
overflow-y: auto !important;
/* 垂直滚动,确保键盘内容不超出 */
}
.keyboard-wrapper {
position: relative;
width: 100vw; /* 确保键盘宽度不超出视口 */
overflow: hidden; /* 防止键盘内容超出屏幕 */
width: 100vw;
/* 确保键盘宽度不超出视口 */
overflow: hidden;
/* 防止键盘内容超出屏幕 */
}
//
.el-input {
font-size: 36px; /* 增大字体 */
font-weight: bold; /* 字体加粗 */
color: #333; /* 字体颜色 */
height: 60px; /* 输入框高度 */
border-radius: 8px; /* 圆角边框 */
background-color: @bg-color; /* 背景色 */
box-shadow: @box-shadow; /* 应用全局阴影变量 */
border: none; /* 去除边框 */
outline: none; /* 去除焦点样式 */
font-size: 36px;
/* 增大字体 */
font-weight: bold;
/* 字体加粗 */
color: #333;
/* 字体颜色 */
height: 60px;
/* 输入框高度 */
border-radius: 8px;
/* 圆角边框 */
background-color: @bg-color;
/* 背景色 */
box-shadow: @box-shadow;
/* 应用全局阴影变量 */
border: none;
/* 去除边框 */
outline: none;
/* 去除焦点样式 */
&:focus-within {
border: 2px solid #528dfe; /* 聚焦边框颜色 */
box-shadow: 0 0 5px rgba(82, 141, 254, 0.5); /* 聚焦时阴影 */
border: 2px solid #528dfe;
/* 聚焦边框颜色 */
box-shadow: 0 0 5px rgba(82, 141, 254, 0.5);
/* 聚焦时阴影 */
}
.el-input__inner {
font-size: inherit;
font-weight: inherit;
color: inherit;
height: 100%; /* 占满输入框 */
width: 100%; /* 宽度占满父容器 */
border: none; /* 去除内部边框 */
background-color: transparent; /* 背景透明 */
outline: none; /* 去除焦点高亮 */
height: 100%;
/* 占满输入框 */
width: 100%;
/* 宽度占满父容器 */
border: none;
/* 去除内部边框 */
background-color: transparent;
/* 背景透明 */
outline: none;
/* 去除焦点高亮 */
text-align: left;
}
}

63
src/pages/Index/Regular/Emergency.vue

@ -13,13 +13,13 @@
<div class="line-code">
<!-- 急诊位的表单 -->
<label>样本条形码</label>
<input type="text" placeholder="请输入样本条形码信息" @focus="showKeyboard('sampleBarcode')"
:value="emergencyPosition.sampleBarcode" :disabled="!isEmergencyEnabled" readonly />
<input type="text" placeholder="请输入样本条形码信息" @focus="showKeyboard('sampleBarcode')"
:value="emergencyPosition.sampleBarcode" :disabled="!isEmergencyEnabled" readonly />
</div>
<div class="id-info">
<label>用户ID</label>
<input type="text" placeholder="请输入用户ID信息" @focus="showKeyboard('userid')"
:value="emergencyPosition.userid" :disabled="!isEmergencyEnabled" readonly />
<input type="text" placeholder="请输入用户ID信息" @focus="showKeyboard('userid')" :value="emergencyPosition.userid"
:disabled="!isEmergencyEnabled" readonly />
</div>
</div>
<div class="active-button">
@ -83,12 +83,10 @@
<!-- 键盘 -->
<transition name="slide-up">
<div class="keyboard" v-if="keyboardVisible">
<Keyboard v-model="currentInputValue"
layoutName="default"
@onChange="handleKeyboardInput"
@close="hideKeyboard" />
<Keyboard v-model="currentInputValue" layoutName="default" @onChange="handleKeyboardInput"
@close="hideKeyboard" />
</div>
<!-- <SimpleKeyboard /> -->
<!-- <SimpleKeyboard /> -->
</transition>
</div>
</template>
@ -100,8 +98,8 @@ import { useRouter } from 'vue-router';
import { nanoid } from 'nanoid';
import { insertEmergency } from '../../../services/Index/index';
import { useEmergencyStore, useConsumablesStore } from '../../../store';
import type { ReactionPlate, AddEmergencyInfo ,Subtank} from '../../../types/Index';
import { Keyboard,SimpleKeyboard } from '../../../components';
import type { ReactionPlate, AddEmergencyInfo, Subtank } from '../../../types/Index';
import { Keyboard } from '../../../components';
const consumableStore = useConsumablesStore();
const emergencyStore = useEmergencyStore();
@ -165,7 +163,7 @@ const cancelHandle = () => {
//
const confirmHandle = async () => {
const res = await insertEmergency(emergencyPosition.value);
await insertEmergency(emergencyPosition.value);
const emergencyInfo = emergencyPosition.value;
//
@ -273,18 +271,18 @@ const currentInputValue = ref(''); // 当前键盘绑定的值
//
const showKeyboard = (field: string) => {
if (field === 'sampleBarcode') {
currentInputField.value = 'sampleBarcode';
currentInputValue.value = emergencyPosition.value.sampleBarcode || ''; //
currentInputValue.value = emergencyPosition.value.sampleBarcode || ''; //
} else {
currentInputField.value = 'userid';
currentInputValue.value = emergencyPosition.value.userid || ''; //
currentInputValue.value = emergencyPosition.value.userid || ''; //
}
keyboardVisible.value = true;
};
const handleKeyboardInput = (value: string) => {
if (currentInputField.value === 'sampleBarcode') {
if (currentInputField.value === 'sampleBarcode') {
emergencyPosition.value.sampleBarcode = value;
currentInputValue.value = value; //
} else if (currentInputField.value === 'userid') {
@ -775,20 +773,25 @@ const hideKeyboard = () => {
}
}
.keyboard {
position: fixed;
bottom: 0;
left: 0; /* 固定左边 */
right: 0; /* 固定右边 */
width: 100vw; /* 宽度为视口宽度,确保不超出 */
max-width: 100%; /* 最多占满父容器的宽度 */
height: 600px;
background-color: #f0f0f0;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.15);
overflow: hidden; /* 防止溢出 */
}
.keyboard {
position: fixed;
bottom: 0;
left: 0;
/* 固定左边 */
right: 0;
/* 固定右边 */
width: 100vw;
/* 宽度为视口宽度,确保不超出 */
max-width: 100%;
/* 最多占满父容器的宽度 */
height: 600px;
background-color: #f0f0f0;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.15);
overflow: hidden;
/* 防止溢出 */
}
/* 键盘滑动动画 */
.slide-up-enter-active,

2
src/pages/NotFound/NotFound.vue

@ -4,9 +4,7 @@
</template>
<script setup lang="ts">
import { ref } from "vue"
const description = ref("404 Not Found")
</script>

2
src/router/router.ts

@ -97,6 +97,7 @@ function getCurrentUser() {
}
// 路由守卫,检查本地 Token 是否存在
router.beforeEach((to, from, next) => {
console.log(from)
const token = sessionStorage.getItem('token')
if (!token && to.path !== '/login') {
next('/login') // 没有 token,重定向到登录页
@ -108,6 +109,7 @@ router.beforeEach((to, from, next) => {
})
// 在 router/index.ts 中添加全局路由守卫
router.beforeEach((to, from, next) => {
console.log(from)
const user = getCurrentUser() // 获取当前用户
console.log(user)
// 判断目标路由是否需要权限检查

14
src/types/Index/Running.ts

@ -1,3 +1,5 @@
import type { ProjectInfo } from './Emergency'
export interface IncubationPlate {
subtanks: Subtank[] // 子槽数组,共20个槽位
timestamp: number // 时间戳,表示数据的生成时间
@ -80,9 +82,9 @@ export interface TubeRackResponse {
success: boolean // 请求是否成功
}
export interface ProjectInfo {
projId: number // 项目ID
projName: string // 项目名称
projShortName: string // 项目简称
color: string // 项目颜色
}
// export interface ProjectInfo {
// projId: number // 项目ID
// projName: string // 项目名称
// projShortName: string // 项目简称
// color: string // 项目颜色
// }

2
tsconfig.app.tsbuildinfo

@ -1 +1 @@
{"root":["./src/eventbus.ts","./src/main.ts","./src/vite-env.d.ts","./src/mock/os-control.ts","./src/mock/user-manage.ts","./src/mock/index.ts","./src/mock/index/consumables.ts","./src/mock/index/emergency.ts","./src/mock/index/history.ts","./src/mock/index/initable.ts","./src/mock/index/running.ts","./src/mock/index/testtube.ts","./src/pages/index/components/index.ts","./src/pages/index/components/consumables/index.ts","./src/pages/index/components/consumables/warn/index.ts","./src/pages/index/components/history/index.ts","./src/pages/index/components/running/index.ts","./src/pages/index/components/setting/index.ts","./src/pages/index/components/testtube/index.ts","./src/pages/index/utils/generatesamplebackground.ts","./src/pages/index/utils/getbloodtypelabel.ts","./src/pages/index/utils/index.ts","./src/pages/index/utils/processtubesettings.ts","./src/router/router.ts","./src/services/index.ts","./src/services/index/emergency.ts","./src/services/index/history.ts","./src/services/index/idcard.ts","./src/services/index/index.ts","./src/services/index/init.ts","./src/services/index/regular.ts","./src/services/index/user-manage.ts","./src/services/index/test-tube/test-tube.ts","./src/services/index/running/running.ts","./src/services/index/settings/index.ts","./src/services/index/settings/settings.ts","./src/services/login/index.ts","./src/services/login/login.ts","./src/services/oscontrol/index.ts","./src/services/oscontrol/os.ts","./src/store/index.ts","./src/store/modules/consumables.ts","./src/store/modules/emergency.ts","./src/store/modules/test-tube.ts","./src/types/env.d.ts","./src/types/index/consumables.ts","./src/types/index/emergency.ts","./src/types/index/history.ts","./src/types/index/idcard.ts","./src/types/index/init.ts","./src/types/index/running.ts","./src/types/index/settings.ts","./src/types/index/testtube.ts","./src/types/index/user.ts","./src/types/index/index.ts","./src/types/index/osctrl.ts","./src/utils/axios.ts","./src/utils/formdate.ts","./src/utils/fuzzymatchbysequence.ts","./src/app.vue","./src/components/keyboard.vue","./src/pages/index/history.vue","./src/pages/index/index.vue","./src/pages/index/regular.vue","./src/pages/index/setting.vue","./src/pages/index/regular/consumables.vue","./src/pages/index/regular/emergency.vue","./src/pages/index/regular/running.vue","./src/pages/index/regular/testtube.vue","./src/pages/index/settings/device.vue","./src/pages/index/settings/lis.vue","./src/pages/index/settings/navbar.vue","./src/pages/index/settings/users.vue","./src/pages/index/settings/version.vue","./src/pages/index/testtube/changeuser.vue","./src/pages/index/components/consumables/ballgrid.vue","./src/pages/index/components/consumables/changenum.vue","./src/pages/index/components/consumables/idcardinfo.vue","./src/pages/index/components/consumables/infobar.vue","./src/pages/index/components/consumables/maincomponent.vue","./src/pages/index/components/consumables/moveliquidarea.vue","./src/pages/index/components/consumables/plate.vue","./src/pages/index/components/consumables/projectselector.vue","./src/pages/index/components/consumables/spttingplates.vue","./src/pages/index/components/consumables/tabbar.vue","./src/pages/index/components/consumables/time.vue","./src/pages/index/components/consumables/warn/initwarn.vue","./src/pages/index/components/consumables/warn/loadingmodal.vue","./src/pages/index/components/history/historytable.vue","./src/pages/index/components/history/historywarn.vue","./src/pages/index/components/running/littlebufferdisplay.vue","./src/pages/index/components/running/platedisplay.vue","./src/pages/index/components/running/sampledisplay.vue","./src/pages/index/components/setting/addusermodal.vue","./src/pages/index/components/setting/delmessage.vue","./src/pages/index/components/setting/delwarn.vue","./src/pages/index/components/setting/enterpinmodal.vue","./src/pages/index/components/testtube/projectsetting.vue","./src/pages/index/components/testtube/testtuberack.vue","./src/pages/login/login.vue"],"version":"5.6.3"}
{"root":["./src/eventbus.ts","./src/main.ts","./src/vite-env.d.ts","./src/components/index.ts","./src/mock/os-control.ts","./src/mock/user-manage.ts","./src/mock/index.ts","./src/mock/index/consumables.ts","./src/mock/index/emergency.ts","./src/mock/index/history.ts","./src/mock/index/initable.ts","./src/mock/index/running.ts","./src/mock/index/testtube.ts","./src/pages/index/components/index.ts","./src/pages/index/components/consumables/index.ts","./src/pages/index/components/consumables/warn/index.ts","./src/pages/index/components/history/index.ts","./src/pages/index/components/running/index.ts","./src/pages/index/components/setting/index.ts","./src/pages/index/components/testtube/index.ts","./src/pages/index/utils/generatesamplebackground.ts","./src/pages/index/utils/getbloodtypelabel.ts","./src/pages/index/utils/index.ts","./src/pages/index/utils/processtubesettings.ts","./src/router/router.ts","./src/services/index.ts","./src/services/index/emergency.ts","./src/services/index/history.ts","./src/services/index/idcard.ts","./src/services/index/index.ts","./src/services/index/init.ts","./src/services/index/regular.ts","./src/services/index/user-manage.ts","./src/services/index/test-tube/test-tube.ts","./src/services/index/running/index.ts","./src/services/index/running/running.ts","./src/services/index/settings/index.ts","./src/services/index/settings/settings.ts","./src/services/login/index.ts","./src/services/login/login.ts","./src/services/oscontrol/index.ts","./src/services/oscontrol/os.ts","./src/store/index.ts","./src/store/modules/consumables.ts","./src/store/modules/emergency.ts","./src/store/modules/test-tube.ts","./src/types/env.d.ts","./src/types/index/consumables.ts","./src/types/index/emergency.ts","./src/types/index/history.ts","./src/types/index/idcard.ts","./src/types/index/init.ts","./src/types/index/running.ts","./src/types/index/settings.ts","./src/types/index/testtube.ts","./src/types/index/user.ts","./src/types/index/index.ts","./src/types/index/osctrl.ts","./src/utils/axios.ts","./src/utils/formdate.ts","./src/utils/fuzzymatchbysequence.ts","./src/app.vue","./src/components/keyboard.vue","./src/components/simplekeyboard.vue","./src/pages/index/history.vue","./src/pages/index/index.vue","./src/pages/index/regular.vue","./src/pages/index/setting.vue","./src/pages/index/regular/consumables.vue","./src/pages/index/regular/emergency.vue","./src/pages/index/regular/running.vue","./src/pages/index/regular/testtube.vue","./src/pages/index/settings/device.vue","./src/pages/index/settings/lis.vue","./src/pages/index/settings/navbar.vue","./src/pages/index/settings/users.vue","./src/pages/index/settings/version.vue","./src/pages/index/testtube/changeuser.vue","./src/pages/index/components/consumables/ballgrid.vue","./src/pages/index/components/consumables/changenum.vue","./src/pages/index/components/consumables/idcardinfo.vue","./src/pages/index/components/consumables/infobar.vue","./src/pages/index/components/consumables/maincomponent.vue","./src/pages/index/components/consumables/moveliquidarea.vue","./src/pages/index/components/consumables/plate.vue","./src/pages/index/components/consumables/projectselector.vue","./src/pages/index/components/consumables/spttingplates.vue","./src/pages/index/components/consumables/tabbar.vue","./src/pages/index/components/consumables/time.vue","./src/pages/index/components/consumables/warn/initwarn.vue","./src/pages/index/components/consumables/warn/loadingmodal.vue","./src/pages/index/components/history/historymessage.vue","./src/pages/index/components/history/historytable.vue","./src/pages/index/components/history/historywarn.vue","./src/pages/index/components/running/emergencyresultdialog.vue","./src/pages/index/components/running/littlebufferdisplay.vue","./src/pages/index/components/running/platedisplay.vue","./src/pages/index/components/running/sampledisplay.vue","./src/pages/index/components/setting/addusermodal.vue","./src/pages/index/components/setting/delmessage.vue","./src/pages/index/components/setting/delwarn.vue","./src/pages/index/components/setting/enterpinmodal.vue","./src/pages/index/components/testtube/projectsetting.vue","./src/pages/index/components/testtube/testtuberack.vue","./src/pages/login/login.vue","./src/pages/notfound/notfound.vue"],"version":"5.6.3"}

30
vite.config.ts

@ -6,18 +6,28 @@ import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue(),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),
plugins: [
vue(),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),
],
resolve: {
extensions: ['.js', '.ts', '.vue', '.json'], // 添加 .ts 扩展名解析
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)) // 确保将 @ 指向 src 目录
}
}
'@': fileURLToPath(new URL('./src', import.meta.url)), // 确保将 @ 指向 src 目录
},
},
build: {
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
},
},
})
Loading…
Cancel
Save