feat:样品库管理

This commit is contained in:
houjunxiang
2025-11-21 17:56:33 +08:00
parent 7ee3df9ab9
commit 753766893b
24 changed files with 818 additions and 218 deletions

View File

@@ -5,13 +5,13 @@
<u-col span="2" class="text-center" style="position: relative">
<slot name="tag" v-if="$slots.tag" :task="task"></slot>
<template v-else>
<u-icon :color="taskStyle(task)" name="tags-fill" size="40"></u-icon>
<u-icon :color="taskStyle(task)" name="tags-fill" size="50"></u-icon>
<text class="seq">{{ seq }}</text>
</template>
</u-col>
<u-col span="10">
<view class="fs18">{{ task.taskNo }}</view>
<view class="mt3 mb3">{{ task.taskName }}{{ task.assayOper }}</view>
<view class="fs20">{{ task.taskNo }}</view>
<view class="mt8 mb8">{{ task.taskName }}{{ task.assayOper }}</view>
<view class="x-f">
<u-icon name="clock"></u-icon>
<text class="ml5">{{ taskOperatorTime }}</text>
@@ -75,8 +75,8 @@ const taskStyle = task => {
}
.seq {
position: absolute;
top: 12px;
left: 12px;
top: 20px;
left: 20px;
color: #fff;
font-size: 11px;
}

View File

