设备管理
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

158 lines
4.1 KiB

<template>
<div class="device-test-info-from">
<div class="template-table">
<EdfsTable
class="table"
:data="list"
:usePaging="false"
:highlight-current-row="true"
row-class-name="row"
>
<template v-for="(col, idx) in testTableCol" :key="idx">
<el-table-column
v-if="col.prop.endsWith('Time')"
:label="col.label"
:min-width="col.minWidth"
>
<template #default="scope">
{{ dayjs(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column
v-else-if="col.prop === 'status'"
:label="col.label"
:min-width="col.minWidth"
>
<template #default="scope">
{{ testSheetStatus.find(item => item.value === scope.row.status)?.label }}
</template>
</el-table-column>
<el-table-column
v-else
:prop="col.prop"
:label="col.label"
:min-width="col.minWidth"
/>
</template>
<el-table-column label="操作" width="190" align="center">
<template #default="scope">
<EdfsButton
link
type="primary"
inner-text="查看详情"
@click="loadSheetDetail(scope.row)"
/>
</template>
</el-table-column>
</EdfsTable>
<EdfsButton
inner-text="提交并入库"
type="primary"
class="save-button"
v-if="isShowSaveButton"
@click="onSave"
/>
</div>
</div>
<testSheetInfoDlg
:info="sheetDetail"
:title="curSheetDetailName"
:isShow="isShowDetail"
@on-close="isShowDetail = false"
/>
</template>
<script setup lang="ts">
import dayjs from 'dayjs'
import EdfsTable from '@/components/dashboard/Edfs-table/index.vue'
import EdfsButton from '@/components/dashboard/Edfs-button/index.vue'
import { testSheetStatus, testTableCol, type OptAction } from '../utils'
import {
getSheetDetail,
updateSheetStatus,
updateTestSheetStatus,
} from '@/api/module/eam/device/template'
import { isResError, useMessage } from '@/hooks/useMessage'
import { getDeviceTestSheet, type IDevice } from '@/api/module/eam/device'
import { useRoute } from 'vue-router'
import testSheetInfoDlg from './testSheetInfoDlg.vue'
const route = useRoute()
const action = route.query.action as OptAction
const massage = useMessage()
const props = defineProps<{
disabled: boolean
deviceId: number | undefined
info: IDevice | undefined
}>()
const emit = defineEmits(['onSave'])
const list = ref<any>([])
const isShowSaveButton = computed(() => {
if (action === 'view') return false
return props.info?.status === undefined ? true : props.info.status < 2
})
async function onChangeRadio(row: any) {
const res = await updateSheetStatus(row.id, row.actualResult)
if (isResError(res)) return
massage.success('更新成功')
}
async function onSave() {
if (!props.info) return
const res = await updateTestSheetStatus({
id: props.info.testSheetId,
deviceId: props.info.id,
})
if (isResError(res)) return
emit('onSave')
}
async function loadDeviceTestSheet() {
const res = await getDeviceTestSheet({
deviceId: props.deviceId as number,
isLast: true,
})
if (isResError(res)) return
list.value = res.data
}
const isShowDetail = ref(false)
const sheetDetail = ref<any>([])
const curSheetDetailName = ref<any>()
async function loadSheetDetail(row: any) {
const res = await getSheetDetail(row.id)
if (isResError(res)) return
sheetDetail.value = res.data
isShowDetail.value = true
curSheetDetailName.value = row.name
}
watch(
() => props.deviceId,
newVal => {
if (newVal) {
loadDeviceTestSheet()
}
}
)
</script>
<style scoped lang="scss">
.device-test-info-from {
height: 100%;
width: 100%;
.template-table {
display: flex;
column-gap: 24px;
.table {
width: 1090px;
height: 100%;
}
.save-button {
margin-top: auto;
margin-bottom: 12px;
}
}
}
</style>