提交
This commit is contained in:
1 parent
05684ba2a4
commit
7fbf71b6e1
150 files changed
+19834
-12611
No files matched your search
@@ -0,0 +1,42 @@
|
||||
import request from '@/utils/http'
|
||||
|
||||
type PageList<T> = {
|
||||
list: T[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}
|
||||
|
||||
/** 查询列表(联查 sample_reception + sms_notification) */
|
||||
export function fetchSampleSmsNotificationList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
acceptConclusion?: string
|
||||
smsNotified?: string
|
||||
}) {
|
||||
return request.get<PageList<Record<string, unknown>>>({
|
||||
url: '/web/admin/sample-sms-notifications/list',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/** 切换通知状态 */
|
||||
export function fetchToggleSmsNotified(
|
||||
id: string,
|
||||
data: { smsNotified: number; sampleReceptionId?: string }
|
||||
) {
|
||||
return request.put({
|
||||
url: `/web/admin/sample-sms-notifications/${id}/toggle-status`,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/** 生成短信内容 */
|
||||
export function fetchGenerateSms(id: string, sampleReceptionId?: string) {
|
||||
return request.post<{ smsContent: string }>({
|
||||
url: `/web/admin/sample-sms-notifications/${id}/generate-sms`,
|
||||
params: sampleReceptionId ? { sampleReceptionId } : undefined
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import request from '@/utils/http'
|
||||
|
||||
type PageList<T> = {
|
||||
list: T[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}
|
||||
|
||||
/** 查询列表(联查 storage_release_review + sms_notification) */
|
||||
export function fetchStorageEntrySmsList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
storageStatus?: string
|
||||
smsNotified?: string
|
||||
}) {
|
||||
return request.get<PageList<Record<string, unknown>>>({
|
||||
url: '/web/admin/storage-entry-sms-notifications/list',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/** 切换通知状态 */
|
||||
export function fetchToggleStorageEntrySmsNotified(
|
||||
id: string,
|
||||
data: { smsNotified: number; storageReviewId?: string }
|
||||
) {
|
||||
return request.put({
|
||||
url: `/web/admin/storage-entry-sms-notifications/${id}/toggle-status`,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/** 生成短信内容 */
|
||||
export function fetchGenerateStorageEntrySms(id: string, storageReviewId?: string) {
|
||||
return request.post<{ smsContent: string }>({
|
||||
url: `/web/admin/storage-entry-sms-notifications/${id}/generate-sms`,
|
||||
params: storageReviewId ? { storageReviewId } : undefined
|
||||
})
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
import request from '@/utils/http'
|
||||
import type { QcWorkOrderReceptionDetail } from '@/api/qc-work-order'
|
||||
|
||||
type PageList<T> = {
|
||||
list: T[]
|
||||
@@ -24,6 +25,12 @@ export type StorageReleaseReview = {
|
||||
reviewTime?: string
|
||||
storageStatus?: string
|
||||
storageStatusLabel?: string
|
||||
sampleTypeName?: string
|
||||
handlerName?: string
|
||||
receptionTime?: string
|
||||
motherName?: string
|
||||
protocolStatus?: string
|
||||
protocolStatusLabel?: string
|
||||
storageBy?: string
|
||||
storageByName?: string
|
||||
storageTime?: string
|
||||
@@ -77,6 +84,7 @@ export type QcInfoTask = {
|
||||
export type QcInfo = {
|
||||
workOrderNo?: string
|
||||
workOrderStatus?: string
|
||||
workOrderStatusLabel?: string
|
||||
tasks?: QcInfoTask[]
|
||||
}
|
||||
|
||||
@@ -93,6 +101,7 @@ export type ProductionInfoTask = {
|
||||
export type ProductionInfo = {
|
||||
workOrderNo?: string
|
||||
workOrderStatus?: string
|
||||
workOrderStatusLabel?: string
|
||||
tasks?: ProductionInfoTask[]
|
||||
}
|
||||
|
||||
@@ -101,6 +110,7 @@ export type StorageReleaseReviewDetail = {
|
||||
protocolInfo?: ProtocolInfo
|
||||
transportInfo?: TransportInfo
|
||||
receptionInfo?: ReceptionInfo
|
||||
reception?: QcWorkOrderReceptionDetail
|
||||
qcInfo?: QcInfo
|
||||
productionInfo?: ProductionInfo
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -63,7 +63,7 @@
|
||||
{{ row.qty != null && row.qty !== '' ? row.qty : '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位" width="72" align="center" header-align="center">
|
||||
<el-table-column label="单位" min-width="72" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.unit || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" min-width="140" align="center" header-align="center">
|
||||
|
||||
@@ -0,0 +1,317 @@
|
||||
<!-- 样本查看 — 生产信息卡片(协议单查看弹窗复用) -->
|
||||
<template>
|
||||
<div class="sample-card__section sample-card__section--production">
|
||||
<div class="sample-card__section-label">生产信息</div>
|
||||
|
||||
<div v-if="!productionInfo" class="sample-production-empty">暂无生产信息</div>
|
||||
|
||||
<template v-else>
|
||||
<div class="production-work-order-row">
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">工单号</span>
|
||||
<span class="qc-kv__value qc-kv__value--code">{{
|
||||
productionInfo.workOrderNo || '—'
|
||||
}}</span>
|
||||
</div>
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">工单状态</span>
|
||||
<span class="qc-kv__value">
|
||||
<el-tag
|
||||
:type="productionWorkOrderStatusTagType(productionInfo.workOrderStatus || '')"
|
||||
size="small"
|
||||
>
|
||||
{{
|
||||
productionInfo.workOrderStatusLabel ||
|
||||
productionWorkOrderStatusLabel(productionInfo.workOrderStatus || '')
|
||||
}}
|
||||
</el-tag>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="productionInfo.workOrderStatus === 'dpz' && !productionInfo.tasks?.length"
|
||||
class="sample-production-hint"
|
||||
>
|
||||
工单待配置生产任务
|
||||
</div>
|
||||
|
||||
<div v-if="productionInfo.tasks?.length" class="production-task-cards">
|
||||
<div v-for="task in productionInfo.tasks" :key="task.id" class="production-task-card">
|
||||
<div class="production-task-card__header">
|
||||
<span class="production-task-card__name">{{
|
||||
task.taskName || task.taskNo || '—'
|
||||
}}</span>
|
||||
<el-tag :type="productionTaskStatusTagType(task.taskStatus || '')" size="small">
|
||||
{{ task.taskStatusLabel || productionTaskStatusLabel(task.taskStatus || '') }}
|
||||
</el-tag>
|
||||
</div>
|
||||
<div class="production-task-card__body">
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">任务号</span>
|
||||
<span class="qc-kv__value">{{ task.taskNo || '—' }}</span>
|
||||
</div>
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">开始时间</span>
|
||||
<span class="qc-kv__value">{{ task.startedTime || '—' }}</span>
|
||||
</div>
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">完成时间</span>
|
||||
<span class="qc-kv__value">{{ task.completedTime || '—' }}</span>
|
||||
</div>
|
||||
<!-- 输入信息 -->
|
||||
<div v-if="task.inputs?.length" class="production-task-card__io">
|
||||
<div class="production-task-card__io-label">输入</div>
|
||||
<div class="production-task-card__io-items">
|
||||
<div v-for="(inp, idx) in task.inputs" :key="'in-' + idx" class="io-item">
|
||||
<el-tag type="info" size="small" class="io-item__type">{{
|
||||
inputTypeLabel(inp.inputType)
|
||||
}}</el-tag>
|
||||
<span class="io-item__name">{{ inp.inputName || inp.inputCode || '—' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 输出信息 -->
|
||||
<div v-if="task.outputs?.length" class="production-task-card__io">
|
||||
<div class="production-task-card__io-label">输出</div>
|
||||
<div class="production-task-card__io-items">
|
||||
<div v-for="(out, idx) in task.outputs" :key="'out-' + idx" class="io-item">
|
||||
<el-tag type="success" size="small" class="io-item__type">{{
|
||||
outputTypeLabel(out.outputType)
|
||||
}}</el-tag>
|
||||
<span class="io-item__name">{{ out.outputName || out.outputCode || '—' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-else-if="productionInfo.workOrderStatus !== 'dpz'" class="sample-production-hint">
|
||||
暂无生产任务
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
export type ProductionTaskInput = {
|
||||
inputType?: string
|
||||
inputCode?: string
|
||||
inputName?: string
|
||||
}
|
||||
|
||||
export type ProductionTaskOutput = {
|
||||
outputType?: string
|
||||
outputCode?: string
|
||||
outputName?: string
|
||||
}
|
||||
|
||||
export type ProductionTask = {
|
||||
id?: string
|
||||
taskNo?: string
|
||||
taskName?: string
|
||||
taskStatus?: string
|
||||
taskStatusLabel?: string
|
||||
startedTime?: string
|
||||
completedTime?: string
|
||||
inputs?: ProductionTaskInput[]
|
||||
outputs?: ProductionTaskOutput[]
|
||||
}
|
||||
|
||||
export type ProductionInfo = {
|
||||
workOrderNo?: string
|
||||
workOrderStatus?: string
|
||||
workOrderStatusLabel?: string
|
||||
tasks?: ProductionTask[]
|
||||
}
|
||||
|
||||
const PRODUCTION_WORK_ORDER_STATUS_LABELS: Record<string, string> = {
|
||||
dpz: '待配置',
|
||||
jxz: '进行中',
|
||||
ywc: '已完成'
|
||||
}
|
||||
|
||||
const PRODUCTION_TASK_STATUS_LABELS: Record<string, string> = {
|
||||
dpz: '待配置',
|
||||
dzx: '待执行',
|
||||
jxz: '执行中',
|
||||
ywc: '已完成'
|
||||
}
|
||||
|
||||
defineProps<{
|
||||
productionInfo?: ProductionInfo | null
|
||||
}>()
|
||||
|
||||
function productionWorkOrderStatusLabel(status: string) {
|
||||
return PRODUCTION_WORK_ORDER_STATUS_LABELS[status] || status || '—'
|
||||
}
|
||||
|
||||
function productionWorkOrderStatusTagType(status: string) {
|
||||
if (status === 'ywc') return 'success' as const
|
||||
if (status === 'jxz') return 'warning' as const
|
||||
return 'info' as const
|
||||
}
|
||||
|
||||
function productionTaskStatusLabel(status: string) {
|
||||
return PRODUCTION_TASK_STATUS_LABELS[status] || status || '—'
|
||||
}
|
||||
|
||||
function productionTaskStatusTagType(status: string) {
|
||||
if (status === 'ywc') return 'success' as const
|
||||
if (status === 'jxz') return 'warning' as const
|
||||
if (status === 'dzx') return 'info' as const
|
||||
return 'info' as const
|
||||
}
|
||||
|
||||
function inputTypeLabel(type?: string) {
|
||||
if (type === 'sample') return '样本'
|
||||
if (type === 'reagent') return '试剂'
|
||||
if (type === 'consumable') return '耗材'
|
||||
return type || '—'
|
||||
}
|
||||
|
||||
function outputTypeLabel(type?: string) {
|
||||
if (type === 'sample') return '样本'
|
||||
if (type === 'cell_product') return '细胞产品'
|
||||
if (type === 'other') return '其他'
|
||||
return type || '—'
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.sample-card__section--production {
|
||||
margin-top: 4px;
|
||||
padding-top: 14px;
|
||||
border-top: 1px dashed #e2e8f0;
|
||||
}
|
||||
|
||||
.sample-card__section-label {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #94a3b8;
|
||||
margin-bottom: 10px;
|
||||
letter-spacing: 0.3px;
|
||||
}
|
||||
|
||||
.sample-production-empty,
|
||||
.sample-production-hint {
|
||||
font-size: 13px;
|
||||
color: #94a3b8;
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.production-work-order-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: flex-start;
|
||||
gap: 12px 24px;
|
||||
margin-bottom: 12px;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
.production-work-order-row .qc-kv {
|
||||
flex: 1;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.production-task-cards {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.production-task-card {
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 8px;
|
||||
background: #fff;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.production-task-card__header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 8px;
|
||||
padding: 10px 12px;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
}
|
||||
|
||||
.production-task-card__name {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: #1e293b;
|
||||
text-align: left;
|
||||
flex: 1;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.production-task-card__body {
|
||||
padding: 10px 12px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.production-task-card__io {
|
||||
margin-top: 4px;
|
||||
padding-top: 8px;
|
||||
border-top: 1px dashed #f1f5f9;
|
||||
}
|
||||
|
||||
.production-task-card__io-label {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #94a3b8;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.production-task-card__io-items {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.io-item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
font-size: 12px;
|
||||
color: #475569;
|
||||
|
||||
.io-item__type {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.io-item__name {
|
||||
max-width: 120px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
.qc-kv {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 8px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.qc-kv__label {
|
||||
color: #94a3b8;
|
||||
flex-shrink: 0;
|
||||
min-width: 56px;
|
||||
}
|
||||
|
||||
.qc-kv__value {
|
||||
color: #1e293b;
|
||||
font-weight: 500;
|
||||
word-break: break-word;
|
||||
|
||||
&--code {
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,182 @@
|
||||
<!-- 样本查看 — 入库放行审核信息(协议单查看弹窗复用) -->
|
||||
<template>
|
||||
<div class="sample-card__section sample-card__section--storage-release">
|
||||
<div class="sample-card__section-label">入库放行审核信息</div>
|
||||
|
||||
<div v-if="!storageReleaseInfo" class="sample-storage-release-empty">
|
||||
暂无入库放行审核信息
|
||||
</div>
|
||||
|
||||
<template v-else>
|
||||
<div class="storage-release-info-grid">
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">审核结论</span>
|
||||
<span class="qc-kv__value">
|
||||
<el-tag
|
||||
v-if="storageReleaseInfo.reviewConclusion"
|
||||
:type="storageReleaseInfo.reviewConclusion === 'tg' ? 'success' : 'danger'"
|
||||
size="small"
|
||||
>
|
||||
{{
|
||||
storageReleaseInfo.reviewConclusionLabel ||
|
||||
conclusionLabel(storageReleaseInfo.reviewConclusion)
|
||||
}}
|
||||
</el-tag>
|
||||
<span v-else class="qc-kv__muted">待审核</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">审核人</span>
|
||||
<span class="qc-kv__value">{{ storageReleaseInfo.reviewByName || '—' }}</span>
|
||||
</div>
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">审核时间</span>
|
||||
<span class="qc-kv__value">{{ storageReleaseInfo.reviewTime || '—' }}</span>
|
||||
</div>
|
||||
<div v-if="storageReleaseInfo.reviewRemark" class="qc-kv qc-kv--full">
|
||||
<span class="qc-kv__label">审核备注</span>
|
||||
<span class="qc-kv__value qc-kv__value--muted">{{
|
||||
storageReleaseInfo.reviewRemark
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="attachmentFiles.length" class="storage-release-attachments">
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">审核附件</span>
|
||||
<span class="qc-kv__value">
|
||||
<ProtocolAttachmentReadonly
|
||||
:files="attachmentFiles"
|
||||
@preview="handlePreview"
|
||||
@download="handleDownload"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import ProtocolAttachmentReadonly from '@/views/cell-storage/protocol/ProtocolAttachmentReadonly.vue'
|
||||
import { downloadAttachmentFile } from '@/utils/download-attachment'
|
||||
|
||||
export type StorageReleaseInfo = {
|
||||
reviewConclusion?: string
|
||||
reviewConclusionLabel?: string
|
||||
reviewByName?: string
|
||||
reviewTime?: string
|
||||
reviewRemark?: string
|
||||
reviewAttachments?: string
|
||||
}
|
||||
|
||||
const props = defineProps<{
|
||||
storageReleaseInfo?: StorageReleaseInfo | null
|
||||
}>()
|
||||
|
||||
const minioBaseUrl = (import.meta.env.VITE_MINIO_BASE_URL || '').replace(/\/$/, '')
|
||||
|
||||
const attachmentFiles = computed(() => {
|
||||
const urls = String(props.storageReleaseInfo?.reviewAttachments || '').trim()
|
||||
if (!urls) return []
|
||||
return urls
|
||||
.split(',')
|
||||
.map((u) => u.trim())
|
||||
.filter(Boolean)
|
||||
.map((fileUrl, i) => ({
|
||||
id: `srr_${i}`,
|
||||
fileUrl,
|
||||
fileName: fileUrl.split('/').pop() || `附件${i + 1}`
|
||||
}))
|
||||
})
|
||||
|
||||
function conclusionLabel(conclusion: string) {
|
||||
if (conclusion === 'tg') return '通过'
|
||||
if (conclusion === 'btg') return '不通过'
|
||||
return conclusion
|
||||
}
|
||||
|
||||
function fullFileUrl(suffix: string) {
|
||||
if (!suffix) return ''
|
||||
if (suffix.startsWith('http://') || suffix.startsWith('https://') || suffix.startsWith('/'))
|
||||
return suffix
|
||||
return minioBaseUrl ? `${minioBaseUrl}/${suffix.replace(/^\//, '')}` : suffix
|
||||
}
|
||||
|
||||
function handlePreview(file: Record<string, any>) {
|
||||
const url = fullFileUrl(String(file.fileUrl || ''))
|
||||
if (url) window.open(url, '_blank')
|
||||
}
|
||||
|
||||
function handleDownload(file: Record<string, any>) {
|
||||
downloadAttachmentFile(file, { fullFileUrl })
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.sample-card__section--storage-release {
|
||||
margin-top: 4px;
|
||||
padding-top: 14px;
|
||||
border-top: 1px dashed #e2e8f0;
|
||||
}
|
||||
|
||||
.sample-card__section-label {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #94a3b8;
|
||||
margin-bottom: 10px;
|
||||
letter-spacing: 0.3px;
|
||||
}
|
||||
|
||||
.sample-storage-release-empty {
|
||||
font-size: 13px;
|
||||
color: #94a3b8;
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.storage-release-info-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: flex-start;
|
||||
gap: 12px 24px;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
.storage-release-attachments {
|
||||
margin-top: 8px;
|
||||
padding-top: 8px;
|
||||
border-top: 1px dashed #f1f5f9;
|
||||
}
|
||||
|
||||
.qc-kv {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 8px;
|
||||
font-size: 12px;
|
||||
|
||||
&--full {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.qc-kv__label {
|
||||
color: #94a3b8;
|
||||
flex-shrink: 0;
|
||||
min-width: 56px;
|
||||
}
|
||||
|
||||
.qc-kv__value {
|
||||
color: #1e293b;
|
||||
font-weight: 500;
|
||||
word-break: break-word;
|
||||
|
||||
&--muted {
|
||||
color: #64748b;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
|
||||
.qc-kv__muted {
|
||||
color: #94a3b8;
|
||||
font-weight: 400;
|
||||
}
|
||||
</style>
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_consumable_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/consumable/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_reagent_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/reagent/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_release_review_ts", "label": "storage-release-review.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L1"}, {"id": "api_storage_release_review_fetchstoragereleasereviewlist", "label": "fetchStorageReleaseReviewList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L118"}, {"id": "api_storage_release_review_fetchstoragereleasereviewdetail", "label": "fetchStorageReleaseReviewDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L132"}, {"id": "api_storage_release_review_submitstoragereleasereview", "label": "submitStorageReleaseReview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L138"}, {"id": "api_storage_release_review_batchreviewstoragerelease", "label": "batchReviewStorageRelease()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L152"}, {"id": "api_storage_release_review_storesample", "label": "storeSample()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L164"}, {"id": "api_storage_release_review_batchstoresample", "label": "batchStoreSample()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L170"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_release_review_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_release_review_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_release_review_ts", "target": "api_storage_release_review_fetchstoragereleasereviewlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L118", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_release_review_ts", "target": "api_storage_release_review_fetchstoragereleasereviewdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L132", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_release_review_ts", "target": "api_storage_release_review_submitstoragereleasereview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L138", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_release_review_ts", "target": "api_storage_release_review_batchreviewstoragerelease", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L152", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_release_review_ts", "target": "api_storage_release_review_storesample", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L164", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_storage_release_review_ts", "target": "api_storage_release_review_batchstoresample", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L170", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_storage_release_review_fetchstoragereleasereviewlist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L126"}, {"caller_nid": "api_storage_release_review_fetchstoragereleasereviewdetail", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/storage-release-review.ts", "source_location": "L133"}, {"caller_nid": "api_storage_release_revLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "label": "StorageReleaseViewDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L1"}, {"id": "storage_release_review_storagereleaseviewdialog_formatmetric", "label": "formatMetric()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L211"}, {"id": "storage_release_review_storagereleaseviewdialog_attachmentfullurl", "label": "attachmentFullUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L428"}, {"id": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentpreview", "label": "handleReceptionAttachmentPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L435"}, {"id": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentdownload", "label": "handleReceptionAttachmentDownload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L440"}, {"id": "storage_release_review_storagereleaseviewdialog_handleattachmentpreview", "label": "handleAttachmentPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L444"}, {"id": "storage_release_review_storagereleaseviewdialog_handleattachmentdownload", "label": "handleAttachmentDownload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L448"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_formatmetric", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L211", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_attachmentfullurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L428", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L435", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L440", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_handleattachmentpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L444", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_handleattachmentdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L448", "weightLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
@@ -251,6 +251,20 @@ export const sqxpAdminRoutes: AppRouteRecord[] = [
|
||||
component: '/cell-storage/refund-confirm/index',
|
||||
meta: { title: '退费确认(财务)', keepAlive: true, menuCode: 'biz:cellStorageRefundConfirm:list' }
|
||||
},
|
||||
{
|
||||
id: '50000000000000000000000000000011',
|
||||
name: 'CellStorageSampleReceptionInfo',
|
||||
path: 'sample-reception-info',
|
||||
component: '/cell-storage/sample-reception-info/index',
|
||||
meta: { title: '样本接收信息', keepAlive: true, menuCode: 'cell-storage:sample-reception-info:list' }
|
||||
},
|
||||
{
|
||||
id: '50000000000000000000000000000012',
|
||||
name: 'CellStorageStorageEntryInfo',
|
||||
path: 'storage-entry-info',
|
||||
component: '/cell-storage/storage-entry-info/index',
|
||||
meta: { title: '样本入库信息', keepAlive: true, menuCode: 'cell-storage:storage-entry-info:list' }
|
||||
},
|
||||
{
|
||||
id: '50000000000000000000000000000006',
|
||||
name: 'CellStorageStorageCert',
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -85,14 +85,14 @@
|
||||
<el-table-column
|
||||
prop="storageYears"
|
||||
label="存储年限(年)"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="storagePrice"
|
||||
label="存储价格(元)"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -109,7 +109,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="320"
|
||||
min-width="320"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -95,11 +95,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -114,7 +114,7 @@
|
||||
<el-table-column
|
||||
prop="issued"
|
||||
label="是否下发"
|
||||
width="80"
|
||||
min-width="80"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -159,7 +159,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="320"
|
||||
min-width="320"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -117,7 +117,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="400"
|
||||
min-width="400"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
@@ -231,11 +231,11 @@
|
||||
max-height="360"
|
||||
@selection-change="onHospitalSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -261,7 +261,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="260"
|
||||
min-width="260"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -63,11 +63,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -79,7 +79,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column prop="sex" label="性别" width="72" align="center" header-align="center">
|
||||
<el-table-column prop="sex" label="性别" min-width="72" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ sexLabel(row.sex) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
@@ -92,7 +92,7 @@
|
||||
<el-table-column
|
||||
prop="age"
|
||||
label="年龄"
|
||||
width="72"
|
||||
min-width="72"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -118,7 +118,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="320"
|
||||
min-width="320"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1"
|
||||
@@ -72,7 +72,7 @@
|
||||
<el-table-column prop="companyAddress" label="地址" min-width="180" align="center" header-align="center" />
|
||||
<el-table-column prop="contactName" label="联系人" min-width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="contactPhone" label="联系电话" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="tag" label="状态" width="90" align="center" header-align="center">
|
||||
<el-table-column prop="tag" label="状态" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status == '1' ? 'success' : 'info'" size="small">{{ row.status == '1' ? '正常' : '停用' }}</el-tag>
|
||||
</template>
|
||||
@@ -196,13 +196,13 @@
|
||||
max-height="460"
|
||||
@selection-change="onItemSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="index" label="序号" width="68" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column prop="projectName" label="险种名称" min-width="160" align="center" header-align="center" />
|
||||
<el-table-column prop="projectFee" label="险种费用(元)" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="projectFee" label="险种费用(元)" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.projectFee != null ? `¥${row.projectFee}` : '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="90" align="center" header-align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status == '1' ? 'success' : 'info'" size="small">{{ row.status == '1' ? '正常' : '停用' }}</el-tag>
|
||||
</template>
|
||||
|
||||
@@ -106,11 +106,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -125,7 +125,7 @@
|
||||
<el-table-column
|
||||
prop="sampleCodeType"
|
||||
label="编码类型"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -134,7 +134,7 @@
|
||||
<el-table-column
|
||||
prop="issued"
|
||||
label="是否下发"
|
||||
width="80"
|
||||
min-width="80"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -179,7 +179,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="320"
|
||||
min-width="320"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -87,11 +87,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1"
|
||||
@@ -103,6 +103,19 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="protocolStatus"
|
||||
label="协议状态"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="protocolStatusTagType(String(row.protocolStatus || ''))" size="small">{{
|
||||
protocolStatusLabel(String(row.protocolStatus || ''))
|
||||
}}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="motherName"
|
||||
label="母亲姓名"
|
||||
@@ -166,7 +179,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="260"
|
||||
min-width="260"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
@@ -461,6 +474,10 @@
|
||||
fetchInsuranceCompanyList,
|
||||
fetchInsuranceProjectPrices
|
||||
} from '@/api/admin'
|
||||
import {
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
} from '@/utils/status-tag-registry'
|
||||
|
||||
defineOptions({ name: 'CellStorageFullmoonTodo' })
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -76,11 +76,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -506,15 +506,15 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
/>
|
||||
<el-table-column prop="materialCode" label="物料编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="materialName" label="物料名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="unit" label="单位" width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="unit" label="单位" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.stockQty }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="入库数量" min-width="130" align="center" header-align="center">
|
||||
@@ -534,7 +534,7 @@
|
||||
<el-input v-model="row.remark" placeholder="可选" clearable class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="batchStockInLines.splice($index, 1)">
|
||||
移除
|
||||
@@ -670,15 +670,15 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
/>
|
||||
<el-table-column prop="materialCode" label="物料编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="materialName" label="物料名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="unit" label="单位" width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="unit" label="单位" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.stockQty }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="出库数量" min-width="130" align="center" header-align="center">
|
||||
@@ -699,7 +699,7 @@
|
||||
<el-input v-model="row.remark" placeholder="可选" clearable class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="batchStockOutLines.splice($index, 1)">
|
||||
移除
|
||||
|
||||
@@ -31,11 +31,11 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap payment-confirm-table-wrap">
|
||||
<el-table class="list-table" :data="tableData" v-loading="loading" stripe row-key="id">
|
||||
<el-table class="list-table" :data="tableData" v-loading="loading" stripe row-key="id" @row-dblclick="handleRowDblClick">
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -59,33 +59,33 @@
|
||||
>
|
||||
<template #default="{ row }">{{ maskIdCard(row.newbornIdCard) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="protocolStatus" label="协议状态" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="protocolStatus" label="协议状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="protocolStatusTagType(String(row.protocolStatus || ''))" size="small">{{ protocolStatusLabel(String(row.protocolStatus || '')) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="payMode" label="缴费方式" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="payMode" label="缴费方式" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ payModeLabel(String(row.payMode || '')) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="installmentNo" label="期数" width="80" align="center" header-align="center">
|
||||
<el-table-column prop="installmentNo" label="期数" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.installmentNo ?? '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="installmentDueDate" label="应缴费时间" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="installmentDueDate" label="应缴费时间" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ formatPaymentDueDate(row.installmentDueDate) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="dueAmount" label="应缴金额(元)" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="dueAmount" label="应缴金额(元)" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ formatPaymentAmount(row.dueAmount) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="transferAmount" label="实缴金额(元)" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="transferAmount" label="实缴金额(元)" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ formatPaymentAmount(row.transferAmount) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="transferType" label="转账方式" width="110" align="center" header-align="center">
|
||||
<el-table-column prop="transferType" label="转账方式" min-width="110" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ transferTypeLabel(String(row.transferType || '')) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="transferTime" label="转账时间" min-width="170" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.transferTime || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="payStatus" label="状态" width="110" align="center" header-align="center">
|
||||
<el-table-column prop="payStatus" label="状态" min-width="110" align="center" header-align="center">
|
||||
<template #default>
|
||||
<el-tag :type="activeTab === 'pending' ? 'warning' : 'success'" size="small">
|
||||
{{ activeTab === 'pending' ? '缴费确认中' : '已缴费' }}
|
||||
@@ -346,6 +346,11 @@
|
||||
viewDialogVisible.value = true
|
||||
}
|
||||
|
||||
/** 双击行:非待确认 tab 时等同于点击「查看确认信息」 */
|
||||
function handleRowDblClick(row: Record<string, unknown>) {
|
||||
if (activeTab.value !== 'pending') openViewConfirm(row)
|
||||
}
|
||||
|
||||
async function submitConfirm() {
|
||||
if (!currentDetailId.value) return
|
||||
if (attachments.value.some((f) => f._uploading)) {
|
||||
|
||||
@@ -91,18 +91,19 @@
|
||||
row-key="id"
|
||||
:row-class-name="paymentRowClassName"
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column
|
||||
v-if="activeTab === 'dfj' || activeTab === 'yjf'"
|
||||
type="selection"
|
||||
width="55"
|
||||
min-width="55"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -161,7 +162,7 @@
|
||||
<el-table-column
|
||||
prop="protocolStatus"
|
||||
label="协议状态"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -172,7 +173,7 @@
|
||||
<el-table-column
|
||||
prop="payMode"
|
||||
label="缴费方式"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -183,14 +184,14 @@
|
||||
<el-table-column
|
||||
prop="installmentNo"
|
||||
label="期数"
|
||||
width="80"
|
||||
min-width="80"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="installmentDueDate"
|
||||
label="应缴费时间"
|
||||
width="130"
|
||||
min-width="130"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -201,7 +202,7 @@
|
||||
<el-table-column
|
||||
prop="dueAmount"
|
||||
label="应缴金额(元)"
|
||||
width="130"
|
||||
min-width="130"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -212,7 +213,7 @@
|
||||
<el-table-column
|
||||
prop="transferAmount"
|
||||
label="实缴金额(元)"
|
||||
width="130"
|
||||
min-width="130"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -223,7 +224,7 @@
|
||||
<el-table-column
|
||||
prop="transferType"
|
||||
label="转账方式"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -245,7 +246,7 @@
|
||||
<el-table-column
|
||||
prop="payStatus"
|
||||
label="状态"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
|
||||
@@ -89,11 +89,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -108,7 +108,7 @@
|
||||
<el-table-column
|
||||
prop="protocolStatus"
|
||||
label="状态"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -121,7 +121,7 @@
|
||||
<el-table-column
|
||||
prop="registerDate"
|
||||
label="登记日期"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -156,7 +156,7 @@
|
||||
<el-table-column
|
||||
prop="newbornSex"
|
||||
label="新生儿性别"
|
||||
width="110"
|
||||
min-width="110"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -167,7 +167,7 @@
|
||||
<el-table-column
|
||||
prop="deliveryMode"
|
||||
label="分娩方式"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -178,7 +178,7 @@
|
||||
<el-table-column
|
||||
prop="newbornWeightGram"
|
||||
label="新生儿体重(克)"
|
||||
width="140"
|
||||
min-width="140"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -73,11 +73,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -92,7 +92,7 @@
|
||||
<el-table-column
|
||||
prop="protocolStatus"
|
||||
label="状态"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -105,7 +105,7 @@
|
||||
<el-table-column
|
||||
prop="registerDate"
|
||||
label="登记日期"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -140,7 +140,7 @@
|
||||
<el-table-column
|
||||
prop="newbornSex"
|
||||
label="新生儿性别"
|
||||
width="110"
|
||||
min-width="110"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -151,7 +151,7 @@
|
||||
<el-table-column
|
||||
prop="deliveryMode"
|
||||
label="分娩方式"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -162,7 +162,7 @@
|
||||
<el-table-column
|
||||
prop="newbornWeightGram"
|
||||
label="新生儿体重(克)"
|
||||
width="140"
|
||||
min-width="140"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -210,7 +210,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="320"
|
||||
min-width="320"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -31,11 +31,11 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap refund-confirm-table-wrap">
|
||||
<el-table class="list-table" :data="tableData" v-loading="loading" stripe row-key="id">
|
||||
<el-table class="list-table" :data="tableData" v-loading="loading" stripe row-key="id" @row-dblclick="handleRowDblClick">
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -59,33 +59,33 @@
|
||||
>
|
||||
<template #default="{ row }">{{ maskIdCard(row.newbornIdCard) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="protocolStatus" label="协议状态" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="protocolStatus" label="协议状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="protocolStatusTagType(String(row.protocolStatus || ''))" size="small">{{ protocolStatusLabel(String(row.protocolStatus || '')) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="payMode" label="缴费方式" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="payMode" label="缴费方式" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ payModeLabel(String(row.payMode || '')) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="installmentNo" label="期数" width="80" align="center" header-align="center">
|
||||
<el-table-column prop="installmentNo" label="期数" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.installmentNo ?? '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="installmentDueDate" label="应缴费时间" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="installmentDueDate" label="应缴费时间" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ formatPaymentDueDate(row.installmentDueDate) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="dueAmount" label="应缴金额(元)" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="dueAmount" label="应缴金额(元)" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ formatPaymentAmount(row.dueAmount) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="transferAmount" label="实缴金额(元)" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="transferAmount" label="实缴金额(元)" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ formatPaymentAmount(row.transferAmount) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="transferType" label="转账方式" width="110" align="center" header-align="center">
|
||||
<el-table-column prop="transferType" label="转账方式" min-width="110" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ transferTypeLabel(String(row.transferType || '')) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="transferTime" label="转账时间" min-width="170" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.transferTime || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="refundAmount" label="退费金额(元)" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="refundAmount" label="退费金额(元)" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ formatPaymentAmount(row.refundAmount) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
@@ -98,7 +98,7 @@
|
||||
>
|
||||
<template #default="{ row }">{{ row.refundRemark || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="payStatus" label="状态" width="110" align="center" header-align="center">
|
||||
<el-table-column prop="payStatus" label="状态" min-width="110" align="center" header-align="center">
|
||||
<template #default>
|
||||
<el-tag :type="activeTab === 'pending' ? 'warning' : 'success'" size="small">
|
||||
{{ activeTab === 'pending' ? '退费确认中' : '已退费' }}
|
||||
@@ -363,6 +363,11 @@
|
||||
viewDialogVisible.value = true
|
||||
}
|
||||
|
||||
/** 双击行:非待确认 tab 时等同于点击「查看确认信息」 */
|
||||
function handleRowDblClick(row: Record<string, unknown>) {
|
||||
if (activeTab.value !== 'pending') openViewConfirm(row)
|
||||
}
|
||||
|
||||
async function submitConfirm() {
|
||||
if (!currentDetailId.value) return
|
||||
if (attachments.value.some((f) => f._uploading)) {
|
||||
|
||||
@@ -0,0 +1,245 @@
|
||||
<!-- 样本接收信息 -->
|
||||
<template>
|
||||
<div class="page-container">
|
||||
<header class="page-head">
|
||||
<h1>样本接收信息</h1>
|
||||
<p class="page-desc">查看样本接收信息,提取短信通知内容并管理通知状态。</p>
|
||||
</header>
|
||||
|
||||
<section class="panel">
|
||||
<div class="panel-top">
|
||||
<h2 class="title-bar-heading">样本接收列表</h2>
|
||||
</div>
|
||||
|
||||
<div class="filter-block">
|
||||
<el-form :model="searchForm" class="filter-form" @submit.prevent>
|
||||
<div class="filter-grid">
|
||||
<el-form-item label="关键词">
|
||||
<el-input v-model="searchForm.keyword" placeholder="协议号/姓名/样本编码" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="接收结论">
|
||||
<el-select v-model="searchForm.acceptConclusion" placeholder="全部" clearable style="width: 100%">
|
||||
<el-option label="接收" value="js" />
|
||||
<el-option label="拒收" value="bj" />
|
||||
<el-option label="待接收确认" value="dqr" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知状态">
|
||||
<el-select v-model="searchForm.smsNotified" placeholder="全部" clearable style="width: 100%">
|
||||
<el-option label="已通知" value="1" />
|
||||
<el-option label="未通知" value="0" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="filter-actions-row">
|
||||
<div class="filter-actions-end">
|
||||
<el-button class="btn-ghost" @click="handleReset">
|
||||
<el-icon><RefreshLeft /></el-icon>重置
|
||||
</el-button>
|
||||
<el-button class="btn-main" type="primary" @click="handleSearch">
|
||||
<el-icon><Search /></el-icon>搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
stripe
|
||||
row-key="id"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1"
|
||||
/>
|
||||
<el-table-column prop="protocolNo" label="协议号" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
prop="protocolStatus"
|
||||
label="协议状态"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="protocolStatusTagType(String(row.protocolStatus || ''))" size="small">{{
|
||||
protocolStatusLabel(String(row.protocolStatus || ''))
|
||||
}}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="motherName" label="母亲姓名" min-width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="newbornName" label="新生儿姓名" min-width="110" align="center" header-align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="sampleCode" label="样本编码" min-width="130" align="center" header-align="center" />
|
||||
<el-table-column prop="sampleTypeName" label="样本类型" min-width="110" align="center" header-align="center" />
|
||||
<el-table-column prop="receptionTime" label="接收时间" min-width="170" align="center" header-align="center" />
|
||||
<el-table-column prop="acceptConclusion" label="接收结论" min-width="110" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag
|
||||
:type="row.acceptConclusion === 'js' ? 'success' : row.acceptConclusion === 'bj' ? 'danger' : 'warning'"
|
||||
size="small"
|
||||
>
|
||||
{{ row.acceptConclusionLabel || (row.acceptConclusion === 'js' ? '接收' : row.acceptConclusion === 'bj' ? '拒收' : '待接收确认') }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="smsNotified" label="通知状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.smsNotified == 1 ? 'success' : 'info'" size="small">
|
||||
{{ row.smsNotified == 1 ? '已通知' : '未通知' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" min-width="260" fixed="right" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button class="btn-op-item primary" @click="handleView(row)">
|
||||
<el-icon><View /></el-icon>查看
|
||||
</el-button>
|
||||
<el-button class="btn-op-item" @click="handleExtractSms(row)">
|
||||
<el-icon><ChatDotRound /></el-icon>提取短信
|
||||
</el-button>
|
||||
<el-button class="btn-op-item" @click="handleToggleNotified(row)">
|
||||
<el-icon><Bell /></el-icon>{{ row.smsNotified == 1 ? '标记未通知' : '标记已通知' }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination list-pager-bar">
|
||||
<el-pagination
|
||||
:current-page="pagination.page"
|
||||
:page-size="pagination.pageSize"
|
||||
:total="pagination.total"
|
||||
:page-sizes="[10, 20, 50]"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
@size-change="(val) => ((pagination.page = 1), (pagination.pageSize = val), loadData())"
|
||||
@current-change="(val) => ((pagination.page = val), loadData())"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ProtocolViewDialog
|
||||
v-model="viewVisible"
|
||||
:protocol-id="viewProtocolId"
|
||||
:list-row="viewRow"
|
||||
show-audit-history
|
||||
show-storage-cert
|
||||
show-fullmoon-insurance
|
||||
/>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Search, RefreshLeft, View, ChatDotRound, Bell } from '@element-plus/icons-vue'
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
import ProtocolViewDialog from '../protocol/ProtocolViewDialog.vue'
|
||||
import {
|
||||
fetchSampleSmsNotificationList,
|
||||
fetchToggleSmsNotified,
|
||||
fetchGenerateSms
|
||||
} from '@/api/sample-sms-notification'
|
||||
import { type CollectionProtocolRow } from '@/api/collection-protocol'
|
||||
import {
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
} from '@/utils/status-tag-registry'
|
||||
|
||||
defineOptions({ name: 'CellStorageSampleReceptionInfo' })
|
||||
|
||||
const searchForm = reactive({ keyword: '', acceptConclusion: '', smsNotified: '' })
|
||||
const tableData = ref<any[]>([])
|
||||
const loading = ref(false)
|
||||
const pagination = reactive({ page: 1, pageSize: 10, total: 0 })
|
||||
|
||||
const viewVisible = ref(false)
|
||||
const viewProtocolId = ref<string | null>(null)
|
||||
const viewRow = ref<CollectionProtocolRow | null>(null)
|
||||
|
||||
const { copy } = useClipboard()
|
||||
|
||||
async function loadData() {
|
||||
loading.value = true
|
||||
try {
|
||||
const result = await fetchSampleSmsNotificationList({
|
||||
page: pagination.page,
|
||||
pageSize: pagination.pageSize,
|
||||
keyword: searchForm.keyword || undefined,
|
||||
acceptConclusion: searchForm.acceptConclusion || undefined,
|
||||
smsNotified: searchForm.smsNotified || undefined
|
||||
})
|
||||
const res = (result as any) || {}
|
||||
tableData.value = res.list || []
|
||||
pagination.total = res.total || 0
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function handleSearch() {
|
||||
pagination.page = 1
|
||||
loadData()
|
||||
}
|
||||
|
||||
function handleReset() {
|
||||
Object.assign(searchForm, { keyword: '', acceptConclusion: '', smsNotified: '' })
|
||||
handleSearch()
|
||||
}
|
||||
|
||||
function handleView(row: Record<string, unknown>) {
|
||||
const pid = String(row.collectionProtocolId || row.protocolId || '')
|
||||
if (!pid) {
|
||||
ElMessage.warning('缺少关联协议单,无法查看')
|
||||
return
|
||||
}
|
||||
viewProtocolId.value = pid
|
||||
viewRow.value = {
|
||||
id: pid,
|
||||
protocolNo: row.protocolNo,
|
||||
motherName: row.motherName,
|
||||
newbornName: row.newbornName
|
||||
}
|
||||
viewVisible.value = true
|
||||
}
|
||||
|
||||
async function handleExtractSms(row: any) {
|
||||
try {
|
||||
const result = await fetchGenerateSms(row.id, row.sampleReceptionId)
|
||||
const content = (result as any)?.smsContent || ''
|
||||
if (!content) {
|
||||
ElMessage.warning('短信内容为空')
|
||||
return
|
||||
}
|
||||
await copy(content)
|
||||
ElMessage.success('短信内容已复制到剪贴板')
|
||||
} catch {
|
||||
ElMessage.error('提取短信失败')
|
||||
}
|
||||
}
|
||||
|
||||
async function handleToggleNotified(row: any) {
|
||||
const newVal = row.smsNotified == 1 ? 0 : 1
|
||||
try {
|
||||
await fetchToggleSmsNotified(row.id, {
|
||||
smsNotified: newVal,
|
||||
sampleReceptionId: row.sampleReceptionId
|
||||
})
|
||||
ElMessage.success(newVal === 1 ? '已标记为已通知' : '已标记为未通知')
|
||||
loadData()
|
||||
} catch {
|
||||
ElMessage.error('操作失败')
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
loadData()
|
||||
})
|
||||
</script>
|
||||
@@ -46,17 +46,31 @@
|
||||
stripe
|
||||
row-key="id"
|
||||
:row-class-name="storageCertRowClassName"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1"
|
||||
/>
|
||||
<el-table-column prop="protocolNo" label="采集协议号" width="160" align="center" header-align="center" />
|
||||
<el-table-column prop="motherName" label="母亲姓名" width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="protocolNo" label="采集协议号" min-width="160" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
prop="protocolStatus"
|
||||
label="协议状态"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="protocolStatusTagType(String(row.protocolStatus || ''))" size="small">{{
|
||||
protocolStatusLabel(String(row.protocolStatus || ''))
|
||||
}}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="motherName" label="母亲姓名" min-width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="motherPhone" label="母亲联系方式" min-width="130" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.motherPhone || '—' }}</template>
|
||||
</el-table-column>
|
||||
@@ -65,17 +79,17 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="newbornInfo" label="新生儿信息" min-width="200" align="center" header-align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="sampleInfo" label="样本信息" min-width="200" align="center" header-align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="storageInDate" label="入库日期" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="storageInDate" label="入库日期" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.storageInDate || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="makeStatus" label="制作状态" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="makeStatus" label="制作状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.makeStatus == '1' ? 'success' : 'warning'" size="small">
|
||||
{{ row.makeStatus == '1' ? '已制作' : '未制作' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="makeDate" label="制作日期" width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="makeDate" label="制作日期" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column label="操作" min-width="260" fixed="right" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button class="btn-op-item primary" @click="handleUpload(row)">
|
||||
@@ -284,6 +298,10 @@
|
||||
import { fetchUploadAttachment } from '@/api/business'
|
||||
import { downloadAttachmentFile } from '@/utils/download-attachment'
|
||||
import { maskIdCard } from '@/utils/mask-sensitive'
|
||||
import {
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
} from '@/utils/status-tag-registry'
|
||||
|
||||
interface CertAttachmentItem {
|
||||
id: string
|
||||
|
||||
@@ -0,0 +1,251 @@
|
||||
<!-- 样本入库信息 -->
|
||||
<template>
|
||||
<div class="page-container">
|
||||
<header class="page-head">
|
||||
<h1>样本入库信息</h1>
|
||||
<p class="page-desc">查看样本入库信息,提取短信通知内容并管理通知状态。</p>
|
||||
</header>
|
||||
|
||||
<section class="panel">
|
||||
<div class="panel-top">
|
||||
<h2 class="title-bar-heading">样本入库列表</h2>
|
||||
</div>
|
||||
|
||||
<div class="filter-block">
|
||||
<el-form :model="searchForm" class="filter-form" @submit.prevent>
|
||||
<div class="filter-grid">
|
||||
<el-form-item label="关键词">
|
||||
<el-input v-model="searchForm.keyword" placeholder="协议号/姓名/样本编码" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="入库状态">
|
||||
<el-select v-model="searchForm.storageStatus" placeholder="全部" clearable style="width: 100%">
|
||||
<el-option label="已入库" value="yrk" />
|
||||
<el-option label="拒绝入库" value="btg" />
|
||||
<el-option label="待入库确认" value="drk" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知状态">
|
||||
<el-select v-model="searchForm.smsNotified" placeholder="全部" clearable style="width: 100%">
|
||||
<el-option label="已通知" value="1" />
|
||||
<el-option label="未通知" value="0" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="filter-actions-row">
|
||||
<div class="filter-actions-end">
|
||||
<el-button class="btn-ghost" @click="handleReset">
|
||||
<el-icon><RefreshLeft /></el-icon>重置
|
||||
</el-button>
|
||||
<el-button class="btn-main" type="primary" @click="handleSearch">
|
||||
<el-icon><Search /></el-icon>搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
stripe
|
||||
row-key="id"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1"
|
||||
/>
|
||||
<el-table-column prop="protocolNo" label="协议号" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
prop="protocolStatus"
|
||||
label="协议状态"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="protocolStatusTagType(String(row.protocolStatus || ''))" size="small">{{
|
||||
protocolStatusLabel(String(row.protocolStatus || ''))
|
||||
}}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="motherName" label="母亲姓名" min-width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="newbornName" label="新生儿姓名" min-width="110" align="center" header-align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="sampleCode" label="样本编码" min-width="130" align="center" header-align="center" />
|
||||
<el-table-column prop="sampleTypeName" label="样本类型" min-width="110" align="center" header-align="center" />
|
||||
<el-table-column prop="storageTime" label="入库时间" min-width="170" align="center" header-align="center" />
|
||||
<el-table-column prop="storageStatusLabel" label="入库状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag
|
||||
:type="
|
||||
row.storageStatusLabel === '已入库'
|
||||
? 'success'
|
||||
: row.storageStatusLabel === '拒绝入库'
|
||||
? 'danger'
|
||||
: 'warning'
|
||||
"
|
||||
size="small"
|
||||
>
|
||||
{{ row.storageStatusLabel }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="smsNotified" label="通知状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.smsNotified == 1 ? 'success' : 'info'" size="small">
|
||||
{{ row.smsNotified == 1 ? '已通知' : '未通知' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" min-width="260" fixed="right" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button class="btn-op-item primary" @click="handleView(row)">
|
||||
<el-icon><View /></el-icon>查看
|
||||
</el-button>
|
||||
<el-button class="btn-op-item" @click="handleExtractSms(row)">
|
||||
<el-icon><ChatDotRound /></el-icon>提取短信
|
||||
</el-button>
|
||||
<el-button class="btn-op-item" @click="handleToggleNotified(row)">
|
||||
<el-icon><Bell /></el-icon>{{ row.smsNotified == 1 ? '标记未通知' : '标记已通知' }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination list-pager-bar">
|
||||
<el-pagination
|
||||
:current-page="pagination.page"
|
||||
:page-size="pagination.pageSize"
|
||||
:total="pagination.total"
|
||||
:page-sizes="[10, 20, 50]"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
@size-change="(val) => ((pagination.page = 1), (pagination.pageSize = val), loadData())"
|
||||
@current-change="(val) => ((pagination.page = val), loadData())"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ProtocolViewDialog
|
||||
v-model="viewVisible"
|
||||
:protocol-id="viewProtocolId"
|
||||
:list-row="viewRow"
|
||||
show-audit-history
|
||||
show-storage-cert
|
||||
show-fullmoon-insurance
|
||||
/>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Search, RefreshLeft, View, ChatDotRound, Bell } from '@element-plus/icons-vue'
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
import ProtocolViewDialog from '../protocol/ProtocolViewDialog.vue'
|
||||
import {
|
||||
fetchStorageEntrySmsList,
|
||||
fetchToggleStorageEntrySmsNotified,
|
||||
fetchGenerateStorageEntrySms
|
||||
} from '@/api/storage-entry-sms-notification'
|
||||
import { type CollectionProtocolRow } from '@/api/collection-protocol'
|
||||
import {
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
} from '@/utils/status-tag-registry'
|
||||
|
||||
defineOptions({ name: 'CellStorageStorageEntryInfo' })
|
||||
|
||||
const searchForm = reactive({ keyword: '', storageStatus: '', smsNotified: '' })
|
||||
const tableData = ref<any[]>([])
|
||||
const loading = ref(false)
|
||||
const pagination = reactive({ page: 1, pageSize: 10, total: 0 })
|
||||
|
||||
const viewVisible = ref(false)
|
||||
const viewProtocolId = ref<string | null>(null)
|
||||
const viewRow = ref<CollectionProtocolRow | null>(null)
|
||||
|
||||
const { copy } = useClipboard()
|
||||
|
||||
async function loadData() {
|
||||
loading.value = true
|
||||
try {
|
||||
const result = await fetchStorageEntrySmsList({
|
||||
page: pagination.page,
|
||||
pageSize: pagination.pageSize,
|
||||
keyword: searchForm.keyword || undefined,
|
||||
storageStatus: searchForm.storageStatus || undefined,
|
||||
smsNotified: searchForm.smsNotified || undefined
|
||||
})
|
||||
const res = (result as any) || {}
|
||||
tableData.value = res.list || []
|
||||
pagination.total = res.total || 0
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function handleSearch() {
|
||||
pagination.page = 1
|
||||
loadData()
|
||||
}
|
||||
|
||||
function handleReset() {
|
||||
Object.assign(searchForm, { keyword: '', storageStatus: '', smsNotified: '' })
|
||||
handleSearch()
|
||||
}
|
||||
|
||||
function handleView(row: Record<string, unknown>) {
|
||||
const pid = String(row.collectionProtocolId || row.protocolId || '')
|
||||
if (!pid) {
|
||||
ElMessage.warning('缺少关联协议单,无法查看')
|
||||
return
|
||||
}
|
||||
viewProtocolId.value = pid
|
||||
viewRow.value = {
|
||||
id: pid,
|
||||
protocolNo: row.protocolNo,
|
||||
motherName: row.motherName,
|
||||
newbornName: row.newbornName
|
||||
}
|
||||
viewVisible.value = true
|
||||
}
|
||||
|
||||
async function handleExtractSms(row: any) {
|
||||
try {
|
||||
const result = await fetchGenerateStorageEntrySms(row.id, row.storageReviewId)
|
||||
const content = (result as any)?.smsContent || ''
|
||||
if (!content) {
|
||||
ElMessage.warning('短信内容为空')
|
||||
return
|
||||
}
|
||||
await copy(content)
|
||||
ElMessage.success('短信内容已复制到剪贴板')
|
||||
} catch {
|
||||
ElMessage.error('提取短信失败')
|
||||
}
|
||||
}
|
||||
|
||||
async function handleToggleNotified(row: any) {
|
||||
const newVal = row.smsNotified == 1 ? 0 : 1
|
||||
try {
|
||||
await fetchToggleStorageEntrySmsNotified(row.id, {
|
||||
smsNotified: newVal,
|
||||
storageReviewId: row.storageReviewId
|
||||
})
|
||||
ElMessage.success(newVal === 1 ? '已标记为已通知' : '已标记为未通知')
|
||||
loadData()
|
||||
} catch {
|
||||
ElMessage.error('操作失败')
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
loadData()
|
||||
})
|
||||
</script>
|
||||
@@ -59,32 +59,32 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
/>
|
||||
<el-table-column prop="roomCode" label="编号" width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="roomCode" label="编号" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="roomName" label="名称" min-width="160" align="center" header-align="center" />
|
||||
<el-table-column label="等级" width="100" align="center" header-align="center">
|
||||
<el-table-column label="等级" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag class="clean-room-grade-tag" :class="gradeTagClass(row.roomGrade)" effect="light">
|
||||
{{ gradeLabel(row.roomGrade) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" width="100" align="center" header-align="center">
|
||||
<el-table-column label="状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.roomStatus === 'zc' ? 'success' : 'danger'" effect="plain">
|
||||
{{ row.roomStatus === 'zc' ? '正常' : '异常' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="areaSqm" label="面积(m²)" width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="areaSqm" label="面积(m²)" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column label="操作" min-width="320" fixed="right" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button class="btn-op-item" @click="handleView(row)"
|
||||
@@ -218,7 +218,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="60"
|
||||
min-width="60"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (logPagination.page - 1) * logPagination.pageSize + index + 1"
|
||||
@@ -228,7 +228,7 @@
|
||||
<el-table-column prop="enterTime" label="进入时间" min-width="160" align="center" header-align="center" />
|
||||
<el-table-column prop="purpose" label="目的" min-width="120" align="center" header-align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="leaveTime" label="离开时间" min-width="160" align="center" header-align="center" />
|
||||
<el-table-column prop="bodyTemp" label="体温(℃)" width="90" align="center" header-align="center">
|
||||
<el-table-column prop="bodyTemp" label="体温(℃)" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.bodyTemp != null ? row.bodyTemp + '℃' : '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" min-width="160" align="center" header-align="center" show-overflow-tooltip />
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -381,8 +381,8 @@
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table :data="occupancyList" v-loading="occupancyLoading" size="small" max-height="360">
|
||||
<el-table-column type="index" label="序号" width="60" />
|
||||
<el-table-column label="物品类型" width="120">
|
||||
<el-table-column type="index" label="序号" min-width="60" />
|
||||
<el-table-column label="物品类型" min-width="120">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.itemType === 'cell_product' ? 'primary' : 'info'" size="small">
|
||||
{{ row.itemType === 'cell_product' ? '细胞产品' : '其他' }}
|
||||
@@ -391,13 +391,13 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="itemCode" label="物品编码" min-width="140" />
|
||||
<el-table-column prop="itemName" label="物品名称" min-width="140" />
|
||||
<el-table-column label="来源" width="120">
|
||||
<el-table-column label="来源" min-width="120">
|
||||
<template #default="{ row }">
|
||||
{{ { production: '生产入库', manual: '手动入库', transfer: '转移' }[row.itemSource] || row.itemSource }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="storedAt" label="入库时间" width="170" />
|
||||
<el-table-column label="操作" width="80" fixed="right">
|
||||
<el-table-column prop="storedAt" label="入库时间" min-width="170" />
|
||||
<el-table-column label="操作" min-width="80" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button type="danger" link size="small" @click="handleRemoveOccupancy(row)">
|
||||
出库
|
||||
@@ -419,8 +419,8 @@
|
||||
|
||||
<el-tab-pane label="出入库历史" name="history">
|
||||
<el-table :data="historyList" v-loading="historyLoading" size="small" max-height="400">
|
||||
<el-table-column type="index" label="序号" width="60" />
|
||||
<el-table-column label="物品类型" width="120">
|
||||
<el-table-column type="index" label="序号" min-width="60" />
|
||||
<el-table-column label="物品类型" min-width="120">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.itemType === 'cell_product' ? 'primary' : 'info'" size="small">
|
||||
{{ row.itemType === 'cell_product' ? '细胞产品' : '其他' }}
|
||||
@@ -429,14 +429,14 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="itemCode" label="物品编码" min-width="120" />
|
||||
<el-table-column prop="itemName" label="物品名称" min-width="120" />
|
||||
<el-table-column label="来源" width="100">
|
||||
<el-table-column label="来源" min-width="100">
|
||||
<template #default="{ row }">
|
||||
{{ { production: '生产入库', manual: '手动入库', transfer: '转移' }[row.itemSource] || row.itemSource }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="storedAt" label="入库时间" width="170" />
|
||||
<el-table-column prop="removedAt" label="出库时间" width="170" />
|
||||
<el-table-column label="状态" width="100">
|
||||
<el-table-column prop="storedAt" label="入库时间" min-width="170" />
|
||||
<el-table-column prop="removedAt" label="出库时间" min-width="170" />
|
||||
<el-table-column label="状态" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.occupancyStatus === 'stored' ? 'success' : 'warning'" size="small">
|
||||
{{ row.occupancyStatus === 'stored' ? '在库' : '已出库' }}
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -235,7 +235,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -688,7 +688,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -768,7 +768,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="100"
|
||||
min-width="100"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
@@ -954,7 +954,7 @@
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="45"
|
||||
min-width="45"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:selectable="priceSelectorRowSelectable"
|
||||
|
||||
@@ -22,17 +22,17 @@
|
||||
max-height="420"
|
||||
@selection-change="(rows) => (selectedRows = rows)"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="index" label="序号" width="68" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column prop="packageName" label="套餐名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="packageCode" label="套餐编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="itemCount" label="项目数" width="80" align="center" header-align="center" />
|
||||
<el-table-column label="合计费用(元)" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="itemCount" label="项目数" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column label="合计费用(元)" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{
|
||||
row.totalFee != null ? `¥${row.totalFee}` : '—'
|
||||
}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="90" align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status == '1' ? 'success' : 'info'" size="small">{{ row.status == '1' ? '正常' : '停用' }}</el-tag>
|
||||
</template>
|
||||
@@ -117,7 +117,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -138,7 +138,7 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" width="90" align="center" header-align="center">
|
||||
<el-table-column label="状态" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status == '1' ? 'success' : 'info'" size="small">{{
|
||||
row.status == '1' ? '正常' : '停用'
|
||||
@@ -206,7 +206,7 @@
|
||||
max-height="360"
|
||||
@selection-change="(rows) => (projectSelectorSelected = rows)"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
prop="projectName"
|
||||
label="项目名称"
|
||||
@@ -214,12 +214,12 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column label="项目费用(元)" width="120" align="center" header-align="center">
|
||||
<el-table-column label="项目费用(元)" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{
|
||||
row.projectFee != null ? `¥${row.projectFee}` : '—'
|
||||
}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="90" align="center" header-align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status == '1' ? 'success' : 'info'" size="small">{{
|
||||
row.status == '1' ? '正常' : '停用'
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1"
|
||||
@@ -72,7 +72,7 @@
|
||||
<el-table-column prop="institutionAddress" label="机构地址" min-width="180" align="center" header-align="center" />
|
||||
<el-table-column prop="contactName" label="联系人" min-width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="contactPhone" label="联系电话" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="status" label="状态" width="90" align="center" header-align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status == '1' ? 'success' : 'info'" size="small">{{ row.status == '1' ? '正常' : '停用' }}</el-tag>
|
||||
</template>
|
||||
@@ -197,13 +197,13 @@
|
||||
max-height="460"
|
||||
@selection-change="onItemSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="index" label="序号" width="68" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column prop="projectName" label="项目名称" min-width="160" align="center" header-align="center" />
|
||||
<el-table-column prop="projectFee" label="项目费用(元)" width="120" align="center" header-align="center">
|
||||
<el-table-column prop="projectFee" label="项目费用(元)" min-width="120" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.projectFee != null ? `¥${row.projectFee}` : '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="90" align="center" header-align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status == '1' ? 'success' : 'info'" size="small">{{ row.status == '1' ? '正常' : '停用' }}</el-tag>
|
||||
</template>
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -172,7 +172,7 @@
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table :data="detailItems" size="small" class="detail-table" max-height="320">
|
||||
<el-table-column type="index" label="序号" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="index" label="序号" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column prop="projectName" label="项目名称" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="projectCode" label="项目编码" min-width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="cellTypeName" label="细胞类型" min-width="100" align="center" header-align="center" />
|
||||
@@ -195,7 +195,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" clearable />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" fixed="right" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" fixed="right" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button class="btn-op-item" type="danger" link size="small" @click="detailItems.splice($index, 1)">
|
||||
<el-icon><Delete /></el-icon>删除
|
||||
@@ -242,7 +242,7 @@
|
||||
max-height="400"
|
||||
@selection-change="handlePriceSelectorChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column prop="projectName" label="项目名称" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="projectCode" label="项目编码" min-width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="cellTypeName" label="细胞类型" min-width="100" align="center" header-align="center" />
|
||||
|
||||
@@ -99,14 +99,14 @@
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55"
|
||||
min-width="55"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -146,7 +146,7 @@
|
||||
<el-table-column
|
||||
prop="passage"
|
||||
label="代次"
|
||||
width="80"
|
||||
min-width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
@@ -182,7 +182,7 @@
|
||||
<el-table-column
|
||||
prop="viability"
|
||||
label="活性(%)"
|
||||
width="90"
|
||||
min-width="90"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
@@ -192,7 +192,7 @@
|
||||
<el-table-column
|
||||
prop="productStatus"
|
||||
label="状态"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
@@ -508,7 +508,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="64"
|
||||
min-width="64"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column label="产品编码" min-width="200">
|
||||
|
||||
@@ -63,11 +63,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -168,7 +168,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -244,7 +244,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -267,7 +267,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="formData.items.splice($index, 1)">
|
||||
删除
|
||||
@@ -321,7 +321,7 @@
|
||||
row-key="id"
|
||||
@selection-change="handleConsumableSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="48" align="center" header-align="center" :reserve-selection="true" />
|
||||
<el-table-column type="selection" min-width="48" align="center" header-align="center" :reserve-selection="true" />
|
||||
<el-table-column prop="consumableCode" label="耗材编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="consumableName" label="耗材名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="specModel" label="规格型号" min-width="120" align="center" header-align="center" />
|
||||
|
||||
@@ -76,11 +76,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -182,7 +182,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (logPagination.page - 1) * logPagination.pageSize + index + 1"
|
||||
@@ -527,15 +527,15 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
/>
|
||||
<el-table-column prop="materialCode" label="耗材编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="materialName" label="耗材名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="unit" label="单位" width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="unit" label="单位" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.stockQty }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="入库数量" min-width="130" align="center" header-align="center">
|
||||
@@ -555,7 +555,7 @@
|
||||
<el-input v-model="row.remark" placeholder="可选" clearable class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="batchStockInLines.splice($index, 1)">
|
||||
移除
|
||||
@@ -682,15 +682,15 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
/>
|
||||
<el-table-column prop="materialCode" label="耗材编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="materialName" label="耗材名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="unit" label="单位" width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="unit" label="单位" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.stockQty }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="出库数量" min-width="130" align="center" header-align="center">
|
||||
@@ -711,7 +711,7 @@
|
||||
<el-input v-model="row.remark" placeholder="可选" clearable class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="batchStockOutLines.splice($index, 1)">
|
||||
移除
|
||||
@@ -763,7 +763,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (stockLogPagination.page - 1) * stockLogPagination.pageSize + index + 1"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -85,11 +85,11 @@
|
||||
row-key="id"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index: number) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -410,7 +410,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i: number) => i + 1"
|
||||
@@ -478,7 +478,7 @@
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关键物料" width="90" align="center" header-align="center">
|
||||
<el-table-column label="关键物料" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-switch v-model="row.isKeyMaterial" @change="saveReagents" />
|
||||
</template>
|
||||
@@ -488,7 +488,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" @change="saveReagents" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="removeReagentRow($index)">删除</el-button>
|
||||
</template>
|
||||
@@ -509,7 +509,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i: number) => i + 1"
|
||||
@@ -577,7 +577,7 @@
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="必需" width="80" align="center" header-align="center">
|
||||
<el-table-column label="必需" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-switch v-model="row.isRequired" @change="saveConsumables" />
|
||||
</template>
|
||||
@@ -587,7 +587,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" @change="saveConsumables" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="removeConsumableRow($index)">删除</el-button>
|
||||
</template>
|
||||
@@ -608,7 +608,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i: number) => i + 1"
|
||||
@@ -640,7 +640,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" @change="saveOutputs" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="removeOutputRow($index)">删除</el-button>
|
||||
</template>
|
||||
@@ -661,7 +661,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i: number) => i + 1"
|
||||
@@ -700,7 +700,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" @change="saveDataCollections" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="removeDataCollectionRow($index)">删除</el-button>
|
||||
</template>
|
||||
|
||||
@@ -62,11 +62,11 @@
|
||||
row-key="id"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -256,7 +256,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -274,7 +274,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column label="关键物料" width="90" align="center" header-align="center">
|
||||
<el-table-column label="关键物料" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-switch v-model="row.isKeyMaterial" />
|
||||
</template>
|
||||
@@ -284,7 +284,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="reagentList.splice($index, 1)">删除</el-button>
|
||||
</template>
|
||||
@@ -312,7 +312,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -330,7 +330,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column label="必填" width="80" align="center" header-align="center">
|
||||
<el-table-column label="必填" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-switch v-model="row.isRequired" />
|
||||
</template>
|
||||
@@ -340,7 +340,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="consumableList.splice($index, 1)">删除</el-button>
|
||||
</template>
|
||||
@@ -392,7 +392,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="outputList.splice($index, 1)">删除</el-button>
|
||||
</template>
|
||||
@@ -421,7 +421,7 @@
|
||||
stripe
|
||||
class="inner-table data-collection-sort-table"
|
||||
>
|
||||
<el-table-column label="" width="52" align="center" header-align="center" class-name="drag-col">
|
||||
<el-table-column label="" min-width="52" align="center" header-align="center" class-name="drag-col">
|
||||
<template #default>
|
||||
<el-icon class="data-collection-drag-handle" title="拖拽排序"><Rank /></el-icon>
|
||||
</template>
|
||||
@@ -429,7 +429,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -462,7 +462,7 @@
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="排序号" width="88" align="center" header-align="center">
|
||||
<el-table-column label="排序号" min-width="88" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<span class="data-collection-order-num">{{ $index + 1 }}</span>
|
||||
</template>
|
||||
@@ -472,7 +472,7 @@
|
||||
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="removeDataCollectionRow($index)">删除</el-button>
|
||||
</template>
|
||||
@@ -526,7 +526,7 @@
|
||||
row-key="id"
|
||||
@selection-change="handleReagentSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="48" align="center" header-align="center" :reserve-selection="true" />
|
||||
<el-table-column type="selection" min-width="48" align="center" header-align="center" :reserve-selection="true" />
|
||||
<el-table-column prop="reagentCode" label="试剂编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="reagentName" label="试剂名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="spec" label="规格" min-width="100" align="center" header-align="center" />
|
||||
@@ -578,7 +578,7 @@
|
||||
row-key="id"
|
||||
@selection-change="handleConsumableSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="48" align="center" header-align="center" :reserve-selection="true" />
|
||||
<el-table-column type="selection" min-width="48" align="center" header-align="center" :reserve-selection="true" />
|
||||
<el-table-column prop="consumableCode" label="耗材编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="consumableName" label="耗材名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="specModel" label="规格型号" min-width="120" align="center" header-align="center" />
|
||||
@@ -625,7 +625,7 @@
|
||||
row-key="id"
|
||||
@row-click="handlePackRowClick"
|
||||
>
|
||||
<el-table-column label="" width="52" align="center" header-align="center">
|
||||
<el-table-column label="" min-width="52" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-radio v-model="selectedPackId" :value="row.id" @click.stop />
|
||||
</template>
|
||||
|
||||
@@ -46,19 +46,27 @@
|
||||
stripe
|
||||
@row-dblclick="handleViewDetail"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="68" align="center" :index="(i: number) => (pagination.page - 1) * pagination.pageSize + i + 1" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" :index="(i: number) => (pagination.page - 1) * pagination.pageSize + i + 1" />
|
||||
<el-table-column prop="taskNo" label="任务号" min-width="150" align="center" />
|
||||
<el-table-column prop="workOrderNo" label="所属工单号" min-width="140" align="center" />
|
||||
<el-table-column prop="protocolNo" label="协议号" min-width="140" align="center">
|
||||
<template #default="{ row }">{{ row.protocolNo || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="protocolStatus" label="协议状态" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag
|
||||
:type="protocolStatusTagTypeBySource(String(row.protocolStatus || ''), row.receptionSource || 'cell_storage')"
|
||||
size="small"
|
||||
>{{ protocolStatusLabelBySource(String(row.protocolStatus || ''), row.receptionSource || 'cell_storage') }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sampleCode" label="样本编码" min-width="130" align="center">
|
||||
<template #default="{ row }">{{ row.sampleCode || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sampleTypeName" label="样本类型" min-width="110" align="center">
|
||||
<template #default="{ row }">{{ row.sampleTypeName || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="taskType" label="任务类型" width="120" align="center">
|
||||
<el-table-column prop="taskType" label="任务类型" min-width="120" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="taskTypeTag(row.taskType).type" size="small">{{ taskTypeTag(row.taskType).label }}</el-tag>
|
||||
</template>
|
||||
@@ -73,7 +81,7 @@
|
||||
<el-table-column prop="receptionTime" label="接收时间" min-width="170" align="center">
|
||||
<template #default="{ row }">{{ row.receptionTime || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="taskStatus" label="任务状态" width="110" align="center">
|
||||
<el-table-column prop="taskStatus" label="任务状态" min-width="110" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="taskStatusTag(row.taskStatus).type" size="small">{{ taskStatusTag(row.taskStatus).label }}</el-tag>
|
||||
</template>
|
||||
@@ -119,8 +127,23 @@
|
||||
<script setup lang="ts">
|
||||
import { RefreshLeft, Search, VideoPlay, View } from '@element-plus/icons-vue'
|
||||
import { fetchProductionTaskList } from '@/api/production-task'
|
||||
import {
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
donationStatusLabel,
|
||||
donationStatusTagType,
|
||||
} from '@/utils/status-tag-registry'
|
||||
import type { TagType } from '@/utils/status-tag-registry'
|
||||
import TaskExecutionDialog from '../production-work-order/TaskExecutionDialog.vue'
|
||||
|
||||
/** 根据来源类型返回协议状态标签 */
|
||||
function protocolStatusLabelBySource(status: string, source: string): string {
|
||||
return source === 'research_donation' ? donationStatusLabel(status) : protocolStatusLabel(status)
|
||||
}
|
||||
function protocolStatusTagTypeBySource(status: string, source: string): TagType {
|
||||
return source === 'research_donation' ? donationStatusTagType(status) : protocolStatusTagType(status)
|
||||
}
|
||||
|
||||
defineOptions({ name: 'ProductionProductionTask' })
|
||||
|
||||
const route = useRoute()
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
:index="(i: number) => i + 1"
|
||||
/>
|
||||
@@ -237,7 +237,7 @@
|
||||
<span v-else>{{ row.unit || '—' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关键物料" width="90" align="center">
|
||||
<el-table-column label="关键物料" min-width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-switch v-if="!readonly" v-model="row.isKeyMaterial" />
|
||||
<el-tag v-else :type="row.isKeyMaterial ? 'success' : 'info'" size="small">
|
||||
@@ -256,7 +256,7 @@
|
||||
<span v-else>{{ row.remark || '—' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="!readonly" label="操作" width="80" align="center">
|
||||
<el-table-column v-if="!readonly" label="操作" min-width="80" align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button
|
||||
link
|
||||
@@ -295,7 +295,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
:index="(i: number) => i + 1"
|
||||
/>
|
||||
@@ -400,7 +400,7 @@
|
||||
<span v-else>{{ row.unit || '—' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="必需" width="80" align="center">
|
||||
<el-table-column label="必需" min-width="80" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-switch v-if="!readonly" v-model="row.isRequired" />
|
||||
<el-tag v-else :type="row.isRequired ? 'success' : 'info'" size="small">
|
||||
@@ -419,7 +419,7 @@
|
||||
<span v-else>{{ row.remark || '—' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="!readonly" label="操作" width="80" align="center">
|
||||
<el-table-column v-if="!readonly" label="操作" min-width="80" align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button
|
||||
link
|
||||
@@ -453,7 +453,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
:index="(i: number) => i + 1"
|
||||
/>
|
||||
@@ -513,7 +513,7 @@
|
||||
<span v-else>{{ row.remark || '—' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="!readonly" label="操作" width="80" align="center">
|
||||
<el-table-column v-if="!readonly" label="操作" min-width="80" align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="editor.removeOutputRow($index)"
|
||||
>删除</el-button
|
||||
@@ -548,7 +548,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
:index="(i: number) => i + 1"
|
||||
/>
|
||||
@@ -619,7 +619,7 @@
|
||||
<span v-else>{{ row.remark || '—' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="!readonly" label="操作" width="80" align="center">
|
||||
<el-table-column v-if="!readonly" label="操作" min-width="80" align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button
|
||||
link
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
v-loading="loading"
|
||||
empty-text="暂无原材料"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="56" align="center" />
|
||||
<el-table-column label="类型" width="100" align="center">
|
||||
<el-table-column type="index" label="序号" min-width="56" align="center" />
|
||||
<el-table-column label="类型" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="inputTypeTagType(row.inputType)" size="small">
|
||||
{{ row.inputType === 'cell_product' ? '细胞产品' : '样本' }}
|
||||
@@ -55,7 +55,7 @@
|
||||
{{ row.productTypeName || '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="代次" width="70" align="center">
|
||||
<el-table-column label="代次" min-width="70" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.passage || '—' }}
|
||||
</template>
|
||||
@@ -65,7 +65,7 @@
|
||||
{{ row.storageSlotName || '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" width="90" align="center">
|
||||
<el-table-column label="状态" min-width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.inputType === 'cell_product'">
|
||||
<el-tag :type="inputStatusTagType(row.productStatus)" size="small">
|
||||
@@ -83,7 +83,7 @@
|
||||
<template v-else>{{ row.remark || '—' }}</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="!disabled" label="操作" width="80" fixed="right" align="center">
|
||||
<el-table-column v-if="!disabled" label="操作" min-width="80" fixed="right" align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button type="danger" link size="small" @click="handleDelete($index)">
|
||||
删除
|
||||
@@ -129,7 +129,7 @@
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="45"
|
||||
min-width="45"
|
||||
align="center"
|
||||
:selectable="isRowSelectable"
|
||||
/>
|
||||
@@ -151,14 +151,14 @@
|
||||
min-width="90"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="代次" prop="passage" width="70" align="center" />
|
||||
<el-table-column label="代次" prop="passage" min-width="70" align="center" />
|
||||
<el-table-column
|
||||
label="储物格位置"
|
||||
prop="storageSlotName"
|
||||
min-width="160"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column label="状态" width="80" align="center">
|
||||
<el-table-column label="状态" min-width="80" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="inputStatusTagType(row.productStatus)" size="small">
|
||||
{{ inputStatusLabel(row.productStatus) }}
|
||||
@@ -182,7 +182,7 @@
|
||||
{{ row.expectedCellCount ?? '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="活性" prop="viability" width="80" align="center">
|
||||
<el-table-column label="活性" prop="viability" min-width="80" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.viability != null ? row.viability : '—' }}
|
||||
</template>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
v-loading="loading"
|
||||
empty-text="暂无产出产品"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="56" align="center" />
|
||||
<el-table-column type="index" label="序号" min-width="56" align="center" />
|
||||
<el-table-column label="产品编码" prop="productCode" min-width="140" show-overflow-tooltip />
|
||||
<el-table-column label="产品名称" prop="productName" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="产品类型" min-width="100" show-overflow-tooltip>
|
||||
@@ -32,7 +32,7 @@
|
||||
{{ row.specName || '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="代次" prop="passage" width="70" align="center" />
|
||||
<el-table-column label="代次" prop="passage" min-width="70" align="center" />
|
||||
<el-table-column label="批次号" prop="batchNo" min-width="110" show-overflow-tooltip />
|
||||
<el-table-column label="储物格位置" min-width="160" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
@@ -44,7 +44,7 @@
|
||||
{{ row.expectedCellCount ?? '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="活性" width="80" align="center">
|
||||
<el-table-column label="活性" min-width="80" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.viability != null ? row.viability : '—' }}
|
||||
</template>
|
||||
@@ -59,20 +59,20 @@
|
||||
{{ formatDateOnly(row.expiryDate) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数量" width="80" align="center">
|
||||
<el-table-column label="数量" min-width="80" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.quantity ?? '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位" prop="unit" width="70" align="center" />
|
||||
<el-table-column label="状态" width="90" align="center">
|
||||
<el-table-column label="单位" prop="unit" min-width="70" align="center" />
|
||||
<el-table-column label="状态" min-width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="statusTagType(row.productStatus)" size="small">
|
||||
{{ statusLabel(row.productStatus) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="!disabled" label="操作" width="140" fixed="right" align="center">
|
||||
<el-table-column v-if="!disabled" label="操作" min-width="140" fixed="right" align="center">
|
||||
<template #default="{ row, $index }">
|
||||
<el-button type="primary" link size="small" @click="handleEdit(row, $index)">
|
||||
编辑
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
>
|
||||
</div>
|
||||
<el-table :data="productLines" size="small" class="product-lines-table">
|
||||
<el-table-column type="index" label="序号" width="64" align="center" />
|
||||
<el-table-column type="index" label="序号" min-width="64" align="center" />
|
||||
<el-table-column label="产品编码" min-width="200">
|
||||
<template #default="{ row }">
|
||||
<el-input
|
||||
|
||||
@@ -56,14 +56,22 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
:index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1"
|
||||
/>
|
||||
<el-table-column prop="workOrderNo" label="工单号" min-width="150" align="center" />
|
||||
<el-table-column prop="protocolNo" label="协议号" min-width="140" align="center" />
|
||||
<el-table-column prop="protocolStatus" label="协议状态" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag
|
||||
:type="protocolStatusTagTypeBySource(String(row.protocolStatus || ''), row.receptionSource || 'cell_storage')"
|
||||
size="small"
|
||||
>{{ protocolStatusLabelBySource(String(row.protocolStatus || ''), row.receptionSource || 'cell_storage') }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sampleCode" label="样本编码" min-width="120" align="center" />
|
||||
<el-table-column prop="receptionSource" label="来源类型" width="110" align="center">
|
||||
<el-table-column prop="receptionSource" label="来源类型" min-width="110" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="sourceTag(row.receptionSource).type" size="small">
|
||||
{{ row.receptionSourceLabel || sourceTag(row.receptionSource).label }}
|
||||
@@ -79,7 +87,7 @@
|
||||
<el-table-column prop="receptionTime" label="接收时间" min-width="170" align="center">
|
||||
<template #default="{ row }">{{ row.receptionTime || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="workOrderStatus" label="工单状态" width="100" align="center">
|
||||
<el-table-column prop="workOrderStatus" label="工单状态" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="woStatusTag(row.workOrderStatus).type" size="small">
|
||||
{{ woStatusTag(row.workOrderStatus).label }}
|
||||
@@ -89,7 +97,7 @@
|
||||
<el-table-column prop="createTime" label="创建时间" min-width="170" align="center" />
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="460"
|
||||
min-width="460"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
@@ -190,7 +198,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
:index="(i) => i + 1"
|
||||
/>
|
||||
@@ -198,7 +206,7 @@
|
||||
<el-table-column prop="routeName" label="工艺路线" min-width="140">
|
||||
<template #default="{ row }">{{ row.routeName || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="taskStatus" label="任务状态" width="100" align="center">
|
||||
<el-table-column prop="taskStatus" label="任务状态" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="taskStatusLabel(row.taskStatus).type" size="small">
|
||||
{{ taskStatusLabel(row.taskStatus).label }}
|
||||
@@ -208,8 +216,8 @@
|
||||
<el-table-column prop="remark" label="备注" min-width="140">
|
||||
<template #default="{ row }">{{ row.remark || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" width="170" align="center" />
|
||||
<el-table-column label="操作" width="250" align="center" fixed="right">
|
||||
<el-table-column prop="createTime" label="创建时间" min-width="170" align="center" />
|
||||
<el-table-column label="操作" min-width="250" align="center" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button link type="primary" size="small" @click="openEditTaskInfo(row)"
|
||||
>编辑信息</el-button
|
||||
@@ -258,6 +266,21 @@
|
||||
acceptConclusionLabel,
|
||||
transportTypeLabel
|
||||
} from '@/utils/qc-labels'
|
||||
import {
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
donationStatusLabel,
|
||||
donationStatusTagType,
|
||||
} from '@/utils/status-tag-registry'
|
||||
import type { TagType } from '@/utils/status-tag-registry'
|
||||
|
||||
/** 根据来源类型返回协议状态标签 */
|
||||
function protocolStatusLabelBySource(status: string, source: string): string {
|
||||
return source === 'research_donation' ? donationStatusLabel(status) : protocolStatusLabel(status)
|
||||
}
|
||||
function protocolStatusTagTypeBySource(status: string, source: string): TagType {
|
||||
return source === 'research_donation' ? donationStatusTagType(status) : protocolStatusTagType(status)
|
||||
}
|
||||
import ProtocolAttachmentReadonly from '@/views/cell-storage/protocol/ProtocolAttachmentReadonly.vue'
|
||||
import SystemViewDialog from '@/components/business/system-view-dialog/index.vue'
|
||||
import type { ViewSection } from '@/components/business/system-view-dialog/index.vue'
|
||||
@@ -404,6 +427,11 @@
|
||||
fields: [
|
||||
{ label: '工单号', value: d.workOrderNo },
|
||||
{ label: '协议号', value: d.protocolNo },
|
||||
{
|
||||
label: '协议状态',
|
||||
value: protocolStatusLabelBySource(String(d.protocolStatus || ''), d.receptionSource || 'cell_storage'),
|
||||
tagType: protocolStatusTagTypeBySource(String(d.protocolStatus || ''), d.receptionSource || 'cell_storage')
|
||||
},
|
||||
{ label: '样本编码', value: d.sampleCode },
|
||||
{
|
||||
label: '来源类型',
|
||||
|
||||
@@ -82,11 +82,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -259,7 +259,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (allLogPagination.page - 1) * allLogPagination.pageSize + index + 1"
|
||||
@@ -667,7 +667,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -689,11 +689,11 @@
|
||||
<el-table-column
|
||||
prop="unit"
|
||||
label="单位"
|
||||
width="80"
|
||||
min-width="80"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column label="当前库存" width="100" align="center" header-align="center">
|
||||
<el-table-column label="当前库存" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.stockQty }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="入库数量" min-width="130" align="center" header-align="center">
|
||||
@@ -713,7 +713,7 @@
|
||||
<el-input v-model="row.remark" placeholder="可选" clearable class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="batchStockInLines.splice($index, 1)">
|
||||
移除
|
||||
@@ -840,7 +840,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -862,11 +862,11 @@
|
||||
<el-table-column
|
||||
prop="unit"
|
||||
label="单位"
|
||||
width="80"
|
||||
min-width="80"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column label="当前库存" width="100" align="center" header-align="center">
|
||||
<el-table-column label="当前库存" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.stockQty }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="出库数量" min-width="130" align="center" header-align="center">
|
||||
@@ -887,7 +887,7 @@
|
||||
<el-input v-model="row.remark" placeholder="可选" clearable class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="batchStockOutLines.splice($index, 1)">
|
||||
移除
|
||||
@@ -948,7 +948,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (stockLogPagination.page - 1) * stockLogPagination.pageSize + index + 1"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -51,12 +51,12 @@
|
||||
@selection-change="(r: QcLabTestItem[]) => (selectedRows.value = r)"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column type="index" label="序号" width="68" align="center" :index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1" />
|
||||
<el-table-column type="selection" min-width="55" align="center" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" :index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1" />
|
||||
<el-table-column prop="itemCode" label="项目编码" min-width="140" align="center" />
|
||||
<el-table-column prop="itemName" label="项目名称" min-width="160" align="center" />
|
||||
<el-table-column prop="description" label="描述" min-width="200" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="status" label="状态" width="90" align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === '1' ? 'success' : 'info'" size="small">{{ row.status === '1' ? '启用' : '停用' }}</el-tag>
|
||||
</template>
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -66,11 +66,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -480,15 +480,15 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
/>
|
||||
<el-table-column prop="materialCode" label="物料编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="materialName" label="物料名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="unit" label="单位" width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="unit" label="单位" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.stockQty }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="入库数量" min-width="130" align="center" header-align="center">
|
||||
@@ -508,7 +508,7 @@
|
||||
<el-input v-model="row.remark" placeholder="可选" clearable class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="batchStockInLines.splice($index, 1)">
|
||||
移除
|
||||
@@ -644,15 +644,15 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
/>
|
||||
<el-table-column prop="materialCode" label="物料编码" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="materialName" label="物料名称" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="unit" label="单位" width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="unit" label="单位" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column label="当前库存" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.stockQty }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="出库数量" min-width="130" align="center" header-align="center">
|
||||
@@ -673,7 +673,7 @@
|
||||
<el-input v-model="row.remark" placeholder="可选" clearable class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="batchStockOutLines.splice($index, 1)">
|
||||
移除
|
||||
|
||||
@@ -53,15 +53,15 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table class="list-table" :data="tableData" v-loading="loading" stripe @row-dblclick="handleView">
|
||||
<el-table-column type="index" label="序号" width="68" align="center" :index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" :index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1" />
|
||||
<el-table-column prop="taskNo" label="任务号" min-width="150" align="center" />
|
||||
<el-table-column prop="qcBizTypeLabel" label="业务类型" width="100" align="center">
|
||||
<el-table-column prop="qcBizTypeLabel" label="业务类型" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag type="success" size="small">{{ row.qcBizTypeLabel || qcBizTypeLabel(row.qcBizType || '') }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="workOrderNo" label="工单号" min-width="140" align="center" />
|
||||
<el-table-column prop="receptionSourceLabel" label="样本来源" width="100" align="center">
|
||||
<el-table-column prop="receptionSourceLabel" label="样本来源" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.receptionSource === 'research_donation' ? 'warning' : 'success'" size="small">
|
||||
{{ row.receptionSourceLabel || receptionSourceLabel(row.receptionSource || '') }}
|
||||
@@ -80,7 +80,7 @@
|
||||
<el-table-column prop="handlerName" label="接收经手人" min-width="110" align="center">
|
||||
<template #default="{ row }">{{ row.handlerName || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="taskType" label="检测类型" width="110" align="center">
|
||||
<el-table-column prop="taskType" label="检测类型" min-width="110" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.taskType === 'sysz' ? 'success' : 'info'" size="small">{{ taskTypeLabel(row.taskType) }}</el-tag>
|
||||
</template>
|
||||
@@ -89,7 +89,7 @@
|
||||
<el-table-column prop="companyName" label="第三方公司" min-width="120" align="center">
|
||||
<template #default="{ row }">{{ row.companyName || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="conclusion" label="质检结论" width="100" align="center">
|
||||
<el-table-column prop="conclusion" label="质检结论" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag
|
||||
v-if="row.conclusion === 'tg'"
|
||||
@@ -108,7 +108,7 @@
|
||||
<el-tag v-else type="info" size="small">—</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="taskStatus" label="状态" width="100" align="center">
|
||||
<el-table-column prop="taskStatus" label="状态" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.taskStatus === 'ywc' ? 'success' : row.taskStatus === 'jxz' ? 'warning' : 'info'" size="small">
|
||||
{{ taskStatusLabel(row.taskStatus) }}
|
||||
@@ -199,7 +199,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -239,7 +239,7 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位" width="72" align="center" header-align="center">
|
||||
<el-table-column label="单位" min-width="72" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.unit || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" min-width="140" align="center" header-align="center">
|
||||
@@ -247,7 +247,7 @@
|
||||
<el-input v-model="row.remark" placeholder="选填" clearable class="inner-cell-input" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="96" align="center" header-align="center" fixed="right">
|
||||
<el-table-column label="操作" min-width="96" align="center" header-align="center" fixed="right">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="removeMaterialRow($index)">
|
||||
删除
|
||||
@@ -328,7 +328,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => index + 1"
|
||||
@@ -348,7 +348,7 @@
|
||||
{{ row.qty != null && row.qty !== '' ? row.qty : '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位" width="72" align="center" header-align="center">
|
||||
<el-table-column label="单位" min-width="72" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.unit || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" min-width="140" align="center" header-align="center">
|
||||
@@ -412,6 +412,21 @@
|
||||
workOrderStatusLabel,
|
||||
qcTaskConclusionLabel
|
||||
} from '@/utils/qc-labels'
|
||||
import {
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
donationStatusLabel,
|
||||
donationStatusTagType,
|
||||
} from '@/utils/status-tag-registry'
|
||||
import type { TagType } from '@/utils/status-tag-registry'
|
||||
|
||||
/** 根据来源类型返回协议状态标签 */
|
||||
function protocolStatusLabelBySource(status: string, source: string): string {
|
||||
return source === 'research_donation' ? donationStatusLabel(status) : protocolStatusLabel(status)
|
||||
}
|
||||
function protocolStatusTagTypeBySource(status: string, source: string): TagType {
|
||||
return source === 'research_donation' ? donationStatusTagType(status) : protocolStatusTagType(status)
|
||||
}
|
||||
import { downloadAttachmentFile } from '@/utils/download-attachment'
|
||||
|
||||
defineOptions({ name: 'QualityInspectionQcTask' })
|
||||
@@ -735,6 +750,11 @@
|
||||
title: '样本信息',
|
||||
fields: [
|
||||
{ label: '协议号', value: r.protocolNo || d.protocolNo || '—' },
|
||||
{
|
||||
label: '协议状态',
|
||||
value: protocolStatusLabelBySource(String(d.protocolStatus || r.protocolStatus || ''), d.receptionSource || r.sourceType || 'cell_storage'),
|
||||
tagType: protocolStatusTagTypeBySource(String(d.protocolStatus || r.protocolStatus || ''), d.receptionSource || r.sourceType || 'cell_storage')
|
||||
},
|
||||
{ label: '样本编码', value: r.sampleCode || d.sampleCode || '—' },
|
||||
{
|
||||
label: '样本来源',
|
||||
|
||||
@@ -37,11 +37,19 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table class="list-table" :data="tableData" v-loading="loading" stripe @row-dblclick="handleView">
|
||||
<el-table-column type="index" label="序号" width="68" align="center" :index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" :index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1" />
|
||||
<el-table-column prop="workOrderNo" label="工单号" min-width="150" align="center" />
|
||||
<el-table-column prop="protocolNo" label="协议号" min-width="140" align="center" />
|
||||
<el-table-column prop="protocolStatus" label="协议状态" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag
|
||||
:type="protocolStatusTagTypeBySource(String(row.protocolStatus || ''), row.receptionSource || 'cell_storage')"
|
||||
size="small"
|
||||
>{{ protocolStatusLabelBySource(String(row.protocolStatus || ''), row.receptionSource || 'cell_storage') }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sampleCode" label="样本编码" min-width="120" align="center" />
|
||||
<el-table-column prop="receptionSourceLabel" label="来源类型" width="100" align="center">
|
||||
<el-table-column prop="receptionSourceLabel" label="来源类型" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.receptionSource === 'research_donation' ? 'warning' : 'success'" size="small">
|
||||
{{ row.receptionSourceLabel || receptionSourceLabel(row.receptionSource || '') }}
|
||||
@@ -57,7 +65,7 @@
|
||||
<el-table-column prop="handlerName" label="接收经手人" min-width="110" align="center">
|
||||
<template #default="{ row }">{{ row.handlerName || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="workOrderStatus" label="状态" width="100" align="center">
|
||||
<el-table-column prop="workOrderStatus" label="状态" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.workOrderStatus === 'ywc' ? 'success' : row.workOrderStatus === 'ypz' ? 'warning' : 'info'" size="small">
|
||||
{{ workOrderStatusLabel(row.workOrderStatus) }}
|
||||
@@ -198,6 +206,21 @@
|
||||
taskStatusLabel,
|
||||
qcTaskConclusionLabel
|
||||
} from '@/utils/qc-labels'
|
||||
import {
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
donationStatusLabel,
|
||||
donationStatusTagType,
|
||||
} from '@/utils/status-tag-registry'
|
||||
import type { TagType } from '@/utils/status-tag-registry'
|
||||
|
||||
/** 根据来源类型返回协议状态标签 */
|
||||
function protocolStatusLabelBySource(status: string, source: string): string {
|
||||
return source === 'research_donation' ? donationStatusLabel(status) : protocolStatusLabel(status)
|
||||
}
|
||||
function protocolStatusTagTypeBySource(status: string, source: string): TagType {
|
||||
return source === 'research_donation' ? donationStatusTagType(status) : protocolStatusTagType(status)
|
||||
}
|
||||
import ProtocolAttachmentReadonly from '@/views/cell-storage/protocol/ProtocolAttachmentReadonly.vue'
|
||||
import SystemViewDialog from '@/components/business/system-view-dialog/index.vue'
|
||||
import type { ViewField, ViewSection } from '@/components/business/system-view-dialog/index.vue'
|
||||
@@ -457,6 +480,11 @@
|
||||
fields: [
|
||||
{ label: '工单号', value: d.workOrderNo },
|
||||
{ label: '协议号', value: d.protocolNo },
|
||||
{
|
||||
label: '协议状态',
|
||||
value: protocolStatusLabelBySource(String(d.protocolStatus || ''), d.receptionSource || 'cell_storage'),
|
||||
tagType: protocolStatusTagTypeBySource(String(d.protocolStatus || ''), d.receptionSource || 'cell_storage')
|
||||
},
|
||||
{ label: '样本编码', value: d.sampleCode },
|
||||
{
|
||||
label: '来源类型',
|
||||
|
||||
@@ -67,19 +67,19 @@
|
||||
row-key="id"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
/>
|
||||
<el-table-column prop="itemCode" label="检查项编码" min-width="140" align="center" header-align="center" />
|
||||
<el-table-column prop="itemName" label="检查项名称" min-width="160" align="center" header-align="center" />
|
||||
<el-table-column prop="orderNum" label="排序" width="80" align="center" header-align="center" />
|
||||
<el-table-column prop="status" label="状态" width="90" align="center" header-align="center">
|
||||
<el-table-column prop="orderNum" label="排序" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column prop="status" label="状态" min-width="90" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === '1' ? 'success' : 'info'" size="small">{{ row.status === '1' ? '启用' : '停用' }}</el-tag>
|
||||
</template>
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
<el-table-column
|
||||
v-if="activeTab === 'pending'"
|
||||
type="selection"
|
||||
width="48"
|
||||
min-width="48"
|
||||
align="center"
|
||||
header-align="center"
|
||||
reserve-selection
|
||||
@@ -104,13 +104,21 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
/>
|
||||
<el-table-column prop="protocolNo" label="协议号" min-width="130" align="center" header-align="center" />
|
||||
<el-table-column prop="sourceTypeLabel" label="来源类型" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="protocolStatus" label="协议状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag
|
||||
:type="protocolStatusTagTypeBySource(String(row.protocolStatus || ''), row.sourceType || 'cell_storage')"
|
||||
size="small"
|
||||
>{{ protocolStatusLabelBySource(String(row.protocolStatus || ''), row.sourceType || 'cell_storage') }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sourceTypeLabel" label="来源类型" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.sourceType === 'research_donation' ? 'warning' : 'success'" size="small">
|
||||
{{ row.sourceTypeLabel || '细胞存储' }}
|
||||
@@ -132,7 +140,7 @@
|
||||
<el-table-column prop="etaTime" label="预计到达时间" min-width="170" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ row.etaTime || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="transportType" label="运输方式" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="transportType" label="运输方式" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ transportTypeLabel(String(row.transportType || '')) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="waybillNo" label="快递单号" min-width="140" align="center" header-align="center">
|
||||
@@ -159,7 +167,7 @@
|
||||
v-if="activeTab === 'received'"
|
||||
prop="handlerName"
|
||||
label="经手人"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -169,7 +177,7 @@
|
||||
v-if="activeTab === 'received'"
|
||||
prop="acceptConclusion"
|
||||
label="结论"
|
||||
width="90"
|
||||
min-width="90"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -222,6 +230,7 @@
|
||||
<h4 class="detail-section-title">样本信息</h4>
|
||||
<div class="readonly-grid form-grid-3">
|
||||
<div class="readonly-item"><span class="label">协议号</span>{{ currentRow.protocolNo || '-' }}</div>
|
||||
<div class="readonly-item"><span class="label">协议状态</span><el-tag :type="protocolStatusTagTypeBySource(String(currentRow.protocolStatus || ''), currentRow.sourceType || 'cell_storage')" size="small">{{ protocolStatusLabelBySource(String(currentRow.protocolStatus || ''), currentRow.sourceType || 'cell_storage') }}</el-tag></div>
|
||||
<div class="readonly-item"><span class="label">样本编码</span>{{ currentRow.sampleCode || '-' }}</div>
|
||||
<div class="readonly-item"><span class="label">样本类型</span>{{ currentRow.sampleTypeName || '-' }}</div>
|
||||
<div class="readonly-item"><span class="label">预计到达</span>{{ currentRow.etaTime || '-' }}</div>
|
||||
@@ -353,6 +362,7 @@
|
||||
<h4 class="detail-section-title">样本信息</h4>
|
||||
<div class="readonly-grid form-grid-2">
|
||||
<div class="readonly-item"><span class="label">协议号</span>{{ viewRow.protocolNo || '-' }}</div>
|
||||
<div class="readonly-item"><span class="label">协议状态</span><el-tag :type="protocolStatusTagTypeBySource(String(viewRow.protocolStatus || ''), viewRow.sourceType || 'cell_storage')" size="small">{{ protocolStatusLabelBySource(String(viewRow.protocolStatus || ''), viewRow.sourceType || 'cell_storage') }}</el-tag></div>
|
||||
<div class="readonly-item"><span class="label">样本编码</span>{{ viewRow.sampleCode || '-' }}</div>
|
||||
<div class="readonly-item"><span class="label">样本类型</span>{{ viewRow.sampleTypeName || '-' }}</div>
|
||||
<div class="readonly-item"><span class="label">预计到达</span>{{ viewRow.etaTime || '-' }}</div>
|
||||
@@ -439,8 +449,8 @@
|
||||
</h4>
|
||||
<div class="readonly-grid form-grid-2 batch-receive-card__meta">
|
||||
<div class="readonly-item"><span class="label">协议号</span>{{ entry.protocolNo || '—' }}</div>
|
||||
<div class="readonly-item"><span class="label">协议状态</span><el-tag :type="protocolStatusTagTypeBySource(String(entry.protocolStatus || ''), entry.sourceType || 'cell_storage')" size="small">{{ protocolStatusLabelBySource(String(entry.protocolStatus || ''), entry.sourceType || 'cell_storage') }}</el-tag></div>
|
||||
<div class="readonly-item"><span class="label">样本类型</span>{{ entry.sampleTypeName || '—' }}</div>
|
||||
<div class="readonly-item"><span class="label">快递单号</span>{{ entry.waybillNo || '—' }}</div>
|
||||
<div class="readonly-item form-col-span-2">
|
||||
<span class="label">客户</span>{{ entry.motherName || '—' }} / {{ entry.newbornName || '—' }}
|
||||
</div>
|
||||
@@ -569,7 +579,23 @@
|
||||
} from '@/components/business/protocol-finance-confirm-fields/finance-attachments'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import { downloadAttachmentFile } from '@/utils/download-attachment'
|
||||
import { transportTypeLabel, acceptConclusionLabel } from '@/utils/status-tag-registry'
|
||||
import {
|
||||
transportTypeLabel,
|
||||
acceptConclusionLabel,
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
donationStatusLabel,
|
||||
donationStatusTagType,
|
||||
} from '@/utils/status-tag-registry'
|
||||
import type { TagType } from '@/utils/status-tag-registry'
|
||||
|
||||
/** 根据来源类型返回协议状态标签 */
|
||||
function protocolStatusLabelBySource(status: string, source: string): string {
|
||||
return source === 'research_donation' ? donationStatusLabel(status) : protocolStatusLabel(status)
|
||||
}
|
||||
function protocolStatusTagTypeBySource(status: string, source: string): TagType {
|
||||
return source === 'research_donation' ? donationStatusTagType(status) : protocolStatusTagType(status)
|
||||
}
|
||||
|
||||
defineOptions({ name: 'QualityInspectionSampleReception' })
|
||||
|
||||
|
||||
+230
-93
@@ -4,14 +4,31 @@
|
||||
<SystemViewDialog
|
||||
v-model:visible="innerVisible"
|
||||
title="入库放行审核详情"
|
||||
width="960px"
|
||||
:grid-columns="2"
|
||||
width="1120px"
|
||||
:grid-columns="4"
|
||||
compact
|
||||
:icon="CircleCheck"
|
||||
:meta="detail?.review?.protocolNo || ''"
|
||||
:sections="viewSections"
|
||||
:loading="loading"
|
||||
append-to-body
|
||||
modal-class="storage-release-view-dialog-mask"
|
||||
>
|
||||
<template #reception-extra>
|
||||
<div class="view-reception-attachments">
|
||||
<div class="view-kv view-kv-span-2">
|
||||
<dt>接收附件</dt>
|
||||
<dd>
|
||||
<ProtocolAttachmentReadonly
|
||||
:files="viewReceptionAttachmentFiles"
|
||||
@preview="handleReceptionAttachmentPreview"
|
||||
@download="handleReceptionAttachmentDownload"
|
||||
/>
|
||||
</dd>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #qc-tasks>
|
||||
<div v-if="detail?.qcInfo?.tasks?.length" class="view-section-slot">
|
||||
<div class="qc-task-cards">
|
||||
@@ -36,17 +53,9 @@
|
||||
<div class="qc-kv">
|
||||
<span class="qc-kv__label">任务状态</span>
|
||||
<span class="qc-kv__value">
|
||||
<el-tag
|
||||
:type="
|
||||
task.taskStatus === 'ywc'
|
||||
? 'success'
|
||||
: task.taskStatus === 'jxz'
|
||||
? 'warning'
|
||||
: 'info'
|
||||
"
|
||||
size="small"
|
||||
>{{ task.taskStatusLabel || task.taskStatus || '—' }}</el-tag
|
||||
>
|
||||
<el-tag :type="taskStatusTagType(task.taskStatus)" size="small">{{
|
||||
task.taskStatusLabel || taskStatusLabel(task.taskStatus || '') || '—'
|
||||
}}</el-tag>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -63,17 +72,9 @@
|
||||
<div class="qc-task-card__header">
|
||||
<span class="qc-task-card__name">{{ task.taskName || task.taskNo || '—' }}</span>
|
||||
<span class="qc-task-card__conclusion">
|
||||
<el-tag
|
||||
:type="
|
||||
task.taskStatus === 'ywc'
|
||||
? 'success'
|
||||
: task.taskStatus === 'jxz'
|
||||
? 'warning'
|
||||
: 'info'
|
||||
"
|
||||
size="small"
|
||||
>{{ task.taskStatusLabel || task.taskStatus || '—' }}</el-tag
|
||||
>
|
||||
<el-tag :type="taskStatusTagType(task.taskStatus)" size="small">{{
|
||||
task.taskStatusLabel || productionTaskStatusLabel(task.taskStatus || '') || '—'
|
||||
}}</el-tag>
|
||||
</span>
|
||||
</div>
|
||||
<div class="qc-task-card__body">
|
||||
@@ -113,25 +114,31 @@
|
||||
import SystemViewDialog from '@/components/business/system-view-dialog/index.vue'
|
||||
import type { ViewSection } from '@/components/business/system-view-dialog/index.vue'
|
||||
import ProtocolAttachmentReadonly from '@/views/cell-storage/protocol/ProtocolAttachmentReadonly.vue'
|
||||
import type { QcWorkOrderReceptionDetail } from '@/api/qc-work-order'
|
||||
import {
|
||||
fetchStorageReleaseReviewDetail,
|
||||
type StorageReleaseReview,
|
||||
type StorageReleaseReviewDetail,
|
||||
type ProtocolInfo,
|
||||
type TransportInfo,
|
||||
type ReceptionInfo,
|
||||
type QcInfo,
|
||||
type ProductionInfo
|
||||
type ProtocolInfo
|
||||
} from '@/api/storage-release-review'
|
||||
import {
|
||||
receptionSourceLabel,
|
||||
receptionSourceTagType,
|
||||
storageReleaseConclusionLabel,
|
||||
storageReleaseConclusionTagType,
|
||||
acceptConclusionLabel,
|
||||
acceptConclusionTagType,
|
||||
transportTypeLabel
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
donationStatusLabel,
|
||||
donationStatusTagType
|
||||
} from '@/utils/status-tag-registry'
|
||||
import {
|
||||
workOrderStatusLabel,
|
||||
workOrderStatusTagType,
|
||||
acceptConclusionLabel,
|
||||
transportTypeLabel,
|
||||
taskStatusLabel,
|
||||
taskStatusTagType
|
||||
} from '@/utils/qc-labels'
|
||||
import { downloadAttachmentFile } from '@/utils/download-attachment'
|
||||
|
||||
const props = defineProps<{
|
||||
@@ -153,6 +160,35 @@
|
||||
|
||||
const minioBaseUrl = (import.meta.env.VITE_MINIO_BASE_URL || '').replace(/\/$/, '')
|
||||
|
||||
const PRODUCTION_WO_STATUS_LABELS: Record<string, string> = {
|
||||
dpz: '待配置',
|
||||
jxz: '进行中',
|
||||
ywc: '已完成'
|
||||
}
|
||||
|
||||
const PRODUCTION_TASK_STATUS_LABELS: Record<string, string> = {
|
||||
dpz: '待配置',
|
||||
dzx: '待执行',
|
||||
jxz: '执行中',
|
||||
ywc: '已完成'
|
||||
}
|
||||
|
||||
function productionWorkOrderStatusLabel(status?: string) {
|
||||
const s = status || ''
|
||||
return PRODUCTION_WO_STATUS_LABELS[s] || s || '—'
|
||||
}
|
||||
|
||||
function productionWorkOrderStatusTagType(status?: string) {
|
||||
if (status === 'ywc') return 'success' as const
|
||||
if (status === 'jxz') return 'warning' as const
|
||||
return 'info' as const
|
||||
}
|
||||
|
||||
function productionTaskStatusLabel(status?: string) {
|
||||
const s = status || ''
|
||||
return PRODUCTION_TASK_STATUS_LABELS[s] || s || '—'
|
||||
}
|
||||
|
||||
watch(
|
||||
() => [props.visible, props.reviewId] as const,
|
||||
async ([vis, id]) => {
|
||||
@@ -172,11 +208,67 @@
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
function formatVal(v: unknown) {
|
||||
function formatMetric(v: unknown) {
|
||||
if (v === null || v === undefined || v === '') return '—'
|
||||
return String(v)
|
||||
}
|
||||
|
||||
function formatCheckResults(
|
||||
items?: Array<{ itemName?: string; checked?: boolean }>
|
||||
) {
|
||||
if (!items?.length) return '—'
|
||||
return items.map((x) => `${x.itemName || ''}${x.checked ? '(✓)' : '(×)'}`).join('、')
|
||||
}
|
||||
|
||||
function protocolStatusDisplay(proto: Partial<ProtocolInfo>, source: string) {
|
||||
const status = proto.protocolStatus || ''
|
||||
if (!status) return { value: '—', tagType: 'info' as const }
|
||||
const isDonation = source === 'research_donation'
|
||||
return {
|
||||
value: isDonation ? donationStatusLabel(status) : protocolStatusLabel(status),
|
||||
tagType: isDonation ? donationStatusTagType(status) : protocolStatusTagType(status)
|
||||
}
|
||||
}
|
||||
|
||||
const viewReception = computed(() => {
|
||||
const d = detail.value
|
||||
if (!d) return {} as QcWorkOrderReceptionDetail
|
||||
if (d.reception) return d.reception
|
||||
const ri = d.receptionInfo || {}
|
||||
return {
|
||||
receptionTime: ri.receptionTime,
|
||||
handlerName: ri.handlerName,
|
||||
receiveTemperature: ri.receiveTemperature,
|
||||
volumeMl: ri.volumeMl,
|
||||
netWeightG: ri.netWeightG,
|
||||
acceptConclusion: ri.acceptConclusion,
|
||||
transportType: d.transportInfo?.transportType,
|
||||
waybillNo: d.transportInfo?.waybillNo,
|
||||
carrierName: d.transportInfo?.carrierName,
|
||||
carrierPhone: d.transportInfo?.carrierPhone,
|
||||
etaTime: d.transportInfo?.etaTime
|
||||
} as QcWorkOrderReceptionDetail
|
||||
})
|
||||
|
||||
const viewReceptionAttachmentFiles = computed(() => {
|
||||
const r = viewReception.value
|
||||
if (!r) return []
|
||||
if (Array.isArray(r.receiveAttachmentFiles) && r.receiveAttachmentFiles.length) {
|
||||
return r.receiveAttachmentFiles as Array<Record<string, unknown>>
|
||||
}
|
||||
const urls = String(r.receiveAttachments || '')
|
||||
if (!urls.trim()) return []
|
||||
return urls
|
||||
.split(',')
|
||||
.map((u, i) => {
|
||||
const url = u.trim()
|
||||
if (!url) return null
|
||||
const name = url.includes('/') ? url.split('/').pop() || `附件${i + 1}` : url
|
||||
return { id: `url_${i}`, fileUrl: url, fileName: name }
|
||||
})
|
||||
.filter(Boolean) as Array<Record<string, unknown>>
|
||||
})
|
||||
|
||||
const reviewAttachmentFiles = computed(() => {
|
||||
const urls = detail.value?.review?.reviewAttachments || ''
|
||||
if (!urls.trim()) return []
|
||||
@@ -196,19 +288,48 @@
|
||||
if (!d) return []
|
||||
const rev: Partial<StorageReleaseReview> = d.review || {}
|
||||
const proto: Partial<ProtocolInfo> = d.protocolInfo || {}
|
||||
const transport: Partial<TransportInfo> = d.transportInfo || {}
|
||||
const reception: Partial<ReceptionInfo> = d.receptionInfo || {}
|
||||
const qc: Partial<QcInfo> = d.qcInfo || {}
|
||||
const production: Partial<ProductionInfo> = d.productionInfo || {}
|
||||
const r = viewReception.value
|
||||
const qc = d.qcInfo || {}
|
||||
const production = d.productionInfo || {}
|
||||
const source = rev.receptionSource || 'cell_storage'
|
||||
const protocolStatus = protocolStatusDisplay(proto, source)
|
||||
|
||||
const reviewConclusionValue = rev.reviewConclusion || ''
|
||||
const reviewConclusionDisplay = reviewConclusionValue
|
||||
? storageReleaseConclusionLabel(reviewConclusionValue)
|
||||
: '待审核'
|
||||
const reviewConclusionTagType = reviewConclusionValue
|
||||
const reviewConclusionTag = reviewConclusionValue
|
||||
? storageReleaseConclusionTagType(reviewConclusionValue)
|
||||
: 'info'
|
||||
|
||||
const transportFields: ViewSection['fields'] = [
|
||||
{
|
||||
label: '运输方式',
|
||||
value: transportTypeLabel(String(r.transportType || ''))
|
||||
}
|
||||
]
|
||||
if (r.transportType === 'kdys') {
|
||||
transportFields.push(
|
||||
{ label: '快递公司', value: r.expressCompanyName || '—' },
|
||||
{ label: '快递单号', value: r.waybillNo || '—' }
|
||||
)
|
||||
} else if (r.transportType === 'ryxd') {
|
||||
transportFields.push(
|
||||
{ label: '携带人', value: r.carrierName || '—' },
|
||||
{ label: '携带人电话', value: r.carrierPhone || '—' }
|
||||
)
|
||||
}
|
||||
if (r.etaTime) {
|
||||
transportFields.push({ label: '预计到达', value: r.etaTime })
|
||||
}
|
||||
const transportSection =
|
||||
transportFields.length > 1 || r.transportType
|
||||
? [{ title: '运输信息', fields: transportFields }]
|
||||
: []
|
||||
|
||||
const qcWoStatus = qc.workOrderStatus || ''
|
||||
const prodWoStatus = production.workOrderStatus || ''
|
||||
|
||||
return [
|
||||
{
|
||||
title: '基础信息',
|
||||
@@ -219,44 +340,41 @@
|
||||
value: receptionSourceLabel(rev.receptionSource || ''),
|
||||
tagType: receptionSourceTagType(rev.receptionSource || '')
|
||||
},
|
||||
{
|
||||
label: '协议状态',
|
||||
value: protocolStatus.value,
|
||||
tagType: protocolStatus.tagType
|
||||
},
|
||||
{ label: '样本编码', value: proto.sampleCode || rev.sampleCode || '—' },
|
||||
{ label: '样本名称', value: rev.sampleName || '—' },
|
||||
{ label: '样本类型', value: proto.sampleTypeName || '—' },
|
||||
{ label: '样本类型', value: proto.sampleTypeName || r.sampleTypeName || '—' },
|
||||
{ label: '母亲姓名', value: proto.motherName || '—' },
|
||||
{ label: '母亲电话', value: proto.motherPhone || '—' },
|
||||
{ label: '新生儿姓名', value: proto.newbornName || '—' }
|
||||
]
|
||||
},
|
||||
...transportSection,
|
||||
{
|
||||
title: '运输信息',
|
||||
fields: transport.transportType
|
||||
? [
|
||||
{ label: '运输方式', value: transportTypeLabel(transport.transportType) },
|
||||
...(transport.transportType === 'kdys'
|
||||
? [{ label: '快递单号', value: transport.waybillNo || '—' }]
|
||||
: [
|
||||
{ label: '携带人', value: transport.carrierName || '—' },
|
||||
{ label: '携带人电话', value: transport.carrierPhone || '—' }
|
||||
]),
|
||||
{ label: '预计到达', value: transport.etaTime || '—' }
|
||||
]
|
||||
: []
|
||||
},
|
||||
{
|
||||
title: '接收信息',
|
||||
fields: reception.receptionTime
|
||||
? [
|
||||
{ label: '接收时间', value: reception.receptionTime || '—' },
|
||||
{ label: '接收经手人', value: reception.handlerName || '—' },
|
||||
{
|
||||
label: '接收结论',
|
||||
value: acceptConclusionLabel(reception.acceptConclusion || ''),
|
||||
tagType: acceptConclusionTagType(reception.acceptConclusion || '')
|
||||
},
|
||||
{ label: '接收温度(℃)', value: formatVal(reception.receiveTemperature) },
|
||||
{ label: '体积(ml)', value: formatVal(reception.volumeMl) }
|
||||
]
|
||||
: []
|
||||
title: '样本接收',
|
||||
slot: 'reception-extra',
|
||||
fields: [
|
||||
{ label: '接收时间', value: r.receptionTime || '—' },
|
||||
{ label: '接收经手人', value: r.handlerName || '—' },
|
||||
{
|
||||
label: '接收温度(℃)',
|
||||
value: r.receiveTemperature ? `${r.receiveTemperature}℃` : '—'
|
||||
},
|
||||
{ label: '体积(ml)', value: formatMetric(r.volumeMl) },
|
||||
{ label: '净重(g)', value: formatMetric(r.netWeightG) },
|
||||
{
|
||||
label: '结论',
|
||||
value: r.acceptConclusionLabel || acceptConclusionLabel(String(r.acceptConclusion || '')),
|
||||
tagType:
|
||||
r.acceptConclusion === 'js' ? 'success' : r.acceptConclusion === 'jj' ? 'danger' : 'info'
|
||||
},
|
||||
{ label: '检查项', value: formatCheckResults(r.checkResults), span: true },
|
||||
{ label: '备注', value: r.remark || '—', span: true }
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '质检信息',
|
||||
@@ -266,17 +384,11 @@
|
||||
{
|
||||
label: '工单状态',
|
||||
value:
|
||||
qc.workOrderStatus === 'ywc'
|
||||
? '已完成'
|
||||
: qc.workOrderStatus === 'ypz'
|
||||
? '已配置'
|
||||
: qc.workOrderStatus || '—',
|
||||
tagType:
|
||||
qc.workOrderStatus === 'ywc'
|
||||
? 'success'
|
||||
: qc.workOrderStatus === 'ypz'
|
||||
? 'warning'
|
||||
: 'info'
|
||||
qc.workOrderStatusLabel ||
|
||||
workOrderStatusLabel(qcWoStatus) ||
|
||||
qcWoStatus ||
|
||||
'—',
|
||||
tagType: workOrderStatusTagType(qcWoStatus)
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -288,17 +400,11 @@
|
||||
{
|
||||
label: '工单状态',
|
||||
value:
|
||||
production.workOrderStatus === 'ywc'
|
||||
? '已完成'
|
||||
: production.workOrderStatus === 'jxz'
|
||||
? '执行中'
|
||||
: production.workOrderStatus || '—',
|
||||
tagType:
|
||||
production.workOrderStatus === 'ywc'
|
||||
? 'success'
|
||||
: production.workOrderStatus === 'jxz'
|
||||
? 'warning'
|
||||
: 'info'
|
||||
production.workOrderStatusLabel ||
|
||||
productionWorkOrderStatusLabel(prodWoStatus) ||
|
||||
prodWoStatus ||
|
||||
'—',
|
||||
tagType: productionWorkOrderStatusTagType(prodWoStatus)
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -309,7 +415,7 @@
|
||||
{
|
||||
label: '审核结论',
|
||||
value: reviewConclusionDisplay,
|
||||
tagType: reviewConclusionTagType
|
||||
tagType: reviewConclusionTag
|
||||
},
|
||||
{ label: '审核人', value: rev.reviewByName || '—' },
|
||||
{ label: '审核时间', value: rev.reviewTime || '—' },
|
||||
@@ -326,14 +432,22 @@
|
||||
return minioBaseUrl ? `${minioBaseUrl}/${u.replace(/^\//, '')}` : u
|
||||
}
|
||||
|
||||
function handleAttachmentPreview(file: Record<string, unknown>) {
|
||||
function handleReceptionAttachmentPreview(file: Record<string, unknown>) {
|
||||
const url = attachmentFullUrl(String(file.fileUrl || ''))
|
||||
if (url) window.open(url, '_blank')
|
||||
}
|
||||
|
||||
function handleAttachmentDownload(file: Record<string, unknown>) {
|
||||
function handleReceptionAttachmentDownload(file: Record<string, unknown>) {
|
||||
downloadAttachmentFile(file, { fullFileUrl: attachmentFullUrl })
|
||||
}
|
||||
|
||||
function handleAttachmentPreview(file: Record<string, unknown>) {
|
||||
handleReceptionAttachmentPreview(file)
|
||||
}
|
||||
|
||||
function handleAttachmentDownload(file: Record<string, unknown>) {
|
||||
handleReceptionAttachmentDownload(file)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@@ -400,4 +514,27 @@
|
||||
color: #94a3b8;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.view-reception-attachments {
|
||||
margin-top: 4px;
|
||||
|
||||
.view-kv {
|
||||
display: grid;
|
||||
grid-template-columns: 96px 1fr;
|
||||
gap: 8px 12px;
|
||||
font-size: 13px;
|
||||
align-items: start;
|
||||
|
||||
dt {
|
||||
margin: 0;
|
||||
color: #64748b;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin: 0;
|
||||
color: #1e293b;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
class="list-table"
|
||||
class="list-table storage-release-review-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
stripe
|
||||
@@ -114,32 +114,86 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="50" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="50" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
prop="protocolNo"
|
||||
label="协议编号"
|
||||
width="160"
|
||||
min-width="160"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="sampleCode"
|
||||
label="样本编码"
|
||||
width="140"
|
||||
min-width="140"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="sampleName"
|
||||
label="样本名称"
|
||||
width="140"
|
||||
min-width="140"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="sampleTypeName"
|
||||
label="样本类型"
|
||||
min-width="110"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="{ row }">{{ row.sampleTypeName || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="handlerName"
|
||||
label="接收人"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="{ row }">{{ row.handlerName || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="receptionTime"
|
||||
label="接收时间"
|
||||
min-width="170"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="{ row }">{{ row.receptionTime || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="motherName"
|
||||
label="母亲姓名"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="{ row }">{{ row.motherName || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="protocolStatus"
|
||||
label="协议状态"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag
|
||||
v-if="row.protocolStatus"
|
||||
:type="protocolStatusTagForRow(row)"
|
||||
size="small"
|
||||
>
|
||||
{{ protocolStatusLabelForRow(row) }}
|
||||
</el-tag>
|
||||
<span v-else>—</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="receptionSource"
|
||||
label="协议类别"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -152,7 +206,7 @@
|
||||
<el-table-column
|
||||
prop="reviewConclusion"
|
||||
label="审核结论"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -170,7 +224,7 @@
|
||||
<el-table-column
|
||||
prop="storageStatus"
|
||||
label="入库状态"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -183,20 +237,20 @@
|
||||
<el-table-column
|
||||
prop="reviewByName"
|
||||
label="审核人"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="reviewTime"
|
||||
label="审核时间"
|
||||
width="170"
|
||||
min-width="170"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
min-width="260"
|
||||
min-width="220"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
@@ -259,12 +313,33 @@
|
||||
storageReleaseConclusionLabel,
|
||||
storageReleaseConclusionTagType,
|
||||
storageStatusLabel,
|
||||
storageStatusTagType
|
||||
storageStatusTagType,
|
||||
protocolStatusLabel,
|
||||
protocolStatusTagType,
|
||||
donationStatusLabel,
|
||||
donationStatusTagType
|
||||
} from '@/utils/status-tag-registry'
|
||||
import { withFullscreenLoading, fullscreenLoadingText } from '@/utils/fullscreen-loading'
|
||||
|
||||
defineOptions({ name: 'QualityInspectionStorageReleaseReview' })
|
||||
|
||||
function protocolStatusLabelForRow(row: StorageReleaseReview) {
|
||||
if (row.protocolStatusLabel) return row.protocolStatusLabel
|
||||
const status = row.protocolStatus || ''
|
||||
if (!status) return '—'
|
||||
return row.receptionSource === 'research_donation'
|
||||
? donationStatusLabel(status)
|
||||
: protocolStatusLabel(status)
|
||||
}
|
||||
|
||||
function protocolStatusTagForRow(row: StorageReleaseReview) {
|
||||
const status = row.protocolStatus || ''
|
||||
if (!status) return 'info'
|
||||
return row.receptionSource === 'research_donation'
|
||||
? donationStatusTagType(status)
|
||||
: protocolStatusTagType(status)
|
||||
}
|
||||
|
||||
const receptionSourceOptions = [
|
||||
{ value: 'cell_storage', label: '细胞存储' },
|
||||
{ value: 'research_donation', label: '科研捐赠' }
|
||||
@@ -396,3 +471,14 @@
|
||||
loadData()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
/* Narrower op column than global 260px (fits 查看/审核/样本入库) */
|
||||
.storage-release-review-table {
|
||||
:deep(td.el-table__cell:has(.btn-op-item)),
|
||||
:deep(td.el-table-fixed-column--right:has(.btn-op-item)),
|
||||
:deep(th.el-table-fixed-column--right) {
|
||||
min-width: 220px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
:index="(i) => (pagination.page - 1) * pagination.pageSize + i + 1"
|
||||
/>
|
||||
@@ -71,7 +71,7 @@
|
||||
<el-table-column prop="companyName" label="公司名称" min-width="160" align="center" />
|
||||
<el-table-column prop="contactName" label="联系人" min-width="100" align="center" />
|
||||
<el-table-column prop="contactPhone" label="联系电话" min-width="120" align="center" />
|
||||
<el-table-column prop="status" label="状态" width="90" align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === '1' ? 'success' : 'info'" size="small">{{ row.status === '1' ? '启用' : '停用' }}</el-tag>
|
||||
</template>
|
||||
@@ -199,14 +199,14 @@
|
||||
max-height="460"
|
||||
@selection-change="onItemSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column type="index" label="序号" width="68" align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" />
|
||||
<el-table-column prop="itemCode" label="项目编码" min-width="120" align="center" />
|
||||
<el-table-column prop="itemName" label="项目名称" min-width="160" align="center" />
|
||||
<el-table-column prop="feeAmount" label="费用(元)" width="110" align="center">
|
||||
<el-table-column prop="feeAmount" label="费用(元)" min-width="110" align="center">
|
||||
<template #default="{ row }">{{ row.feeAmount != null ? `¥${row.feeAmount}` : '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="90" align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === '1' ? 'success' : 'info'" size="small">{{ row.status === '1' ? '启用' : '停用' }}</el-tag>
|
||||
</template>
|
||||
@@ -291,7 +291,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="56"
|
||||
min-width="56"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(i) => i + 1"
|
||||
@@ -328,7 +328,7 @@
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="类型" width="110" align="center" header-align="center">
|
||||
<el-table-column label="类型" min-width="110" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-select v-model="row.paramType" class="inner-cell-select">
|
||||
<el-option label="文本" value="text" />
|
||||
@@ -336,12 +336,12 @@
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="必填" width="72" align="center" header-align="center">
|
||||
<el-table-column label="必填" min-width="72" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-switch v-model="row.requiredFlag" active-value="1" inactive-value="0" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80" align="center" header-align="center">
|
||||
<el-table-column label="操作" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ $index }">
|
||||
<el-button link type="danger" size="small" @click="removeItemParam($index)">删除</el-button>
|
||||
</template>
|
||||
|
||||
@@ -105,11 +105,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -124,7 +124,7 @@
|
||||
<el-table-column
|
||||
prop="donationStatus"
|
||||
label="状态"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -137,7 +137,7 @@
|
||||
<el-table-column
|
||||
prop="donationDate"
|
||||
label="捐赠日期"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -172,7 +172,7 @@
|
||||
<el-table-column
|
||||
prop="newbornSex"
|
||||
label="新生儿性别"
|
||||
width="110"
|
||||
min-width="110"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -183,7 +183,7 @@
|
||||
<el-table-column
|
||||
prop="deliveryMode"
|
||||
label="分娩方式"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -194,7 +194,7 @@
|
||||
<el-table-column
|
||||
prop="newbornWeightGram"
|
||||
label="新生儿体重(克)"
|
||||
width="140"
|
||||
min-width="140"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
|
||||
@@ -496,7 +496,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -510,7 +510,7 @@
|
||||
<el-table-column
|
||||
prop="auditStatus"
|
||||
label="审核状态"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
|
||||
@@ -73,11 +73,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -92,7 +92,7 @@
|
||||
<el-table-column
|
||||
prop="donationStatus"
|
||||
label="状态"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -105,7 +105,7 @@
|
||||
<el-table-column
|
||||
prop="donationDate"
|
||||
label="捐赠日期"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -140,7 +140,7 @@
|
||||
<el-table-column
|
||||
prop="newbornSex"
|
||||
label="新生儿性别"
|
||||
width="110"
|
||||
min-width="110"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -151,7 +151,7 @@
|
||||
<el-table-column
|
||||
prop="deliveryMode"
|
||||
label="分娩方式"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -162,7 +162,7 @@
|
||||
<el-table-column
|
||||
prop="newbornWeightGram"
|
||||
label="新生儿体重(克)"
|
||||
width="140"
|
||||
min-width="140"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -210,7 +210,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="320"
|
||||
min-width="320"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -91,11 +91,11 @@
|
||||
@selection-change="handleCategoryTableSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="index => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -115,7 +115,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="图片" width="80" align="center" header-align="center">
|
||||
<el-table-column label="图片" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-image
|
||||
v-if="row.imageUrl"
|
||||
@@ -126,25 +126,25 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="parameterCount" label="参数数量" width="100" align="center">
|
||||
<el-table-column prop="parameterCount" label="参数数量" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.parameterCount > 0" type="primary" size="small">{{ row.parameterCount }}</el-tag>
|
||||
<span v-else class="text-gray">-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="价格系数" width="110" align="center">
|
||||
<el-table-column label="价格系数" min-width="110" align="center">
|
||||
<template #default="{ row }">
|
||||
<span>{{ formatPriceCoefficient(row.priceCoefficient) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="isActive" label="状态" width="80" align="center" header-align="center">
|
||||
<el-table-column prop="isActive" label="状态" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.isActive ? 'success' : 'info'" size="small">
|
||||
{{ row.isActive ? '启用' : '禁用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createAt" label="创建时间" width="180" align="center" header-align="center" />
|
||||
<el-table-column prop="createAt" label="创建时间" min-width="180" align="center" header-align="center" />
|
||||
<el-table-column label="操作" min-width="400" fixed="right" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button class="btn-op-item" @click="handleView(row)"><el-icon><View /></el-icon>查看</el-button>
|
||||
@@ -377,11 +377,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-click="handleRowClick"
|
||||
>
|
||||
<el-table-column type="selection" width="50" fixed />
|
||||
<el-table-column type="selection" min-width="50" fixed />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
fixed
|
||||
@@ -389,7 +389,7 @@
|
||||
/>
|
||||
<el-table-column prop="name" label="参数名称" min-width="120" />
|
||||
<el-table-column prop="code" label="参数编码" min-width="100" />
|
||||
<el-table-column label="参数类型" width="90" align="center">
|
||||
<el-table-column label="参数类型" min-width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.paramType === 'text'" type="info">文本</el-tag>
|
||||
<el-tag v-else-if="row.paramType === 'select'" type="primary">下拉</el-tag>
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
prop="deptName"
|
||||
label="组织名称"
|
||||
@@ -68,7 +68,7 @@
|
||||
<el-table-column
|
||||
prop="deptCategoryCode"
|
||||
label="组织类别"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -79,7 +79,7 @@
|
||||
<el-table-column
|
||||
prop="status"
|
||||
label="状态"
|
||||
width="80"
|
||||
min-width="80"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -92,20 +92,20 @@
|
||||
<el-table-column
|
||||
prop="leader"
|
||||
label="负责人"
|
||||
width="160"
|
||||
min-width="160"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="leaderPhone"
|
||||
label="联系电话"
|
||||
width="180"
|
||||
min-width="180"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="400"
|
||||
min-width="400"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -64,14 +64,14 @@
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55"
|
||||
min-width="55"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -106,7 +106,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="400"
|
||||
min-width="400"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
@@ -224,7 +224,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -288,7 +288,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="
|
||||
@@ -320,7 +320,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="260"
|
||||
min-width="260"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -54,18 +54,18 @@
|
||||
v-loading="loading"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column prop="leaveTypeLabel" label="请假类型" width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="startDate" label="开始日期" width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="endDate" label="结束日期" width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="days" label="天数" width="80" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column prop="leaveTypeLabel" label="请假类型" min-width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="startDate" label="开始日期" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="endDate" label="结束日期" min-width="120" align="center" header-align="center" />
|
||||
<el-table-column prop="days" label="天数" min-width="80" align="center" header-align="center" />
|
||||
<el-table-column prop="reason" label="请假原因" min-width="180" show-overflow-tooltip />
|
||||
<el-table-column prop="status" label="状态" width="100" align="center" header-align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="statusTagType(row.status)" size="small">{{ statusLabel(row.status) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" width="180" align="center" header-align="center" />
|
||||
<el-table-column prop="createTime" label="创建时间" min-width="180" align="center" header-align="center" />
|
||||
<el-table-column label="操作" fixed="right" min-width="260" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.status === 'draft' || row.status === 'rejected'">
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55"
|
||||
min-width="55"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -72,7 +72,7 @@
|
||||
<el-table-column
|
||||
prop="menuType"
|
||||
label="类型"
|
||||
width="90"
|
||||
min-width="90"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -121,7 +121,7 @@
|
||||
<el-table-column
|
||||
prop="visible"
|
||||
label="可见"
|
||||
width="80"
|
||||
min-width="80"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -134,7 +134,7 @@
|
||||
<el-table-column
|
||||
prop="status"
|
||||
label="状态"
|
||||
width="80"
|
||||
min-width="80"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -146,7 +146,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="400"
|
||||
min-width="400"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -115,12 +115,12 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="index => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
/>
|
||||
<el-table-column type="expand" width="48">
|
||||
<el-table-column type="expand" min-width="48">
|
||||
<template #default="{ row }">
|
||||
<div class="order-row-expand-wrap" v-loading="!!expandedRowLoadingMap[row.id]">
|
||||
<div
|
||||
@@ -134,7 +134,7 @@
|
||||
class="order-row-expand-table sqxp-subtable"
|
||||
@row-dblclick="openOrderProductView"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="68" align="center" header-align="center" :index="index => index + 1" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" :index="index => index + 1" />
|
||||
<el-table-column prop="productName" label="商品" min-width="220">
|
||||
<template #default="{ row: line }">
|
||||
<div class="expand-product-cell">
|
||||
@@ -147,11 +147,11 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="supplierName" label="供货商" min-width="120" />
|
||||
<el-table-column label="计量" width="88" align="center">
|
||||
<el-table-column label="计量" min-width="88" align="center">
|
||||
<template #default="{ row: line }">{{ formatMeasureCell(line.measureValue) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="unitName" label="单位" width="70" align="center" />
|
||||
<el-table-column prop="quantity" label="数量" width="80" align="right" />
|
||||
<el-table-column prop="unitName" label="单位" min-width="70" align="center" />
|
||||
<el-table-column prop="quantity" label="数量" min-width="80" align="right" />
|
||||
<el-table-column label="供货价" min-width="110" align="right">
|
||||
<template #default="{ row: line }">¥{{ formatAmount(line.supplierUnitPrice) }}</template>
|
||||
</el-table-column>
|
||||
@@ -429,7 +429,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="index => index + 1"
|
||||
@@ -477,7 +477,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="supplierName" label="供货商" min-width="130" align="center" />
|
||||
<el-table-column label="计量" width="100" align="center">
|
||||
<el-table-column label="计量" min-width="100" align="center">
|
||||
<template #default="{ row }">{{ formatMeasureCell(row.measureValue) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="unitName" label="单位" min-width="80" align="center" />
|
||||
@@ -964,7 +964,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="index => index + 1"
|
||||
@@ -1012,7 +1012,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="supplierName" label="供货商" min-width="130" align="center" />
|
||||
<el-table-column label="计量" width="100" align="center">
|
||||
<el-table-column label="计量" min-width="100" align="center">
|
||||
<template #default="{ row }">{{ formatMeasureCell(row.measureValue) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="unitName" label="单位" min-width="80" align="center" />
|
||||
@@ -1290,7 +1290,7 @@
|
||||
v-loading="adjustItemsLoading"
|
||||
@row-dblclick="openOrderProductView"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="68" align="center" header-align="center" :index="index => index + 1" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" :index="index => index + 1" />
|
||||
<el-table-column
|
||||
prop="productName"
|
||||
label="商品名称"
|
||||
@@ -1429,7 +1429,7 @@
|
||||
header-align="center"
|
||||
@row-dblclick="openOrderProductView"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="68" align="center" header-align="center" :index="index => index + 1" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" :index="index => index + 1" />
|
||||
<el-table-column prop="productName" label="商品名称" min-width="200" align="center">
|
||||
<template #default="{ row }">
|
||||
<div class="order-pv-name-cell">
|
||||
@@ -1464,7 +1464,7 @@
|
||||
<el-table-column label="供货商" min-width="120" align="center">
|
||||
<template #default>{{ orderPriceVersionDetail?.supplierName || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="计量" width="88" align="center">
|
||||
<el-table-column label="计量" min-width="88" align="center">
|
||||
<template #default="{ row }">{{ formatMeasureCell(row.measureValue) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="unitName" label="单位" min-width="72" align="center" />
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -85,12 +85,13 @@
|
||||
stripe
|
||||
row-key="id"
|
||||
@selection-change="handleProductTableSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="index => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -716,11 +717,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-click="handleRowClick"
|
||||
>
|
||||
<el-table-column type="selection" width="50" fixed />
|
||||
<el-table-column type="selection" min-width="50" fixed />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
fixed
|
||||
@@ -728,7 +729,7 @@
|
||||
/>
|
||||
<el-table-column prop="name" label="参数名称" min-width="120" />
|
||||
<el-table-column prop="code" label="参数编码" min-width="100" />
|
||||
<el-table-column label="参数类型" width="90" align="center">
|
||||
<el-table-column label="参数类型" min-width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.paramType === 'text'" type="info">文本</el-tag>
|
||||
<el-tag v-else-if="row.paramType === 'select'" type="primary">下拉</el-tag>
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index: number) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -89,7 +89,7 @@
|
||||
<el-table-column
|
||||
prop="status"
|
||||
label="状态"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
@@ -108,7 +108,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="480"
|
||||
min-width="480"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55"
|
||||
min-width="55"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:selectable="rowSelectable"
|
||||
@@ -73,7 +73,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -127,7 +127,7 @@
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="320"
|
||||
min-width="320"
|
||||
fixed="right"
|
||||
align="center"
|
||||
header-align="center"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
@row-dblclick="handleView"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
<span class="card-title">最近登录记录</span>
|
||||
</div>
|
||||
<el-table :data="loginLogs" stripe max-height="300">
|
||||
<el-table-column type="index" label="序号" width="68" align="center" header-align="center" :index="index => index + 1" />
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" :index="index => index + 1" />
|
||||
<el-table-column prop="loginTime" label="登录时间" min-width="180" />
|
||||
<el-table-column prop="ipAddress" label="IP地址" min-width="150" />
|
||||
<el-table-column prop="loginLocation" label="登录地点" min-width="150" />
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index: number) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -98,7 +98,7 @@
|
||||
{{ row.phoneNo || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="80" align="center" header-align="center">
|
||||
<el-table-column prop="status" label="状态" min-width="80" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === '1' ? 'success' : 'info'" size="small">
|
||||
{{ row.status === '1' ? '正常' : '停用' }}
|
||||
|
||||
@@ -47,11 +47,12 @@
|
||||
v-loading="loading"
|
||||
stripe
|
||||
row-key="id"
|
||||
@row-dblclick="handleViewDetail"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -67,7 +68,7 @@
|
||||
<el-table-column
|
||||
prop="businessTypeLabel"
|
||||
label="业务类型"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -82,7 +83,7 @@
|
||||
<el-table-column
|
||||
prop="status"
|
||||
label="状态"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
>
|
||||
|
||||
@@ -64,11 +64,11 @@
|
||||
row-key="id"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" header-align="center" />
|
||||
<el-table-column type="selection" min-width="55" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -76,7 +76,7 @@
|
||||
<el-table-column
|
||||
prop="processCode"
|
||||
label="流程编码"
|
||||
width="150"
|
||||
min-width="150"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -87,7 +87,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column label="状态" width="100" align="center" header-align="center">
|
||||
<el-table-column label="状态" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<el-switch
|
||||
:model-value="row.status"
|
||||
@@ -97,7 +97,7 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="最新版本" width="100" align="center" header-align="center">
|
||||
<el-table-column label="最新版本" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.latestVersion != null ? `V${row.latestVersion}` : '--' }}
|
||||
</template>
|
||||
@@ -105,7 +105,7 @@
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="创建时间"
|
||||
width="160"
|
||||
min-width="160"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
|
||||
@@ -40,11 +40,12 @@
|
||||
v-loading="loading"
|
||||
stripe
|
||||
row-key="id"
|
||||
@row-dblclick="handleViewDetail"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -59,7 +60,7 @@
|
||||
<el-table-column
|
||||
prop="businessTypeLabel"
|
||||
label="业务类型"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -74,11 +75,11 @@
|
||||
<el-table-column
|
||||
prop="starterUserName"
|
||||
label="发起人"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column label="审批结果" width="100" align="center" header-align="center">
|
||||
<el-table-column label="审批结果" min-width="100" align="center" header-align="center">
|
||||
<template #default="{ row }">
|
||||
<ProcessStatusTag :status="row.status || ''" />
|
||||
</template>
|
||||
|
||||
@@ -40,11 +40,12 @@
|
||||
v-loading="loading"
|
||||
stripe
|
||||
row-key="id"
|
||||
@row-dblclick="handleViewDetail"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="68"
|
||||
min-width="68"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:index="(index) => (pagination.page - 1) * pagination.pageSize + index + 1"
|
||||
@@ -52,7 +53,7 @@
|
||||
<el-table-column
|
||||
prop="processName"
|
||||
label="流程名称"
|
||||
width="160"
|
||||
min-width="160"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
@@ -60,7 +61,7 @@
|
||||
<el-table-column
|
||||
prop="businessTypeLabel"
|
||||
label="业务类型"
|
||||
width="120"
|
||||
min-width="120"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
@@ -75,14 +76,14 @@
|
||||
<el-table-column
|
||||
prop="starterUserName"
|
||||
label="发起人"
|
||||
width="100"
|
||||
min-width="100"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="到达时间"
|
||||
width="180"
|
||||
min-width="180"
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
|
||||
Reference in new issue
Block a user