diff --git a/package.json b/package.json
index b450e9b..bfbf776 100644
--- a/package.json
+++ b/package.json
@@ -41,6 +41,7 @@
"vue-plugin-hiprint": "^0.0.60",
"vue-router": "4.2.5",
"vue3-print-nb": "^0.1.4",
+ "vue3-seamless-scroll": "^3.0.2",
"vue3-select2-component": "^0.1.7",
"vuedraggable": "^4.1.0",
"vxe-pc-ui": "^4.3.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1da1977..9b06f24 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -92,6 +92,9 @@ importers:
vue3-print-nb:
specifier: ^0.1.4
version: 0.1.4(typescript@5.9.3)
+ vue3-seamless-scroll:
+ specifier: ^3.0.2
+ version: 3.0.2(vue@3.5.23(typescript@5.9.3))
vue3-select2-component:
specifier: ^0.1.7
version: 0.1.7
@@ -2711,6 +2714,9 @@ packages:
vue3-print-nb@0.1.4:
resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==}
+ vue3-seamless-scroll@3.0.2:
+ resolution: {integrity: sha512-LpKoL1ht71MASabUBsoSqbhLqcuKSrD+u01dgHac+/cthPAShKvcdM7dSGtaxjVntSFqdeViqJssjcwy/KqRSA==}
+
vue3-select2-component@0.1.7:
resolution: {integrity: sha512-8UPZmFl02I47XwW+j8ICmHyAND8wfbavlvMrqh10wwdSVER1aF2kI9XCmfIrNlVQvxSbvc0mJjWQAHHSCW9dkw==}
@@ -5611,6 +5617,13 @@ snapshots:
transitivePeerDependencies:
- typescript
+ vue3-seamless-scroll@3.0.2(vue@3.5.23(typescript@5.9.3)):
+ dependencies:
+ element-plus: 2.11.5(vue@3.5.23(typescript@5.9.3))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
vue3-select2-component@0.1.7:
dependencies:
jquery: 3.7.1
diff --git a/src/App.vue b/src/App.vue
index 078b5d2..c7d0432 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -6,13 +6,28 @@
import useSettingsStore from '@/store/modules/settings'
import { handleThemeStyle } from '@/utils/theme'
import { ref, onMounted, onUnmounted, nextTick } from 'vue';
-
+import { useFingerprint } from '@/utils/useFingerprint';
+import { useCommonStore } from '@/store/modules/commonStore'
+const mbStore = useCommonStore();
+// 使用自定义hook获取指纹信息
+const {
+ fingerprint,
+ loading,
+ error,
+ getFingerprint
+} = useFingerprint();
onMounted(() => {
nextTick(() => {
// 初始化主题样式
handleThemeStyle(useSettingsStore().theme)
})
+
+ if (!mbStore.fingerprint) {
+ // 重新获取指纹
+ getFingerprint();
+ mbStore.setFingerprint(fingerprint)
+ }
})
diff --git a/src/api/liswork/micro/index.ts b/src/api/liswork/micro/index.ts
new file mode 100644
index 0000000..57790ab
--- /dev/null
+++ b/src/api/liswork/micro/index.ts
@@ -0,0 +1,142 @@
+// @ts-ignore
+import request from '@/utils/request'
+
+
+// 查询微生物数据列表
+export function wswsampleList(query?: Object) {
+ return request({
+ url: '/lisworkgerm/wswsamplelist',
+ method: 'get',
+ params: query
+ })
+}
+// 查询微生物数据列表 分页
+export function wswsamplelistpage(query?: Object) {
+ return request({
+ url: '/lisworkgerm/wswsamplelistpage',
+ method: 'get',
+ params: query
+ })
+}
+// 获取微生物样本信息
+export function sampleMedInfo(query?: Object) {
+ return request({
+ url: '/lisworkgerm/getresultlist',
+ method: 'get',
+ params: query
+ })
+}
+// 获取药敏数据
+export function getresultmedList(query?: Object) {
+ return request({
+ url: '/lisworkgerm/getresultmedlist',
+ method: 'get',
+ params: query
+ })
+}
+// 写入专家评语
+export function savetestResult(query?: Object) {
+ return request({
+ url: '/lisworkgerm/savetestresult',
+ method: 'post',
+ data: query
+ })
+}
+// 获取操作记录
+export function getComLog(query?: Object) {
+ return request({
+ url: '/lisworkgerm/getcomlog',
+ method: 'get',
+ params: query
+ })
+}
+
+//新增结果明细
+export function newresult(data?: Object) {
+ return request({
+ url: '/lisworkgerm/newresult',
+ method: 'post',
+ data
+ })
+}
+//修改结果明细
+export function changeresult(data?: Object) {
+ return request({
+ url: '/lisworkgerm/changeresult',
+ method: 'post',
+ data
+ })
+}
+
+//修改结果明细
+export function saveresult(data?: Object) {
+ return request({
+ url: '/lisworkgerm/saveresult',
+ method: 'post',
+ data
+ })
+}
+//获取药敏字典
+export function getmeddictList(data?: Object) {
+ return request({
+ url: '/lisworkgerm/getmeddict',
+ method: 'get',
+ params: data
+ })
+}
+//获取药敏模板
+export function getmedgroupList(data?: Object) {
+ return request({
+ url: '/lisworkgerm/getmedgrouplist',
+ method: 'get',
+ params: data
+ })
+}
+//获取药敏模板明细
+export function getmedgroupMbList(data?: Object) {
+ return request({
+ url: '/lisworkgerm/getmedgroup',
+ method: 'get',
+ params: data
+ })
+}
+//保存药敏结果
+export function savemedresult(data?: Object) {
+ return request({
+ url: '/lisworkgerm/savemedresult',
+ method: 'post',
+ data
+ })
+}
+//保存所有药敏结果
+export function savemedresultall(data?: Object) {
+ return request({
+ url: '/lisworkgerm/savemedresultall',
+ method: 'post',
+ data
+ })
+}
+//删除药敏结果
+export function deletemedresult(data?: Object) {
+ return request({
+ url: '/lisworkgerm/deletemedresult',
+ method: 'post',
+ data
+ })
+}
+//获取培养基记录
+export function getmediumList(data?: Object) {
+ return request({
+ url: '/lisworkgerm/getmedium',
+ method: 'get',
+ params: data
+ })
+}
+//微生物报告审核
+export function cbebCheck(data?: Object) {
+ return request({
+ url: '/lisworkgerm/check',
+ method: 'get',
+ params: data
+ })
+}
\ No newline at end of file
diff --git a/src/api/liswork/work/LisWork.ts b/src/api/liswork/work/LisWork.ts
index 6899b6e..4b35c5c 100644
--- a/src/api/liswork/work/LisWork.ts
+++ b/src/api/liswork/work/LisWork.ts
@@ -9,7 +9,6 @@ export function queryLabPatList(query?: Object) {
params: query
})
}
-
// 查询数据
export function queryLabPat(query?: Object) {
return request({
diff --git a/src/api/liswork/xmKnowledge/xmKnowledgeApi.ts b/src/api/liswork/xmKnowledge/xmKnowledgeApi.ts
new file mode 100644
index 0000000..770e12b
--- /dev/null
+++ b/src/api/liswork/xmKnowledge/xmKnowledgeApi.ts
@@ -0,0 +1,41 @@
+//知识库
+// @ts-ignore
+import request from '@/utils/request'
+
+//查询数据
+export function queryService(params:any){
+ return request({
+ url: '/xmKnowledge/query',
+ method: 'get',
+ params
+ })
+}
+
+//查询明细数据
+export function queryDetailService(xmdh: string){
+ return request({
+ url: '/xmKnowledge/detail',
+ method: 'get',
+ params: {
+ xmdh
+ }
+ })
+}
+
+//新增数据
+export function addService(params:any){
+ return request({
+ url: '/xmKnowledge/add',
+ method: 'post',
+ params
+ })
+}
+
+//删除数据
+export function delService(params:any){
+ return request({
+ url: '/xmKnowledge/del',
+ method: 'get',
+ params
+ })
+}
\ No newline at end of file
diff --git a/src/api/liswork/xtwh/xmFeeinstrApi.ts b/src/api/liswork/xtwh/xmFeeinstrApi.ts
new file mode 100644
index 0000000..90374d5
--- /dev/null
+++ b/src/api/liswork/xtwh/xmFeeinstrApi.ts
@@ -0,0 +1,39 @@
+//仪器收费项目对照
+// @ts-ignore
+import request from '@/utils/request'
+
+//查询已分配数据
+export function queryService(params:any){
+ return request({
+ url: '/feeinstr/query',
+ method: 'get',
+ params
+ })
+}
+
+//查询未分配的项目数据
+export function queryXmService(params:any){
+ return request({
+ url: '/feeinstr/queryXm',
+ method: 'get',
+ params
+ })
+}
+
+//新增数据
+export function addService(params:any){
+ return request({
+ url: '/feeinstr/add',
+ method: 'post',
+ params
+ })
+}
+
+//删除数据
+export function delService(params:any){
+ return request({
+ url: '/feeinstr/del',
+ method: 'delete',
+ params
+ })
+}
\ No newline at end of file
diff --git a/src/api/regional/index.ts b/src/api/regional/index.ts
index 2514fd8..9b302ea 100644
--- a/src/api/regional/index.ts
+++ b/src/api/regional/index.ts
@@ -32,4 +32,28 @@ export function querySampleSignBack(query?: Object) {
method: 'get',
params: query
})
+}
+// 标本报表
+export function sampleTypeCount(query?: Object) {
+ return request({
+ url: '/transitReport/sampleTypeCount',
+ method: 'get',
+ params: query
+ })
+}
+// 标本报表费用
+export function sampleitemCount(query?: Object) {
+ return request({
+ url: '/transitReport/itemCount',
+ method: 'get',
+ params: query
+ })
+}
+// 标本报表费用
+export function getallcount(query?: Object) {
+ return request({
+ url: '/transitstat/getallcount',
+ method: 'get',
+ params: query
+ })
}
\ No newline at end of file
diff --git a/src/api/system/parameter.ts b/src/api/system/parameter.ts
index 1779402..6ecf44c 100644
--- a/src/api/system/parameter.ts
+++ b/src/api/system/parameter.ts
@@ -41,4 +41,13 @@ export function paramTree(query?: Object) {
method: 'get',
params: query,
});
+}
+
+// 查询某个参数
+export function queryOneService(yq: string,xxdh: string) {
+ return request({
+ url: '/param/queryOne',
+ method: 'get',
+ params: {yq,xxdh}
+ });
}
\ No newline at end of file
diff --git a/src/assets/styles/btn.scss b/src/assets/styles/btn.scss
index 3590d8d..595ec48 100644
--- a/src/assets/styles/btn.scss
+++ b/src/assets/styles/btn.scss
@@ -97,3 +97,19 @@
font-size: 14px;
border-radius: 4px;
}
+
+
+.btn_green {
+ background-color: #aef5ef !important;
+ color: #148A7F;
+ border-color: #aef5ef;
+}
+
+.btns_box {
+ padding: .3125rem .625rem !important;
+ font-size: .875rem;
+ height: 1.25rem !important;
+ margin: 5px 0;
+ margin-left: .625rem !important;
+ border-radius: 0 !important;
+}
\ No newline at end of file
diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss
index 10bf9a5..2123427 100644
--- a/src/assets/styles/index.scss
+++ b/src/assets/styles/index.scss
@@ -286,4 +286,21 @@ aside {
width: 3.125rem;
}
}
+}
+
+.next_box {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .jtIcon {
+ width: 2.5rem;
+ height: 2rem;
+ line-height: 2rem;
+ font-size: 1rem;
+ text-align: center;
+ background-color: #1f6dd3;
+ color: #fff;
+ cursor: pointer;
+ }
}
\ No newline at end of file
diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss
index 563193f..c8a4094 100644
--- a/src/assets/styles/ruoyi.scss
+++ b/src/assets/styles/ruoyi.scss
@@ -106,13 +106,63 @@
.el-dialog:not(.is-fullscreen) {
margin-top: 6vh !important;
+ padding: 0;
+ // border-radius: 20px;
+
+ .el-dialog__body {
+ padding: 10px;
+ }
}
.el-dialog.scrollbar .el-dialog__body {
overflow: auto;
overflow-x: hidden;
max-height: 70vh;
- padding: 10px 20px 0;
+ padding: 16px;
+ }
+
+ .el-dialog__header {
+ background: linear-gradient(90deg, #0c1a97 0%, #1373d3 100%);
+ padding: 10px 20px;
+ position: relative;
+ font-family: SourceHanSansCN, SourceHanSansCN;
+
+ &::before {
+ content: '';
+ position: absolute;
+ left: 20px;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 28px;
+ height: 28px;
+ background: url('@/assets/logo/logo.png') no-repeat center;
+ background-size: contain;
+ z-index: 1;
+ }
+
+ // 标题文本样式
+ .el-dialog__title {
+ color: #fff;
+ /* 标题文字颜色 */
+ padding-left: 40px;
+ /* 给 Logo 留出空间 */
+ font-size: 16px;
+ font-weight: 600;
+ }
+
+ .el-dialog__headerbtn .el-dialog__close {
+ color: #fff;
+ /* 关闭按钮颜色 */
+ font-size: 18px;
+
+ &:hover {
+ color: #fff;
+ }
+ }
+ }
+
+ .el-dialog__footer {
+ padding: 10px;
}
.el-table {
@@ -125,7 +175,7 @@
word-break: break-word;
background-color: #1F6DD3 !important;
color: #FFF;
- height: 1.875rem !important;
+ height: 1.6875rem !important;
font-size: .8125rem;
}
}
@@ -136,6 +186,11 @@
}
}
+ .el-table__body td {
+ font-size: .8125rem;
+
+ }
+
/* 表格最外层边框(可选) */
.el-table--border {
@@ -177,10 +232,13 @@
padding: 0 !important;
}
- .el-table--default .cell {
- padding: 0 !important;
+ .el-table--default {
+ .cell {
+ padding: 0 !important;
+ }
}
+
.el-table__cell {
padding: 0 !important;
height: 30px;
@@ -249,7 +307,7 @@
}
.el-input.is-disabled .el-input__inner {
- -webkit-text-fill-color: #4e4c4c
+ -webkit-text-fill-color: #4e4c4c;
}
@@ -337,11 +395,6 @@
cursor: pointer;
}
- .btn_green {
- background-color: #aef5ef !important;
- color: #148A7F;
- border-color: #aef5ef;
- }
// 表格input宽度,表格select宽度
.full-width-input .el-input__inner .el-select__inner {
diff --git a/src/components/elTable/index.vue b/src/components/elTable/index.vue
index 58c924d..bfe57ab 100644
--- a/src/components/elTable/index.vue
+++ b/src/components/elTable/index.vue
@@ -390,6 +390,13 @@ defineExpose({
}
+:deep(.el-table__footer-wrapper tfoot td.el-table__cell) {
+ color: #1f6dd3 !important;
+ font-weight: 700;
+ /* 可替换为任意颜色值 */
+}
+
+
diff --git a/src/components/tabViews/index.vue b/src/components/tabViews/index.vue
index 457d2e8..bdc7554 100644
--- a/src/components/tabViews/index.vue
+++ b/src/components/tabViews/index.vue
@@ -114,7 +114,7 @@ setTimeout(() => {
.scroll-btn {
width: 1.875rem;
- height: 3rem;
+ height: 2.9375rem;
display: flex;
align-items: center;
justify-content: center;
@@ -173,8 +173,8 @@ setTimeout(() => {
font-size: 1rem;
color: #1F6DD3;
width: 5.625rem;
- height: 3rem;
- line-height: 3rem;
+ height: 2.9375rem;
+ line-height: 2.9375rem;
text-align: center;
flex-shrink: 0;
cursor: pointer;
diff --git a/src/components/vxeTable/index.vue b/src/components/vxeTable/index.vue
index c61e114..9aea70d 100644
--- a/src/components/vxeTable/index.vue
+++ b/src/components/vxeTable/index.vue
@@ -13,13 +13,16 @@
-
-
+
+
+
@@ -66,6 +69,11 @@ const props = defineProps({
type: Object,
default: () => ({ isHover: true, height: 30 })
},
+ // 表格配置
+ config: {
+ type: Object,
+ default: () => ({}),
+ },
// 是否显示内容溢出省略
showOverflow: {
type: Boolean,
@@ -94,7 +102,7 @@ const props = defineProps({
}
})
-const emits = defineEmits(['current-change', "column-drag-end",])
+const emits = defineEmits(['current-change', "column-drag-end", "selection-change"])
const tableRef = ref(null)
const currentRow = ref(null)
@@ -104,6 +112,23 @@ const handleRowClick = (params: { row: any }) => {
emits('current-change', params.row)
}
+const handleCheckboxChange = ({ checked, records }: { checked: boolean, records: any[] }) => {
+ // console.log('选中的数据:', records);
+ // console.log('是否全选:', checked);
+ emits('selection-change', records)
+};
+
+// 处理行选择
+const toggleRowSelection = (row: any, checked: boolean) => {
+ if (tableRef.value) {
+ tableRef.value.setCheckboxRow(row, checked)
+ }
+}
+// 获取所有选中行数据
+const allSelection = () => {
+ return tableRef.value.getCheckboxRecords()
+}
+
// 设置当前行
const setCurrentRow = (row: any) => {
if (tableRef.value) {
@@ -180,6 +205,8 @@ const initColumnDrag = () => {
defineExpose({
setCurrentRow,
clearCurrentRow,
+ toggleRowSelection,
+ allSelection,
tableRef,
})
diff --git a/src/hooks/lisData/dictData.ts b/src/hooks/lisData/dictData.ts
index f729bd2..79890d6 100644
--- a/src/hooks/lisData/dictData.ts
+++ b/src/hooks/lisData/dictData.ts
@@ -25,6 +25,9 @@ export const getDictData = async (...args: string[]) => {
if(dictRefs.ITEMCLASS != undefined) dictData.value.ITEMCLASS = toRaw(dictRefs.ITEMCLASS.value) || []
if(dictRefs.YQDL != undefined) dictData.value.YQDL = toRaw(dictRefs.YQDL.value) || []
if(dictRefs.VA != undefined) dictData.value.VA = toRaw(dictRefs.VA.value) || []
+ if(dictRefs.LF != undefined) dictData.value.LF = toRaw(dictRefs.LF.value) || []
+ if(dictRefs.BT != undefined) dictData.value.BT = toRaw(dictRefs.BT.value) || []
+ if(dictRefs.SLZQ != undefined) dictData.value.SLZQ = toRaw(dictRefs.SLZQ.value) || []
}
//字典数据格式化方法
diff --git a/src/main.js b/src/main.js
index 9bd3759..187f7c3 100644
--- a/src/main.js
+++ b/src/main.js
@@ -71,6 +71,7 @@ import TreeSelect from '@/components/TreeSelect'
// 字典标签组件
import DictTag from '@/components/DictTag'
import print from 'vue3-print-nb';
+import Vue3SeamlessScroll from 'vue3-seamless-scroll' // 引入插件
const app = createApp(App)
// 全局方法挂载
@@ -97,6 +98,7 @@ app.component('Editor', Editor)
//VUE3标准方法注入全局方法
app.provide('comDict', comDict);
app.use(print); // 注册打印插件
+app.use(Vue3SeamlessScroll)
app.provide('$vuePrint', app.config.globalProperties.$vuePrint);
app.use(router)
app.use(store)
diff --git a/src/permission.js b/src/permission.js
index 4b0a2ea..c0b1c32 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -21,7 +21,7 @@ NProgress.configure({
showSpinner: false
});
-const whiteList = ['/login', '/register', '/report'];
+const whiteList = ['/login', '/register', '/report', '/checkCode'];
router.beforeEach((to, from, next) => {
NProgress.start()
diff --git a/src/router/index.js b/src/router/index.js
index 2841ee5..85ee5d6 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -52,6 +52,12 @@ export const constantRoutes = [{
component: () => import('@/views/checkCode/report'),
hidden: true
},
+ {
+ path: '/checkCode',
+ component: () => import('@/views/checkCode/index'),
+ hidden: true
+ },
+
{
path: "/:pathMatch(.*)*",
component: () => import('@/views/error/404'),
@@ -62,6 +68,12 @@ export const constantRoutes = [{
component: () => import('@/views/error/401'),
hidden: true
},
+ // 大屏
+ {
+ path: '/regional/statistics/overview',
+ component: () => import('@/views/regional/statistics/overview/index'),
+ hidden: true
+ },
{
path: '',
component: Layout,
diff --git a/src/store/modules/commonStore.ts b/src/store/modules/commonStore.ts
index f260ab5..b8a0787 100644
--- a/src/store/modules/commonStore.ts
+++ b/src/store/modules/commonStore.ts
@@ -4,10 +4,15 @@ import { defineStore } from 'pinia'
export const useCommonStore = defineStore('commonStore', {
state: () => ({
lxsrs: [] as string[], // 存储项目模板名称
+ fingerprint: '',// 存储指纹信息
}),
actions: {
setLxsrList(list: any[]) {
this.lxsrs = list
},
+
+ setFingerprint(fingerprint: string) {
+ this.fingerprint = fingerprint
+ },
}
})
\ No newline at end of file
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index f8ef7a8..394dd66 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -28,11 +28,15 @@ const useUserStore = defineStore(
loginAnonymous(data) {
return new Promise((resolve, reject) => {
loginAnonymous({
- username: data.name
+ username: data.name,
+ yljg: data.yljg
}).then(res => {
- setToken(res.token)
- this.token = res.token
- resolve()
+ if (res.code == 200) {
+ setToken(res.token)
+ this.token = res.token
+ resolve(true)
+ }
+
}).catch(error => {
reject(error)
})
diff --git a/src/types/Object.d.ts b/src/types/Object.d.ts
index 6ac3fa5..1e89e83 100644
--- a/src/types/Object.d.ts
+++ b/src/types/Object.d.ts
@@ -15,6 +15,10 @@ export interface DictData {
YQDL?: Array;
xmlbList?: Array;
YQ?: Array;
+ VA?: Array;
+ LF?: Array;
+ BT?: Array;
+ SLZQ?: Array;
[key: string]: any[] | undefined; // 添加索引签名以支持动态访问
}
@@ -113,4 +117,44 @@ export class XmValNew {
xh?: number;
jgbz?: string;
+}
+
+export class XmInfoVs {
+ yq: string;
+ xmid: number;
+ xs?: number;
+ zkxm?: string;
+ cksx?: number;
+ ckxx?: number;
+ dyckz?: string;
+
+}
+
+export class XmTextresultNew {
+ xmid?: string;
+ xmdh?: string;
+ xh?: number;
+ textresult?: string;
+}
+
+export class LabResultItem {
+ xmdh: string;
+ xmmc: string;
+ csjg: string;
+ qz: string;
+ [key: string]: any;
+}
+
+export class ymTableDataItem {
+ zhywdh: string;
+ ywdh: any;
+ ywmc: any;
+ mic: string;
+ rad: string;
+ csjg: string;
+ jgbz: string;
+ ckz: string;
+ bz: string;
+ txtresult: string;
+ cp_bz: string;
}
\ No newline at end of file
diff --git a/src/utils/mitt.ts b/src/utils/mitt.ts
index 5b14b6a..68f108e 100644
--- a/src/utils/mitt.ts
+++ b/src/utils/mitt.ts
@@ -3,8 +3,8 @@ import mitt, { Emitter, EventType } from "mitt"
// 扩展原始Emitter类型,添加自定义方法
interface CustomEmitter extends Emitter> {
- emitWithCache?: (eventName: string, data: any) => void
- getCache?: (eventName: string) => any
+ emitWithCache: (eventName: string, data: any) => void
+ getCache: (eventName: string) => any
}
const emitter = mitt() as CustomEmitter
diff --git a/src/utils/useFingerprint.js b/src/utils/useFingerprint.js
index 87b0bae..8b86cfb 100644
--- a/src/utils/useFingerprint.js
+++ b/src/utils/useFingerprint.js
@@ -41,7 +41,7 @@ export function useFingerprint() {
// 组件挂载时自动获取指纹
onMounted(() => {
- getFingerprint();
+ // getFingerprint();
});
return {
diff --git a/src/utils/webSocket.ts b/src/utils/webSocket.ts
new file mode 100644
index 0000000..f19309b
--- /dev/null
+++ b/src/utils/webSocket.ts
@@ -0,0 +1,103 @@
+// WebSocket连接配置
+type WebSocketOptions = {
+ fullUrl: string;
+ onMessage?: (data: string) => void;
+ onOpen?: () => void;
+ onError?: (error: Event) => void;
+ onClose?: () => void;
+ reconnectInterval?: number;
+};
+
+let websocket: WebSocket | null = null;
+let reconnectTimer: any = null;
+let isManualClose = false;
+
+// 初始化WebSocket连接
+export function initWebSocket(options: WebSocketOptions) {
+ const {
+ fullUrl,
+ onMessage,
+ onOpen,
+ onError,
+ onClose,
+ reconnectInterval = 3000
+ } = options;
+
+ // 关闭旧连接
+ if (websocket) {
+ websocket.close();
+ }
+
+ // 检查浏览器支持性
+ if (!('WebSocket' in window)) {
+ console.error('当前浏览器不支持WebSocket');
+ return;
+ }
+
+ // 创建WebSocket连接
+ try {
+ websocket = new WebSocket(fullUrl);
+
+ // 连接成功回调
+ websocket.onopen = () => {
+ clearTimeout(reconnectTimer!);
+ isManualClose = false;
+ onOpen?.();
+ };
+
+ // 接收消息回调
+ websocket.onmessage = (event) => {
+ onMessage?.(event.data);
+ };
+
+ // 错误回调
+ websocket.onerror = (error) => {
+ onError?.(error);
+ startReconnect(() => initWebSocket(options), reconnectInterval);
+ };
+
+ // 关闭回调
+ websocket.onclose = () => {
+ onClose?.();
+ if (!isManualClose) {
+ startReconnect(() => initWebSocket(options), reconnectInterval);
+ }
+ };
+ } catch (error) {
+ console.error('WebSocket连接创建失败:', error);
+ startReconnect(() => initWebSocket(options), reconnectInterval);
+ }
+}
+
+// 发送消息
+export function sendWebSocketMessage(message: any): boolean {
+ if (websocket && websocket.readyState === WebSocket.OPEN) {
+ websocket.send(JSON.stringify(message));
+ return true;
+ }
+ console.error('WebSocket未连接,无法发送消息');
+ return false;
+}
+
+// 手动关闭WebSocket
+export function closeWebSocket(): void {
+ isManualClose = true;
+ if (reconnectTimer) {
+ clearTimeout(reconnectTimer);
+ }
+ websocket?.close();
+ websocket = null;
+}
+
+// 启动重连
+function startReconnect(connectCallback: () => void, interval: number): void {
+ if (reconnectTimer) {
+ clearTimeout(reconnectTimer);
+ }
+ reconnectTimer = setTimeout(connectCallback, interval);
+}
+
+// 获取当前连接状态
+export function getWebSocketState(): number | null {
+ return websocket?.readyState || null;
+}
\ No newline at end of file
diff --git a/src/views/checkCode/index.vue b/src/views/checkCode/index.vue
index 8a95450..2249782 100644
--- a/src/views/checkCode/index.vue
+++ b/src/views/checkCode/index.vue
@@ -9,24 +9,23 @@
value-format="YYYY-MM-DD HH:mm:ss" @change="handletime" style="width: 25rem;" />
-
+
-
+
-
-
+
+
-
-
+
+
@@ -72,8 +71,10 @@
:columns="columns"> -->
-
@@ -93,12 +94,12 @@
{{ formatDict(row.yljg, 'HOS') }}
-
+
-
- 拆分选中项目
+
+
{{ row.jjzt == '1' ? '计价' : '无' }}
@@ -160,14 +161,20 @@ import { ref, reactive, toRaw, computed, watch, nextTick, onMounted, } from 'vue
import { HiprintPrinter } from '@/utils/hiprintPrinter';
import { classCom } from '@/utils/classCom';
import CustomTable from '@/components/elTable/index.vue'
-import { useRouter } from 'vue-router'
+import VxeTable from '@/components/vxeTable/index.vue'
+import { useRouter, useRoute } from 'vue-router'
import { usePrintStore } from '@/store/modules/printStore'
import { fetchCodeList, addObj, fetchCodeDetail, fetchCodeExec, fetchCodeReqmain } from '@/api/checkCode/index'
const aotuSize = classCom.useAutoSize();
//@ts-ignore
+import useUserStore from '@/store/modules/user'
+//@ts-ignore
import { comDict } from '@/utils/dict'
import { ElMessage, ElMessageBox } from 'element-plus'
+import dayjs from 'dayjs';
const router = useRouter()
+const route = useRoute()
+const userStore = useUserStore()
const printStore = usePrintStore();
const compactForm = ref(null);
const heightForm = ref(90);
@@ -179,8 +186,10 @@ interface QueryParams {
times: string[]; // 明确类型为字符串元组
yljg: string;
zt: string;
- failed4: string;
- failed5: string;
+ queryType: string;
+ queryValue: string;
+ ksdh: string;
+ userid: string;
}
// 提交表单数据
const queryParams = reactive({
@@ -188,8 +197,10 @@ const queryParams = reactive({
// times: [],
yljg: '1',
zt: '',
- failed4: '',
- failed5: '',
+ queryType: '',
+ queryValue: '',
+ ksdh: '',
+ userid: ''
});
const showSearch = ref(true);
const queryRef = ref()
@@ -206,15 +217,15 @@ const queryRules = ref({
})
const options = [
{
- value: '1',
+ value: 'brxm',
label: '通过姓名搜索',
},
{
- value: '2',
+ value: 'brdh',
label: '通过病人号搜索',
},
{
- value: '3',
+ value: 'ch',
label: '通过床号搜索',
},
]
@@ -233,40 +244,39 @@ const handleQuery = async () => {
// 重置
const resetQuery = () => {
queryRef.value?.resetFields();
-
+ queryParams.zt = ''
+ queryParams.queryType = ''
+ queryParams.queryValue = ''
getList()
}
-const loading = ref(true);
-
-
+const loading = ref(false);
// 数据源
const tableData = ref([])
// 配置项
const columns = ref([
- { type: 'selection', visible: true, align: 'center', width: 35, label: '多选框' },
- // { type: 'index', visible: true, align: 'center', width: 60, label: '序号' },
- { prop: 'zt', label: '打印', visible: true, align: 'center', slot: 'dy', width: 40 },
- { prop: 'jzbz', label: '急', align: 'center', visible: true, slot: 'jzbz', width: 30 },
- { prop: 'ch', label: '床号', visible: true, align: 'center', width: 40 },//sortable: true,
- { prop: 'brxm', label: '姓名', align: 'center', visible: true, width: 50 },
- { prop: 'brxbname', label: '性别', align: 'center', visible: true, width: 30 },
- { prop: 'jymd', label: '项目名称', visible: true, width: 130 },
- { prop: 'bgddhname', label: '类别', align: 'center', visible: true, width: 80 },
- { prop: 'sampletips', label: '采样提示', align: 'center', visible: true, width: 60 },
- { prop: 'yblx', label: '样本类型', align: 'center', visible: true, width: 60 },
- { prop: 'brdh', label: '病人号', align: 'center', visible: true, width: 90 },
- { prop: 'ksname', label: '科室名称', align: 'center', visible: true, width: 100 },
- { prop: 'sqh', label: '申请号/条码', align: 'center', visible: true, width: 100 },
- { prop: 'zt', label: '状态', align: 'center', visible: true, slot: 'zt', width: 40 },
- { prop: 'brly', label: '病人来源', align: 'center', visible: true, slot: 'brly', width: 60 },
- { prop: 'sqysname', label: '申请医生', align: 'center', visible: true, width: 60 },
- { prop: 'sqsj', label: '申请时间', align: 'center', visible: true, width: 150 },
- { prop: 'jjzt', label: '计价标志', align: 'center', visible: true, slot: 'jjzt', width: 60 },
- { prop: 'zxysname', label: '执行医生', align: 'center', visible: true, width: 60 },
- { prop: 'bbsjrname', label: '送检人', align: 'center', visible: true, width: 50 },
- { prop: 'yljg', label: '医疗机构', align: 'center', visible: true, slot: 'yljg', width: 150 },
+ { type: 'selection', field: '', title: '', resizable: true, align: 'center', width: 40 },
+ { field: 'zt', title: '打印', resizable: true, align: 'center', slotName: 'dy', width: 40 },
+ { field: 'jzbz', title: '急', align: 'center', resizable: true, slotName: 'jzbz', width: 30 },
+ { field: 'ch', title: '床号', resizable: true, align: 'center', width: 40 },//sortable: true,
+ { field: 'brxm', title: '姓名', align: 'center', resizable: true, width: 50 },
+ { field: 'brxbname', title: '性别', align: 'center', resizable: true, width: 30 },
+ { field: 'jymd', title: '项目名称', resizable: true, width: 130 },
+ { field: 'bgddhname', title: '类别', align: 'center', resizable: true, width: 80 },
+ { field: 'sampletips', title: '采样提示', align: 'center', resizable: true, width: 60 },
+ { field: 'yblx', title: '样本类型', align: 'center', resizable: true, width: 60 },
+ { field: 'brdh', title: '病人号', align: 'center', resizable: true, width: 90 },
+ { field: 'ksname', title: '科室名称', align: 'center', resizable: true, width: 100 },
+ { field: 'sqh', title: '申请号/条码', align: 'center', resizable: true, width: 100 },
+ { field: 'zt', title: '状态', align: 'center', resizable: true, slotName: 'zt', width: 40 },
+ { field: 'brly', title: '病人来源', align: 'center', resizable: true, slotName: 'brly', width: 60 },
+ { field: 'sqysname', title: '申请医生', align: 'center', resizable: true, width: 60 },
+ { field: 'sqsj', title: '申请时间', align: 'center', resizable: true, width: 150 },
+ { field: 'jjzt', title: '计价标志', align: 'center', resizable: true, slotName: 'jjzt', width: 60 },
+ { field: 'zxysname', title: '执行医生', align: 'center', resizable: true, width: 60 },
+ { field: 'bbsjrname', title: '送检人', align: 'center', resizable: true, width: 50 },
+ { field: 'yljg', title: '医疗机构', align: 'center', resizable: true, slotName: 'yljg', width: 150 },
])
const single = ref(true);
@@ -280,11 +290,11 @@ const cellStyleHd = ({ row, column, rowIndex, columnIndex }: {
columnIndex: number;
}) => {
// console.log(row, column, rowIndex, columnIndex);
- if (column.label == "急" && row.jzbz == "1") {
+ if (column.title == "急" && row.jzbz == "1") {
return { color: '#f00' };
}
- if (column.label == "类别") {
+ if (column.title == "类别") {
const bgColor = classCom.decimalToHexColor(row.bkcolor);
const textColor = classCom.getContrastTextColor(bgColor);
return {
@@ -326,6 +336,7 @@ const lastTimeIndex = computed(() => {
}
});
+const Info: any = ref({})
// 点击行
const rowHandle = (row: any) => {
timelineItems.value =
@@ -338,6 +349,7 @@ const rowHandle = (row: any) => {
{ title: '标本签收', time: row.jssj },
{ title: '结果审核', time: row.confirmtime },
]
+ Info.value = row
getRightTable(row)
};
@@ -348,22 +360,26 @@ const selectionChange = (selection: any) => {
}
const handleColumnDragEnd = (data: any) => {
- // 更新列配置
- columns.value = data.columns;
- // 可以在这里保存列顺序到本地存储等
- // localStorage.setItem('tableColumnOrder', JSON.stringify(data.columns));
+ // 先清空再赋值,强制触发重新渲染
+ columns.value = [];
+ // 使用nextTick确保DOM更新后再设置新值
+ nextTick(() => {
+ columns.value = [...data.columns];
+ });
};
// 左侧表格配置
const tableConfig = ref({
- // stripe: true, // 斑马纹
- border: true, // 边框
- index: true, // 序号
- height: '', // 高度
- highlightCurrentRow: true, // 高亮当前行
- cellStyle: cellStyleHd,
- rowClassName: rowClassNameHd,
- fit: true
+ height: '76.5vh', // 高度
+ // 复选框配置
+ checkboxConfig: {
+ // 可选配置项
+ checkField: 'checked', // 绑定数据中的字段(默认:checked)
+ range: false, // 是否支持范围选择(按住 Shift 连续选择)
+ disabled: false, // 是否禁用全部复选框
+ reserve: false, // 是否保留勾选状态(分页/筛选时)
+ highlight: false // 是否高亮选中行
+ }
})
// 右侧数据源
const rightTableData = ref([])
@@ -414,19 +430,20 @@ const cyTableConfig = ref({
// 采样登记
const openBlock = (value: string) => {
- if (sqhs.value.length > 0) {
+ const selections = tableRef.value.allSelection()
+ if (selections.length > 0) {
ElMessageBox.confirm(`确定操作选中的数据吗?`, "提示", {
confirmButtonText: "确认",
cancelButtonText: "取消",
beforeClose: async (action, instance, done) => {
if (action === "confirm") {
// 生成请求Promise数组
- const requests = sqhs.value.map((item: any) => { return item.sqh });
+ const requests = selections.map((item: any) => { return item.sqh });
fetchCodeExec({
sqh: requests.join(','),
- userid: 'lis',
+ userid: queryParams.userid,
status: value == '采样登记' ? 12 : 13,
- yljg: 1
+ yljg: queryParams.yljg
}).then((res: any) => {
if (res.code == 0) {
ElMessage.success('调用成功');
@@ -456,9 +473,9 @@ const sqdQuery = () => {
if (res.code == 0 && res.data.sqh) {
fetchCodeExec({
sqh: res.data.sqh,
- userid: 'lis',
+ userid: queryParams.userid,
status: 12,
- yljg: 1
+ yljg: queryParams.yljg
})
cyTableData.value = cyTableData.value.concat(res.data)
}
@@ -497,22 +514,25 @@ const getRightTable = (row: any) => {
const goReport = () => {
// 跳转到报告查询页面
- router.push('/report?startdate=2025-08-19&endate=2025-08-19&deptcode=0210&userid=00910&brdh=')
+ router.push(`/report?yljg=${Info.value.yljg ? Info.value.yljg : queryParams.yljg}&deptcode=${Info.value.ksdh ? Info.value.ksdh : queryParams.ksdh}&userid=${queryParams.userid}&brdh=${Info.value.brdh ? Info.value.brdh : ''}`)
+ // router.push('/report?startdate=2025-08-19&endate=2025-08-19&deptcode=0210&userid=00910&brdh=')
+
};
const cancelHandle = () => {
- if (sqhs.value.length <= 0) return ElMessage.warning('请选择数据!')
+ const selections = tableRef.value.allSelection()
+ if (selections.length <= 0) return ElMessage.warning('请选择数据!')
ElMessageBox.confirm(`确定作废选中的数据吗?`, "提示", {
confirmButtonText: "确认",
cancelButtonText: "取消",
beforeClose: async (action, instance, done) => {
if (action === "confirm") {
- const requests = sqhs.value.map((item: any) => { return item.sqh });
+ const requests = selections.map((item: any) => { return item.sqh });
fetchCodeExec({
sqh: requests.join(','),
- userid: 'lis',
+ userid: queryParams.userid,
status: 9,
- yljg: 1
+ yljg: queryParams.yljg
}).then((res: any) => {
if (res.code == 0) {
ElMessage.success('调用成功');
@@ -528,17 +548,31 @@ const cancelHandle = () => {
},
}).catch(() => { });
-
-
}
+
+
onMounted(async () => {
- // 初始化3天区间(今天-前两天)
- // const end = dayjs().format('YYYY-MM-DD HH:mm:ss');
- // const start = dayjs().subtract(2, 'day').format('YYYY-MM-DD HH:mm:ss'); //add 时间往后
- // queryParams.times = [start, end];
- // console.log(queryParams.times);
- getList()
+ // 获取当前日期(当天)
+ const today = dayjs();
+
+ // 计算前6天的日期(当天 + 前6天 = 7天)
+ const startOfWeek = today.subtract(6, 'day');
+
+ const startDate = route.query.startdate ? String(route.query.startdate) : startOfWeek.format('YYYY-MM-DD HH:mm:ss');
+ const endDate = route.query.endate ? String(route.query.endate) : today.format('YYYY-MM-DD HH:mm:ss');
+
+ queryParams.times = [startDate, endDate];
+ queryParams.ksdh = (route.query.deptcode as string) ? (route.query.deptcode as string) : '';
+ queryParams.userid = (route.query.userid as string) ? (route.query.userid as string) : '';
+ queryParams.yljg = (route.query.yljg as string) ? (route.query.yljg as string) : '1';
+ // 进入页面单点登录
+ const result = await userStore.loginAnonymous({ name: 'admin', yljg: queryParams.yljg })
+ if (result) {
+ getList()
+ }
+
+
adjustTableHeight();
// 加载病人来源字典
const dictRefs = await comDict('PT', 'HOS', 'ST');
@@ -567,20 +601,25 @@ function adjustTableHeight() {
if (compactForm.value) {
// 获取高度
heightForm.value = compactForm.value.offsetHeight;
- tableConfig.value.height = `calc(74vh - ${heightForm.value}px)`; // 设置表格容器的高度
- rightTableConfig.value.height = `calc(74vh - ${heightForm.value}px)`;
+ tableConfig.value.height = `calc(80vh - ${heightForm.value}px)`; // 设置表格容器的高度
+ rightTableConfig.value.height = `calc(80vh - ${heightForm.value}px)`;
}
}
const handletime = (val: Array) => {
// console.log('时间', val);
+ // 校验日期格式
+ const dayDiff = getDayDiff(val[0], val[1]);
+ if (dayDiff === -1) return ElMessage.warning('请选择有效的日期范围');
+ //校验是否超过7天
+ if (dayDiff > 7) return ElMessage.warning('查询时间范围不能超过7天,请重新选择');
}
// 生成条码
const printHandle = () => {
const data = {
- dept: '0235',
- userid: 'lis',
+ dept: queryParams.ksdh,
+ userid: queryParams.userid,
st: '',
et: '',
yljg: queryParams.yljg
@@ -588,25 +627,61 @@ const printHandle = () => {
if (queryParams.times && queryParams.times.length) {
data.st = queryParams.times[0]
data.et = queryParams.times[1]
+ } else {
+ data.st = ''
+ data.et = ''
}
addObj(data).then((res: any) => {
if (res.code == 0) {
getList()
}
})
-
}
+// 计算两个日期的天数差(支持带时分秒)
+const getDayDiff = (start: string, end: string): number => {
+ const startTime = new Date(start).getTime();
+ const endTime = new Date(end).getTime();
+ // 校验日期有效性
+ if (isNaN(startTime) || isNaN(endTime)) {
+ return -1; // 无效日期
+ }
+
+ // 计算毫秒差 → 转换为天数(向上取整,避免因时分秒导致的误差)
+ return Math.ceil((endTime - startTime) / (24 * 60 * 60 * 1000));
+};
// 查询申请单
const getList = () => {
- loading.value = true;
const data = {
- dept: '0235',
- userid: 'lis',
+ dept: queryParams.ksdh,
+ userid: queryParams.userid,
st: queryParams.times[0],
et: queryParams.times[1],
- yljg: queryParams.yljg
+ yljg: queryParams.yljg,
+ queryType: queryParams.queryType,
+ queryValue: queryParams.queryValue
}
+
+ if (!data.yljg) return ElMessage.warning('医疗机构不能为空!')
+ if (!data.dept) return ElMessage.warning('科室代号不能为空!')
+ if (!data.userid) return ElMessage.warning('用户userid不能为空!')
+
+ // 校验日期格式
+ const dayDiff = getDayDiff(queryParams.times[0], queryParams.times[1]);
+ if (dayDiff === -1) return ElMessage.warning('请选择有效的日期范围');
+
+
+ //校验是否超过7天
+ if (dayDiff > 7) return ElMessage.warning('查询时间范围不能超过7天,请重新选择');
+ if (queryParams.times && queryParams.times.length > 0) {
+ data.st = queryParams.times[0]
+ data.et = queryParams.times[1]
+ } else {
+ data.st = ''
+ data.et = ''
+ }
+
+ loading.value = true;
fetchCodeList(data).then((response: any) => {
if (response.code == 0) {
loading.value = false;
@@ -621,28 +696,30 @@ const getList = () => {
}
const selectStatusRows = () => {
- tableRef.value.clearSelection()
tableData.value.forEach((item: any) => {
if (item.zt == 1) {
tableRef.value.toggleRowSelection(item, true)
+ } else {
+ tableRef.value.toggleRowSelection(item, false)
}
})
}
// 打印pdf
const printPdf = () => {
- if (sqhs.value.length <= 0) return ElMessage.warning('请选择数据!')
+ const selections = tableRef.value.allSelection()
+ if (selections.length <= 0) return ElMessage.warning('请选择数据!')
ElMessageBox.confirm(`确定打印选中的数据吗?`, "提示", {
confirmButtonText: "确认",
cancelButtonText: "取消",
beforeClose: async (action, instance, done) => {
if (action === "confirm") {
- const requests = sqhs.value.map((item: any) => { return item.sqh });
+ const requests = selections.map((item: any) => { return item.sqh });
fetchCodeExec({
sqh: requests.join(','),
- userid: 'lis',
+ userid: queryParams.userid,
status: 11,
- yljg: 1
+ yljg: queryParams.yljg
}).then((res: any) => {
if (res.code == 0) {
done();
@@ -659,12 +736,17 @@ const printPdf = () => {
\ No newline at end of file
diff --git a/src/views/liswork/work/charge/index.vue b/src/views/liswork/components/charge/index.vue
similarity index 100%
rename from src/views/liswork/work/charge/index.vue
rename to src/views/liswork/components/charge/index.vue
diff --git a/src/views/liswork/work/clinical/index.vue b/src/views/liswork/components/clinical/index.vue
similarity index 97%
rename from src/views/liswork/work/clinical/index.vue
rename to src/views/liswork/components/clinical/index.vue
index 6c49d62..06ea074 100644
--- a/src/views/liswork/work/clinical/index.vue
+++ b/src/views/liswork/components/clinical/index.vue
@@ -26,6 +26,7 @@ onMounted(() => {
}
emitter.on('refreshClinical', (data) => {
+ console.log('data==>', data);
getClinicalInfo(data)
})
})
diff --git a/src/views/liswork/work/combination/index.vue b/src/views/liswork/components/combination/index.vue
similarity index 87%
rename from src/views/liswork/work/combination/index.vue
rename to src/views/liswork/components/combination/index.vue
index 87b0cc1..6b9e078 100644
--- a/src/views/liswork/work/combination/index.vue
+++ b/src/views/liswork/components/combination/index.vue
@@ -27,7 +27,7 @@ const props = defineProps({
})
const mbStore = useCommonStore();
const { queryParams } = toRefs(props);
-const tableData = ref([])
+const tableData: any = ref([])
const columns = ref([
{ prop: 'mbmc', label: '批输入模板', visible: true, align: 'center', },
{ prop: 'yblx', label: '标本类型', visible: true, align: 'center', width: 80 },
@@ -41,7 +41,7 @@ const columns = ref([
// 左侧表格配置
const tableConfig = ref({
border: true, // 边框
- height: '', // 高度
+ height: '82vh', // 高度
highlightCurrentRow: true, // 高亮当前行
})
const getCombination = () => {
@@ -62,7 +62,6 @@ watch(() => props.queryParams.yq, (newValue) => {
const changeLxsr = (row: any) => {
const lxsrs = tableData.value.filter((item: any) => item.lxsr).map((item: any) => item.mbmc);
- console.log('lxsrs==>', lxsrs);
mbStore.setLxsrList(lxsrs);
}
@@ -70,6 +69,23 @@ const handleRowDblclick = (row: any) => {
emitter.emit('dbMbHandle', row);
}
+const clearLxsr = () => {
+ tableData.value = tableData.value.map((item: any) => {
+ return {
+ ...item,
+ lxsr: false,
+ }
+ })
+ mbStore.setLxsrList([]);
+}
+
+onMounted(() => {
+ // 模板渲染清楚标记
+ emitter.on('clearLxsrList', () => {
+ clearLxsr()
+ })
+})
+
\ No newline at end of file
diff --git a/src/views/liswork/labItem/tab/referenceValueDetails.vue b/src/views/liswork/labItem/tab/referenceValueDetails.vue
index 8f5023d..72a0102 100644
--- a/src/views/liswork/labItem/tab/referenceValueDetails.vue
+++ b/src/views/liswork/labItem/tab/referenceValueDetails.vue
@@ -2,11 +2,80 @@
- 增加
- 删除
+ 增加
+ 删除
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.ckxx + '--' + row.cksx }}
+
+
仪器特定参考值:
@@ -14,7 +83,7 @@
增加
删除
-
@@ -22,23 +91,61 @@
\ No newline at end of file
+
+const onAddClick = () => {
+ const newData = {
+ xh: maxXh.value + 1
+ }
+ dataListUp.value.push(newData)
+}
+
+const onDelClick = async () => {
+ console.log('删除',selectRow.value)
+ if(selectRow.value){
+ await ElMessageBox.confirm('是否要删除选中的数据?','警告',
+ { confirmButtonText: 'OK',cancelButtonText: 'Cancel',type: 'warning',});
+ dataListUp.value = dataListUp.value.filter((item:any) => item.xh !== selectRow.value.xh)
+ }
+}
+
+const rowClick = (row:any) => {
+ selectRow.value = row
+}
+
+onActivated( async ()=>{
+ //加载字典数据
+ await getDictData('BT','SLZQ')
+ bblxOptions.value = dictData.value.BT || []
+ optionsSLZQ.value = dictData.value.SLZQ || []
+})
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/labItem/tab/sort.vue b/src/views/liswork/labItem/tab/sort.vue
index e519b7b..7d55d1d 100644
--- a/src/views/liswork/labItem/tab/sort.vue
+++ b/src/views/liswork/labItem/tab/sort.vue
@@ -18,12 +18,10 @@ import CustomTable from '@/components/elTable/index.vue'
import { ref } from 'vue';
const props = defineProps({
- // 是否显示
- // visible: {
- // type: Boolean,
- // required: true,
- // default: false
- // }
+ dataList: {
+ type: Array,
+ default: []
+ }
});
diff --git a/src/views/liswork/labItem/tab/useInstr.vue b/src/views/liswork/labItem/tab/useInstr.vue
index fc5da48..ff20f7f 100644
--- a/src/views/liswork/labItem/tab/useInstr.vue
+++ b/src/views/liswork/labItem/tab/useInstr.vue
@@ -2,37 +2,66 @@
\ No newline at end of file
diff --git a/src/views/liswork/micro/index.vue b/src/views/liswork/micro/index.vue
index fb2f020..a454a33 100644
--- a/src/views/liswork/micro/index.vue
+++ b/src/views/liswork/micro/index.vue
@@ -1,11 +1,860 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
刷新
+
删除
+
上一个
+
下一个
+
+
+
+
+ 列表翻页
+
+
+
+
+ 所有
+ 近30天
+ 近60天
+ 近90天
+ 近7天
+ 此日 ->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/src/views/liswork/micro/labpat.vue b/src/views/liswork/micro/labpat.vue
new file mode 100644
index 0000000..3e71883
--- /dev/null
+++ b/src/views/liswork/micro/labpat.vue
@@ -0,0 +1,501 @@
+
+
+
+
+ 扫码
+
+
+
+
{{ getLableType(lastJgbz) }}
+
+
+
+
+
+
+
+
+
+ 急诊
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/micro/labpatlist.vue b/src/views/liswork/micro/labpatlist.vue
new file mode 100644
index 0000000..640956f
--- /dev/null
+++ b/src/views/liswork/micro/labpatlist.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getLableType(row.jgbz) }}
+
+
+
+ {{ formatDict(row.brly, 'PT') }}
+
+
+ {{ row.brxm }}
+
+
+ {{ formatDict(row.brxb, 'SX') }}
+
+
+ {{ formatDict(row.nldw, 'AU') }}
+
+
+ {{ formatDict(row.yblx, 'BT') }}
+
+
+ {{ formatDict(row.ksdh, 'DP') }}
+
+
+ {{ formatDict(row.yhdh, 'SRD') }}
+
+
+
+
+
+
+
+
+
+
+ {{ formatDict(row.yljg, 'HOS') }}
+
+
+
+
+
+
+
+
+ 确认
+ 取消
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/micro/labresult/byj.vue b/src/views/liswork/micro/labresult/byj.vue
new file mode 100644
index 0000000..56f939b
--- /dev/null
+++ b/src/views/liswork/micro/labresult/byj.vue
@@ -0,0 +1,92 @@
+
+
+
+ 打印培养基条码
+ 自动打印培养基条码
+
+
+
+ 培养基 {{ tableData.length }}个
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/micro/labresult/cbReport.vue b/src/views/liswork/micro/labresult/cbReport.vue
new file mode 100644
index 0000000..3a2f38b
--- /dev/null
+++ b/src/views/liswork/micro/labresult/cbReport.vue
@@ -0,0 +1,648 @@
+
+
+
+
+ 初报人: {{ formatUser(cbInfo?.confirmer) }} 报告时间: {{ cbInfo?.confirmdt
+ }}
+
+
{{ cbInfo?.jgbz == '2' ? '已初报' : '' }}
+
+
+ 初报审核
+ 取消审核
+ 新增
+ 删除
+ 组合项目
+ 打印
+ 预览
+
+
+
+ 细菌/结果({{ tableData.length }})项
+
+
+
+ {{ row.od }}
+
+
+
+ {{ row.csjg }}
+
+
+
+
+
+
+ {{ formatJgbz(row.jgbz) }}
+
+
+
+ {{ row.cutoff }}
+
+
+
+
+
+
+ {{ row.alarm_flag == 'H' ? '危急值' : '' }}
+
+
+ {{ formatDict(row.germclass, 'germclass') }}
+
+
+
+
+
+
+ 二报人: {{ formatUser(erInfo?.confirmer) }} 报告时间: {{ erInfo?.confirmdt
+ }}
+
+
{{ erInfo?.jgbz == '2' ? '已二报' : '' }}
+
+
+ 二报审核
+ 取消审核
+ 新增
+ 删除
+ 组合项目
+ 打印
+ 预览
+
+
+
+ 细菌/结果({{ tableData2.length }})项
+
+
+
+ {{ row.od }}
+
+
+
+ {{ row.csjg }}
+
+
+
+
+
+
+ {{ formatJgbz(row.jgbz) }}
+
+
+
+ {{ row.cutoff }}
+
+
+
+
+
+
+ {{ row.alarm_flag == 'H' ? '危急值' : '' }}
+
+
+ {{ formatDict(row.germclass, 'germclass') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/micro/labresult/components/combinedDialog.vue b/src/views/liswork/micro/labresult/components/combinedDialog.vue
new file mode 100644
index 0000000..f152f63
--- /dev/null
+++ b/src/views/liswork/micro/labresult/components/combinedDialog.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/micro/labresult/components/kssMb.vue b/src/views/liswork/micro/labresult/components/kssMb.vue
new file mode 100644
index 0000000..97d90f9
--- /dev/null
+++ b/src/views/liswork/micro/labresult/components/kssMb.vue
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/micro/labresult/components/meddict.vue b/src/views/liswork/micro/labresult/components/meddict.vue
new file mode 100644
index 0000000..7cc0085
--- /dev/null
+++ b/src/views/liswork/micro/labresult/components/meddict.vue
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/micro/labresult/record.vue b/src/views/liswork/micro/labresult/record.vue
new file mode 100644
index 0000000..692c266
--- /dev/null
+++ b/src/views/liswork/micro/labresult/record.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/micro/labresult/zbReport.vue b/src/views/liswork/micro/labresult/zbReport.vue
new file mode 100644
index 0000000..13cbdbd
--- /dev/null
+++ b/src/views/liswork/micro/labresult/zbReport.vue
@@ -0,0 +1,820 @@
+
+
+
+ 审核
+ 取消审核
+ 新增
+ 删除
+ 组合项目
+
+
+
+ 细菌/结果({{ tableData.length }})项
+
+
+
+ {{ row.od }}
+
+
+
+ {{ row.csjg }}
+
+
+
+
+
+
+ {{ formatJgbz(row.jgbz) }}
+
+
+
+ {{ row.cutoff }}
+
+
+
+
+
+
+ {{ row.alarm_flag == 'H' ? '危急值' : '' }}
+
+
+ {{ formatDict(row.germclass, 'germclass') }}
+
+
+
+
+
+
+
+ 抗生素({{ ymTableData.length }})项
+
+
+
+ {{ row.mic }}
+
+
+
+ {{ row.rad }}
+
+
+
+ {{ row.csjg }}
+
+
+
+ { jgbzHandle(val, row) }">
+ R
+ I
+ S
+ N
+ SDD
+
+
+
+
+
+ {{ row.bz }}
+
+
+
+
+ {{ row.txtresult }}
+
+
+
+
+ {{ row.cp_bz }}
+
+
+
+
+
+
+
+
+
+
+ 新增
+ 删除
+ 更换抗生素组
+ 添加抗生素组
+
+
+
+ 确定
+ 清除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/liswork/work/components/CheckUser.vue b/src/views/liswork/work/components/CheckUser.vue
index 9f7a5ac..25a7348 100644
--- a/src/views/liswork/work/components/CheckUser.vue
+++ b/src/views/liswork/work/components/CheckUser.vue
@@ -1,89 +1,33 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- 用户工号
-
-
-
-
-
- 密码
-
-
-
-
-
{{ errorMsg }}
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ 确认
+ 取消
+
+
+
+
-
-
+
diff --git a/src/views/liswork/work/components/batchCode.vue b/src/views/liswork/work/components/batchCode.vue
index 8dc309a..d8cf9ad 100644
--- a/src/views/liswork/work/components/batchCode.vue
+++ b/src/views/liswork/work/components/batchCode.vue
@@ -194,9 +194,7 @@ defineExpose({
});
onMounted(() => {
- for (let index = 0; index < 100; index++) {
- tableData.value.push({ ybh: index, sqh: '321421321', brxm: '李是大', brdh: '4332132', jymd: '高蛋白大 大的 ' },);
- }
+
});
diff --git a/src/views/liswork/work/components/labresult.vue b/src/views/liswork/work/components/labresult.vue
index 447e310..b0c38d8 100644
--- a/src/views/liswork/work/components/labresult.vue
+++ b/src/views/liswork/work/components/labresult.vue
@@ -7,7 +7,7 @@
取消审核
新增
-
删除
@@ -76,82 +76,13 @@
-
-
-
-
-
-
-
-
-
-
- 确认
- 取消
-
-
-
-
-
+
-
- {{ warningMsgdata }}
-
-
-
- 系统通知
- 电话通知
-
-
-
-
-
-
-
-
-
-
-
-
-
- 确认
- 取消
-
-
-
-
-
+
-
-
-
{{ reasonText }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
- 确认
- 取消
-
-
@@ -261,7 +192,6 @@
-
@@ -280,6 +210,9 @@ import { classCom } from '@/utils/classCom'
import CustomTable from '@/components/elTable/index.vue'
import dayjs from 'dayjs';
import emitter from "@/utils/mitt";
+import CheckUser from "./CheckUser.vue";
+import Unconfirmlog from './unconfirmlog.vue';
+import UploadWarning from "./uploadwarning.vue";
import { useCommonStore } from "@/store/modules/commonStore";
import ContextMenu from "@/components/contextMenu/index.vue";
import ViewBackup from "./viewBackup.vue";
@@ -335,6 +268,7 @@ watch(() => props.tableData, (newVal) => {
existingNames.add(item.xmdh)
}
})
+ emitter.emit('clearLxsrList')
}
});
});
@@ -784,53 +718,12 @@ const beforeEnter = (row) => {
lastResult.value = res.data || {}
})
};
-
-
-
-const warningForm = ref({
- userId: '',
- phone: '',
- uploadTp: '1'
-})
-
-
-const uncheckForm = ref({
- reason: '',
- yhdh: '',
- mm: '',
-})
-
-const wrules = ref({
- userId: [{ required: true, message: "请输入用户工号", trigger: "blur" },
- { min: 3, max: 20, message: "长度在 3 到 20 个字符", trigger: "blur" }
- ],
- phone: [{ required: true, message: "请输入联系电话", trigger: "blur" },
- { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }
- ]
-})
-
-const unCheckshow = ref(false);
-const inputValue = ref('');
const reasonText = ref('');
const warningMsgdata = ref('');
-const showuploadwarning = ref(false);
const checkuserid = ref()
const checkShow = ref(false);
-const ruleForm = ref({
- yhdh: '',
- mm: ''
-});
-
-const rules = ref(
- {
- yhdh: [{ required: true, message: "请输入用户工号", trigger: "blur" },
- { min: 3, max: 20, message: "长度在 3 到 20 个字符", trigger: "blur" }
- ],
- mm: [{ required: true, message: "请输入密码", trigger: "blur" },
- { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }
- ]
- }
-);
+const checktitle = ref('');
+const checkUserRef = ref();
const csjgRef = ref();
@@ -838,9 +731,32 @@ const itemDictRef = ref(); // DictInput组件引用
const tableRef = ref();
-
+const runnextstepname = ref(-1)
const handleCheck = (checkType) => {
- // yhdh = checkuserid.value
+ runnextstepname.value = checkType
+ tableKey.value.problemId = 0;
+ // tableKey.value.yhdh = checkuserid.value
+ if (!tableKey.value.yhdh) {
+ checktitle.value = '审核人工号密码验证'
+ checkUserRef.value.open()
+ } else {
+ proceedCheck(checkType)
+ }
+};
+
+const handleCheckUserConfirm = (info) => {
+ checkuser({ yhdh: info.yhdh, mm: info.mm }).then(response => {
+ if (response.code == 0) {
+ emits('update:tableKey', {
+ ...tableKey.value,
+ yhdh: info.yhdh
+ });
+ proceedCheck(runnextstepname.value)
+ }
+ })
+}
+
+const proceedCheck = (checkType) => {
switch (checkType) {
case 1: // 初审
check1({ ...tableKey.value, yhdh: props.labPat.yhdh }).then(res => {
@@ -858,90 +774,34 @@ const handleCheck = (checkType) => {
default:
break;
}
-};
-
-
-
-
+}
+const uploadwarningRef = ref();
const shHandleCheck = () => {
check2({ ...props.tableKey, yhdh: props.labPat.yhdh }).then(res => {
emits("changeStatus", props.labPat);
if (res.code == "4" && res.problemId === 4) {
tableKey.value.problemId = res.problemId;
warningMsgdata.value = res.msg;
- showuploadwarning.value = true;
+ uploadwarningRef.value.open();
}
})
};
-const warningFormRef = ref(null);
-
-const warningResetForm = () => {
- warningForm.value.userId = '';
- warningForm.value.phone = '';
- warningForm.value.uploadTp = '1';
- warningFormRef.value.resetFields();
- showuploadwarning.value = false;
-};
-// 处理危急值登记
-const handleWarningSuccess = async () => {
- if (warningForm.value.uploadTp == 2) {
- const valid = await warningFormRef.value.validate().catch(() => { });
- if (!valid) return false;
- }
- reglimit({ ...tableKey.value, qrr: warningForm.value.userId, tzfs: warningForm.value.uploadTp, phone: warningForm.value.phone }).then(response => {
- showuploadwarning.value = false;
- if (response.code == 0) {
- shHandleCheck();
- }
- if (response.code == 4) {
- ElMessageBox.confirm(response.msg, '系统提示', { confirmButtonText: '是', cancelButtonText: '否', type: 'warning' }).then(() => {
- tableKey.value.problemId = tableKey.value.problemId + 1;
- handleWarningSuccess();
- }).catch(() => {
- shHandleCheck();
- });
- }
- })
-};
+const unconfirmlogRef = ref();
const unShHandle = () => {
uncheck2({ ...tableKey.value, yhdh: props.labPat.yhdh }).then(res => {
console.log('res',res);
if (res.code == "4") {
tableKey.value.problemId = res.problemId;
reasonText.value = res.msg;
- unCheckshow.value = true;
+ unconfirmlogRef.value.open();
}
emits("changeStatus", props.labPat);
})
};
-const uncheckFormRef = ref();
-// 取消审核原因
-const unconfirmlogConfirm = async () => {
- if (tableKey.value.problemId == 4) {
- if (!uncheckForm.value.inputValue) return ElMessage.warning("请输入操作原因")
- } else if (tableKey.value.problemId == 6) {
- const valid = await uncheckFormRef.value.validate().catch(() => { });
- if (!valid) return false;
- }
- unconfirmlog({ ...tableKey.value, ...uncheckForm.value }).then(response => {
- if (response.code == "0") {
- unCheckshow.value = false;
- unShHandle();
- }
- })
-};
-
-const unconfirmlogCancel = () => {
- unCheckshow.value = false;
- uncheckForm.value.reason = '';
- uncheckForm.value.yhdh = '';
- uncheckForm.value.mm = '';
- uncheckFormRef.value.resetFields();
-}
const ruleFormRef = ref(null);
@@ -963,12 +823,7 @@ const submitForm = () => {
}
-const resetForm = () => {
- checkShow.value = false;
- ruleForm.value.userId = '';
- ruleForm.value.mm = '';
- ruleFormRef.value.resetFields();
-};
+
// 2. 打开项目选择弹窗
const openItemDictDialog = () => {
itemDictRef.value.openDictSelector();
@@ -1022,7 +877,8 @@ const addRowFromDict = async (rowData) => {
const emits = defineEmits([
'fetchLabResults',
'changeStatus',
- 'previewHandle'
+ 'previewHandle',
+ 'update:tableKey'
]);
const csjgTableData = ref([]);
@@ -1211,6 +1067,7 @@ onMounted(() => {
}
})
handleCsjgEnter(null)
+ emitter.emit('clearLxsrList')
}
});
})
diff --git a/src/views/liswork/work/components/unconfirmlog.vue b/src/views/liswork/work/components/unconfirmlog.vue
index 69d5a83..26db032 100644
--- a/src/views/liswork/work/components/unconfirmlog.vue
+++ b/src/views/liswork/work/components/unconfirmlog.vue
@@ -1,186 +1,113 @@
-
-
-
-
-