@@ -8,7 +8,7 @@
</view>
<u-gap height="5" bg-color="#0055A2"></u-gap>
<scroll-view
style="height: 75vh"
style="height: 82vh"
scroll-y
scroll-with-animation
class="content-main-left"
@@ -37,7 +37,7 @@
</view>
<u-gap height="5" bg-color="#0055A2"></u-gap>
<view>
<scroll-view scroll-y scroll-with-animation style="height: calc(75vh - 60px)">
<scroll-view scroll-y scroll-with-animation style="height: calc(82vh - 60px)">
<block v-for="(sample, index) in sampleList" :key="index">
<view class="sample-item">
<u-row @click="showSampleDetail(sample.businessAssayTaskDataId, index)">
@@ -50,7 +50,7 @@
<view>
<text class="pl5">{{ sample.sampleAssayCode }}</text>
</view>
<view>
<view class="mt10">
<text class="pl5">
{{ sample.sampleName }}
</text>
@@ -58,7 +58,7 @@
</u-col>
<u-col span="4">
<view>
<text style="padding-left: 10px" v-html="sample.assayProject"></text>
<rich-text :nodes="sample.assayProject"> </rich-text>
</view>
</u-col>
</u-row>
@@ -171,10 +171,9 @@ onBackPress(() => {
<style lang="scss" scoped>
.content-title-name {
height: 50px;
height: 60px;
box-sizing: border-box;
font-size: 20px;
font-weight: 300;
padding: 10px;
text-align: center;
display: flex;

View File

@@ -8,8 +8,9 @@
</navbar-back>
<u-row gutter="8">
<u-col span="3">
<u-col span="3" style="height: 60px">
<up-tabs
class="content-tabs"
:current="activeAssayTypeIndex"
:list="assayGroups"
lineColor="#5ac725"
@@ -24,15 +25,15 @@
></up-tabs>
<u-gap height="5" bg-color="#0055A2"></u-gap>
</u-col>
<u-col span="6">
<u-col span="6" style="height: 60px">
<view class="content-title-name">
<view class="current-sample-code">{{ currentSampleData.sampleCode }}</view>
<view>数据采集或录入</view>
</view>
<u-gap height="5" bg-color="#0055A2"></u-gap>
</u-col>
<u-col span="3">
<u-dropdown style="height: 35px">
<u-col span="3" style="height: 60px">
<u-dropdown>
<u-dropdown-item
v-model="curParameterKey"
:title="curParameterTitle"
@@ -63,7 +64,7 @@
<view>
{{ sample.sampleCode }}
</view>
<view> {{ sample.sampleName }} </view>
<view class="mt10"> {{ sample.sampleName }} </view>
</view>
</view>
</scroll-view>
@@ -149,8 +150,8 @@
</view>
</u-col>
<u-col span="3">
<view>
<scroll-view class="content-right-scroll" scroll-y scroll-with-animation>
<view class="pt10">
<scroll-view class="content-right-scroll" scroll-y scroll-with-animation :scroll-top="scrollFieldTop">
<view>
<!-- <template v-for="(fields, groupIndex) in fieldGroup" :key="'group_' + groupIndex"> -->
<!-- <view> -->
@@ -168,7 +169,7 @@
<template v-for="(fields, groupIndex) in currentGroup">
<up-collapse-item v-if="fields.label !== '全部'">
<template #title>
<text class="font-bold">{{ fields.label }}</text>
<text class="font-bold fs18">{{ fields.label }}</text>
</template>
<template v-for="(field, fieldIndex) in fields.fields" :key="groupIndex + '-' + fieldIndex">
<view
@@ -281,6 +282,7 @@ const taskIngredientsStatus = ref('') //配料状态
const configReportTemplateKey = ref('')
const elId = nx.$helper.uuid()
const scrollTop = ref(0) //tab标题的滚动条位置
const scrollFieldTop = ref(0)
const menuHeight = ref(0) // 左边菜单的高度
const menuItemHeight = ref(0) // 左边菜单item的高度
const weightDataIsToZero = ref(false) //重量数据是否归零
@@ -879,6 +881,7 @@ watch(
const collapseRef = ref()
const activeCollapses = ref([])
function handleAssayTypeChange({ index, value }) {
scrollFieldTop.value = 0
activeAssayTypeKey.value = value
activeAssayTypeIndex.value = index
currentSampleIndex.value = 0
@@ -1217,25 +1220,37 @@ onBackPress(() => {
color: #fff;
display: flex;
}
.content-title-name {
font-size: 18px;
font-weight: 300;
padding: 4px 0;
font-size: 22px;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
}
.content-tabs {
height: 100%;
:deep(.u-tabs__wrapper) {
height: 100%;
}
}
.current-sample-code {
font-weight: bold;
margin-right: 20px;
}
:deep(.u-dropdown) {
height: 100%;
.u-dropdown__menu {
height: 60px !important;
.u-dropdown__menu__item__text {
font-size: 18px !important;
}
}
}
.form-item-my {
display: flex;
align-items: center;
min-height: 35px;
font-size: 13px;
font-size: 16px;
border-bottom: 1px solid #dcdcdc;
}
.selected-field {
@@ -1285,10 +1300,10 @@ onBackPress(() => {
color: #c0c4cc;
}
.content-left-scroll {
height: 68vh;
height: 75vh;
}
.content-right-scroll {
height: 68vh;
height: 74vh;
}
.valid-warning {
color: orange;
@@ -1302,7 +1317,7 @@ onBackPress(() => {
align-items: center;
font-size: 16px;
color: #444;
padding: 4px 8px;
padding: 8px 16px;
box-sizing: border-box;
border-bottom: 2px dotted #444;
}
@@ -1335,8 +1350,9 @@ onBackPress(() => {
position: relative;
.code {
position: absolute;
top: 15px;
left: 55px;
font-style: 18px;
top: 25px;
left: 70px;
}
}
@@ -1405,7 +1421,7 @@ onBackPress(() => {
.field-name {
font-size: 26px;
padding: 8px;
padding: 16px;
width: 100%;
}

View File

@@ -8,7 +8,7 @@
<up-badge v-if="taskList.length > 0" class="ml5" :value="taskList.length" type="warning"></up-badge>
</view>
<u-gap height="5" bg-color="#0055A2"></u-gap>
<scroll-view style="height: 75vh" scroll-y scroll-with-animation class="content-main-left">
<scroll-view style="height: 82vh" scroll-y scroll-with-animation class="content-main-left">
<template v-if="taskList.length > 0">
<TaskItem
v-for="(task, index) in taskList"
@@ -29,7 +29,7 @@
</view>
<u-gap height="5" bg-color="#0055A2"></u-gap>
<view>
<scroll-view scroll-y scroll-with-animation style="height: calc(75vh - 60px)">
<scroll-view scroll-y scroll-with-animation style="height: calc(82vh - 60px)">
<u-checkbox-group placement="column" v-model="checkedSampleCodes">
<block v-for="(sample, index) in sampleList" :key="index">
<view v-if="currentTask.reviewCount === sample.reviewCount" class="sample-item">
@@ -52,13 +52,13 @@
<view>
{{ sample.sampleAssayCode }}
</view>
<view>
<view class="mt10">
{{ sample.sampleName }}
</view>
</u-col>
<u-col span="6">
<view>
<text class="pl10" v-html="sample.assayProject"> </text>
<rich-text :nodes="sample.assayProject"> </rich-text>
</view>
</u-col>
</u-row>
@@ -263,10 +263,9 @@ onBackPress(() => {
<style lang="scss" scoped>
.content-title-name {
height: 50px;
height: 60px;
box-sizing: border-box;
font-size: 20px;
font-weight: 300;
font-size: 22px;
padding: 10px;
text-align: center;
display: flex;