feat:设备管理修改

This commit is contained in:
houjunxiang
2026-03-20 17:56:17 +08:00
parent f0dffc29fa
commit 904d1c4ea4
15 changed files with 564 additions and 468 deletions

View File

@@ -50,7 +50,7 @@ watch(
newVal => { newVal => {
if (!newVal) return (fileList.value = []) if (!newVal) return (fileList.value = [])
const urls = Array.isArray(newVal) ? newVal : newVal.split(',') const urls = Array.isArray(newVal) ? newVal : newVal.split(',')
imgs.value = urls.map(url => url.previewUrl) imgs.value = urls.map(url => url.url)
fileList.value = urls.map(url => ({ fileList.value = urls.map(url => ({
url: url.url, url: url.url,
status: 'success', status: 'success',

File diff suppressed because it is too large Load Diff

View File

@@ -305,7 +305,7 @@
{ {
"path": "pages/material/outbound/index", "path": "pages/material/outbound/index",
"style": { "style": {
"navigationBarTitleText": "出库", "navigationBarTitleText": "物料领用",
"navigationStyle": "custom" "navigationStyle": "custom"
} }
}, },
@@ -347,7 +347,7 @@
{ {
"path": "pages/material/openMark/index", "path": "pages/material/openMark/index",
"style": { "style": {
"navigationBarTitleText": "试剂开封", "navigationBarTitleText": "开封",
"navigationStyle": "custom" "navigationStyle": "custom"
} }
}, },

View File

@@ -10,7 +10,7 @@
<view <view
class="label-my" class="label-my"
:style="{ fontWeight: checkFeadToDetailField(field.headToDetailField) ? 'bold' : 'normal' }" :style="{ fontWeight: checkFeadToDetailField(field.headToDetailField) ? 'bold' : 'normal' }"
>{{ field.label }}</view ><text v-if="field.required" style="color: red">*</text>{{ field.label }}</view
> >
<view class="content-my"> <view class="content-my">
<view v-if="field.type == 'title'" class="content-title"> <view v-if="field.type == 'title'" class="content-title">
@@ -34,7 +34,7 @@
:placeholder="field.placeholder" :placeholder="field.placeholder"
:disabled="field.disabled || field.fillingWay == 'calculate'" :disabled="field.disabled || field.fillingWay == 'calculate'"
/> />
<uni-data-select <zxz-uni-data-select
v-if="field.type == 'Select'" v-if="field.type == 'Select'"
v-model="field.value" v-model="field.value"
:multiple="field.multiple" :multiple="field.multiple"
@@ -162,6 +162,7 @@ async function loadTaskDetail() {
label: item.fieldName, label: item.fieldName,
fieldKey: item.fieldKey, fieldKey: item.fieldKey,
type: item.fieldType, type: item.fieldType,
required: customConfig.required,
placeholder: '请输入', placeholder: '请输入',
hidden: false hidden: false
} }
@@ -364,6 +365,14 @@ function looseEqual(a, b) {
// 保存抬头字段(带确认弹窗) // 保存抬头字段(带确认弹窗)
function saveHeadData() { function saveHeadData() {
if (!realFormData.value['assayTime']) return nx.$helper.showToast('请选择分析时间') if (!realFormData.value['assayTime']) return nx.$helper.showToast('请选择分析时间')
// 校验动态字段是否为空
for (const field of formFields.value) {
if (field.required && (!field.value || field.value?.length === 0)) {
nx.$helper.showToast('请填写' + field.label)
return
}
}
if (checkPropertyEquality()) { if (checkPropertyEquality()) {
uni.showModal({ uni.showModal({
title: '提示', title: '提示',

File diff suppressed because it is too large Load Diff

View File

@@ -165,6 +165,10 @@ async function getDailyCheckRecord(id) {
res.checkUserName = nx.$store('user').userInfo.nickname res.checkUserName = nx.$store('user').userInfo.nickname
} }
detailInfo.value = res detailInfo.value = res
let files = res.businessFileRet.data.map((item) => {
return { id: item.fileId, name: item.fileName, url: item.fileUrl ,status: 'success',}
})
detailInfo.value.files = files
modalType.value = res.submitFlag modalType.value = res.submitFlag
lockOrientation('landscape') lockOrientation('landscape')

File diff suppressed because it is too large Load Diff

View File

@@ -150,6 +150,10 @@ async function getDetailInfo(id) {
res.checkUserName = nx.$store('user').userInfo.nickname res.checkUserName = nx.$store('user').userInfo.nickname
} }
detailInfo.value = res detailInfo.value = res
let files = res.businessFileRet.data.map((item) => {
return { id: item.fileId, name: item.fileName, url: item.fileUrl ,status: 'success',}
})
detailInfo.value.files = files
modalType.value = res.submitFlag modalType.value = res.submitFlag
lockOrientation('landscape') lockOrientation('landscape')
} }

View File

@@ -8,26 +8,22 @@
</view> </view>
<scroll-view style="height: 60vh" scroll-y scroll-with-animation class="mt16 pl16"> <scroll-view style="height: 60vh" scroll-y scroll-with-animation class="mt16 pl16">
<template v-if="taskList.length > 0"> <template v-if="taskList.length > 0">
<up-radio-group v-model="selectRowId" placement="column"> <u-checkbox-group placement="column" v-model="selectRows">
<view v-for="(task, index) in taskList"> <view v-for="(task, index) in taskList">
<up-radio :name="task.id"> <u-checkbox :name="task.id">
<template #label> <template #label>
<view <view class="x-f pb4 pl8 border-b full-width" @click="current = index">
class="x-f pb4 pl8 border-b full-width"
:class="{ active: current === index }"
@click="current = index"
>
<view class="fs20">{{ task.taskNo }}</view> <view class="fs20">{{ task.taskNo }}</view>
<view class="pl16 pr16">{{ task.taskName }}{{ task.assayOper }}</view> <view class="pl32 pr32">{{ task.taskName }}{{ task.assayOper }}</view>
<view class="x-f"> <view class="x-f">
<u-icon name="clock"></u-icon> <u-icon name="clock"></u-icon>
<text class="ml5">{{ nx.$helper.formateToDateTime(task.taskAssignTime) }}</text> <text class="ml5">{{ nx.$helper.formateToDateTime(task.taskAssignTime) }}</text>
</view> </view>
</view> </view>
</template> </template>
</up-radio> </u-checkbox>
</view> </view>
</up-radio-group> </u-checkbox-group>
</template> </template>
<up-empty v-else text="暂无数据" mode="list"> </up-empty> <up-empty v-else text="暂无数据" mode="list"> </up-empty>
</scroll-view> </scroll-view>
@@ -44,7 +40,7 @@ let emits = defineEmits(['confirm'])
const addConfigShow = ref(false) const addConfigShow = ref(false)
function show() { function show() {
addConfigShow.value = true addConfigShow.value = true
selectRowId.value = undefined selectRows.value = []
current.value = undefined current.value = undefined
getAssayTaskList() getAssayTaskList()
} }
@@ -63,21 +59,40 @@ const getAssayTaskList = async () => {
function handleCancel() { function handleCancel() {
addConfigShow.value = false addConfigShow.value = false
} }
const selectRowId = ref(undefined) const selectRows = ref([])
function handleAdd() {
if (!selectRowId.value) { async function handleAdd() {
// 1. 校验是否选择了数据
if (!selectRows.value || !selectRows.value.length) {
return uni.showToast({ return uni.showToast({
title: '请选择任务单', title: '请选择任务单',
icon: 'none' icon: 'none'
}) })
} }
let sampleList = [] try {
nx.$api.assayTask.getAssayTaskDetailList({ businessAssayTaskId: selectRowId.value }).then(res => { const requestPromises = selectRows.value.map(businessAssayTaskId => {
const list = res || [] return nx.$api.assayTask.getAssayTaskDetailList({
sampleList = list businessAssayTaskId
})
})
const results = await Promise.all(requestPromises)
let sampleList = []
results.forEach(res => {
const list = res || []
sampleList = sampleList.concat(list)
})
// 5. 执行回调和关闭弹窗
emits('confirm', sampleList) emits('confirm', sampleList)
addConfigShow.value = false addConfigShow.value = false
}) } catch (error) {
console.error('批量获取详情失败:', error)
uni.showToast({
title: '数据加载失败',
icon: 'none'
})
}
} }
defineExpose({ defineExpose({
@@ -86,7 +101,7 @@ defineExpose({
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
:deep(.u-radio__label-wrap) { :deep(.u-checkbox__label-wrap) {
width: 100%; width: 100%;
} }
.active { .active {

View File

@@ -48,7 +48,7 @@
</up-row> </up-row>
<up-row justify="space-around"> <up-row justify="space-around">
<up-col span="3.5"> <up-col span="3.5">
<view class="p5">{{isHighTemperature?'使用':''}}温度</view> <view class="p5">{{ isHighTemperature ? '使用' : '' }}温度</view>
<up-input v-model="formData.temperature"></up-input> <up-input v-model="formData.temperature"></up-input>
</up-col> </up-col>
<up-col v-if="!isHighTemperature" span="3.5"> <up-col v-if="!isHighTemperature" span="3.5">
@@ -148,6 +148,7 @@ const detailSchema = [
{ label: '使用班组', value: 'deptName' } { label: '使用班组', value: 'deptName' }
] ]
const columns = ref([ const columns = ref([
{ title: '任务单号', key: 'taskNo', align: 'center' },
{ title: '样品名称', key: 'sampleName', align: 'center' }, { title: '样品名称', key: 'sampleName', align: 'center' },
{ title: '样品编号', key: 'sampleCode', align: 'center' }, { title: '样品编号', key: 'sampleCode', align: 'center' },
{ title: '操作', key: 'action', width: '100px', align: 'center' } { title: '操作', key: 'action', width: '100px', align: 'center' }
@@ -167,7 +168,6 @@ function handleSampleSelect(dataList, type) {
const transformData = newData => { const transformData = newData => {
if (type === 'sample') { if (type === 'sample') {
return { return {
id: newData.id,
detailType: 'sample', detailType: 'sample',
sampleCode: newData.sampleCode, sampleCode: newData.sampleCode,
sampleName: newData.sampleName, sampleName: newData.sampleName,
@@ -176,16 +176,16 @@ function handleSampleSelect(dataList, type) {
} }
} else { } else {
return { return {
id: newData.id,
detailType: 'standard', detailType: 'standard',
sampleCode: newData.code, sampleCode: newData.code,
sampleName: newData.name sampleName: newData.name,
taskId: newData.id
} }
} }
} }
tableData.value = tableData.value.filter(item => item.detailType !== type)
for (const newData of dataList) { for (const newData of dataList) {
const index = tableData.value.findIndex(item => item.id === newData.id) const taskIdKey = type === 'sample' ? 'businessAssayTaskId' : 'id'
const index = tableData.value.findIndex(item => item.taskId === newData[taskIdKey])
const transformedItem = transformData(newData) const transformedItem = transformData(newData)
if (index > -1) { if (index > -1) {
@@ -206,7 +206,6 @@ const userId = nx.$store('user').userInfo['id']
const userName = nx.$store('user').userInfo['realname'] const userName = nx.$store('user').userInfo['realname']
let detailInfo = ref({}) let detailInfo = ref({})
function handleScanResult(result) { function handleScanResult(result) {
const codeObj = JSON.parse(result) const codeObj = JSON.parse(result)
if (!pageLoading.value) { if (!pageLoading.value) {
@@ -244,12 +243,12 @@ function handleTestAction(id) {
getLastDailyCheckOfToday(id) getLastDailyCheckOfToday(id)
} }
// 是否是高温设备 // 是否是高温设备
const isHighTemperature = computed(()=>{ const isHighTemperature = computed(() => {
if(detailInfo.value.customConfigJson&&detailInfo.value.customConfigJson.highTemperature){ if (detailInfo.value.customConfigJson && detailInfo.value.customConfigJson.highTemperature) {
return true return true
}else{ } else {
return false return false
} }
}) })
// 获取设备详情 // 获取设备详情
async function getDeviceInfo(id) { async function getDeviceInfo(id) {

Some files were not shown because too many files have changed in this diff Show More