|
@@ -1,5 +1,6 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="protocol-handle-panel">
|
|
<div class="protocol-handle-panel">
|
|
|
|
|
+ <p v-if="sampleCode" class="handle-sample-hint">当前样本:{{ sampleCode }}</p>
|
|
|
<el-form label-position="top" class="biz-dialog-form" @submit.prevent>
|
|
<el-form label-position="top" class="biz-dialog-form" @submit.prevent>
|
|
|
<div class="form-grid-2">
|
|
<div class="form-grid-2">
|
|
|
<el-form-item label="办理时间" required>
|
|
<el-form-item label="办理时间" required>
|
|
@@ -31,6 +32,26 @@
|
|
|
/>
|
|
/>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
+ <el-form-item v-if="mode === 'storage-cert'" label="邮寄储存证时间">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ v-model="form.mailCertTime"
|
|
|
|
|
+ type="datetime"
|
|
|
|
|
+ placeholder="可选"
|
|
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item v-if="mode === 'insurance'" label="保单发送时间">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ v-model="form.policySendTime"
|
|
|
|
|
+ type="datetime"
|
|
|
|
|
+ placeholder="可选"
|
|
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-form-item>
|
|
|
<el-form-item :label="attachmentLabel" class="form-col-span-2">
|
|
<el-form-item :label="attachmentLabel" class="form-col-span-2">
|
|
|
<div class="attachment-upload">
|
|
<div class="attachment-upload">
|
|
|
<div class="attachment-list">
|
|
<div class="attachment-list">
|
|
@@ -78,7 +99,11 @@
|
|
|
import { fetchUserList } from '@/api/admin'
|
|
import { fetchUserList } from '@/api/admin'
|
|
|
import { fetchUploadAttachment } from '@/api/business'
|
|
import { fetchUploadAttachment } from '@/api/business'
|
|
|
import {
|
|
import {
|
|
|
|
|
+ fetchSampleInsurance,
|
|
|
|
|
+ fetchSampleStorageCert,
|
|
|
fetchUpdateFullmoonHandle,
|
|
fetchUpdateFullmoonHandle,
|
|
|
|
|
+ fetchUpdateSampleInsurance,
|
|
|
|
|
+ fetchUpdateSampleStorageCert,
|
|
|
fetchUpdateStorageCertHandle
|
|
fetchUpdateStorageCertHandle
|
|
|
} from '@/api/sample-info-handle'
|
|
} from '@/api/sample-info-handle'
|
|
|
import { useUserStore } from '@/store/modules/user'
|
|
import { useUserStore } from '@/store/modules/user'
|
|
@@ -88,6 +113,8 @@
|
|
|
const props = defineProps<{
|
|
const props = defineProps<{
|
|
|
mode: 'storage-cert' | 'insurance'
|
|
mode: 'storage-cert' | 'insurance'
|
|
|
protocolId: string
|
|
protocolId: string
|
|
|
|
|
+ /** 有值时按样本级读写(客户服务管理入口) */
|
|
|
|
|
+ sampleCode?: string
|
|
|
initial?: Record<string, unknown> | null
|
|
initial?: Record<string, unknown> | null
|
|
|
}>()
|
|
}>()
|
|
|
|
|
|
|
@@ -101,13 +128,17 @@
|
|
|
const form = reactive({
|
|
const form = reactive({
|
|
|
handleTime: '' as string,
|
|
handleTime: '' as string,
|
|
|
handlerUserId: '' as string,
|
|
handlerUserId: '' as string,
|
|
|
- remark: ''
|
|
|
|
|
|
|
+ remark: '',
|
|
|
|
|
+ mailCertTime: '',
|
|
|
|
|
+ policySendTime: ''
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
const attachmentLabel = computed(() =>
|
|
const attachmentLabel = computed(() =>
|
|
|
props.mode === 'storage-cert' ? '储存证附件' : '保险附件'
|
|
props.mode === 'storage-cert' ? '储存证附件' : '保险附件'
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+ const useSampleLevel = computed(() => Boolean((props.sampleCode || '').trim()))
|
|
|
|
|
+
|
|
|
function urlsToFiles(raw: string) {
|
|
function urlsToFiles(raw: string) {
|
|
|
return String(raw || '')
|
|
return String(raw || '')
|
|
|
.split(',')
|
|
.split(',')
|
|
@@ -120,32 +151,55 @@
|
|
|
}))
|
|
}))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- function applyInitial() {
|
|
|
|
|
- const init = props.initial || {}
|
|
|
|
|
|
|
+ function applyInitial(init: Record<string, unknown>) {
|
|
|
form.handleTime = String(init.handleTime || '')
|
|
form.handleTime = String(init.handleTime || '')
|
|
|
form.handlerUserId = String(init.handlerUserId || '')
|
|
form.handlerUserId = String(init.handlerUserId || '')
|
|
|
form.remark = String(
|
|
form.remark = String(
|
|
|
- props.mode === 'storage-cert' ? init.remark || '' : init.handleRemark || ''
|
|
|
|
|
|
|
+ props.mode === 'storage-cert' ? init.remark || '' : init.handleRemark || init.remark || ''
|
|
|
)
|
|
)
|
|
|
|
|
+ form.mailCertTime = String(init.mailCertTime || '')
|
|
|
|
|
+ form.policySendTime = String(init.policySendTime || '')
|
|
|
const urlField = props.mode === 'storage-cert' ? 'certImageUrls' : 'insuranceAttachments'
|
|
const urlField = props.mode === 'storage-cert' ? 'certImageUrls' : 'insuranceAttachments'
|
|
|
files.value = urlsToFiles(String(init[urlField] || ''))
|
|
files.value = urlsToFiles(String(init[urlField] || ''))
|
|
|
- const uid = form.handlerUserId || String(userStore.info?.userId || '')
|
|
|
|
|
|
|
+ const uid = form.handlerUserId || String((userStore.getUserInfo as any)?.id || '')
|
|
|
if (!form.handlerUserId && !form.handleTime) {
|
|
if (!form.handlerUserId && !form.handleTime) {
|
|
|
form.handlerUserId = uid
|
|
form.handlerUserId = uid
|
|
|
}
|
|
}
|
|
|
if (form.handlerUserId) {
|
|
if (form.handlerUserId) {
|
|
|
- const name = String(init.handlerUserName || userStore.info?.userName || '')
|
|
|
|
|
|
|
+ const name = String(
|
|
|
|
|
+ init.handlerUserName ||
|
|
|
|
|
+ (userStore.getUserInfo as any)?.realName ||
|
|
|
|
|
+ (userStore.getUserInfo as any)?.userName ||
|
|
|
|
|
+ ''
|
|
|
|
|
+ )
|
|
|
if (name) {
|
|
if (name) {
|
|
|
- userOptions.value = [
|
|
|
|
|
- { id: form.handlerUserId, nickName: name, userName: name }
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ userOptions.value = [{ id: form.handlerUserId, nickName: name, userName: name }]
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ async function loadSampleInitial() {
|
|
|
|
|
+ const code = (props.sampleCode || '').trim()
|
|
|
|
|
+ if (!code) {
|
|
|
|
|
+ applyInitial(props.initial || {})
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res =
|
|
|
|
|
+ props.mode === 'storage-cert'
|
|
|
|
|
+ ? ((await fetchSampleStorageCert(code)) as Record<string, unknown>)
|
|
|
|
|
+ : ((await fetchSampleInsurance(code)) as Record<string, unknown>)
|
|
|
|
|
+ applyInitial(res || {})
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ applyInitial(props.initial || {})
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
watch(
|
|
watch(
|
|
|
- () => [props.protocolId, props.initial],
|
|
|
|
|
- () => applyInitial(),
|
|
|
|
|
|
|
+ () => [props.protocolId, props.sampleCode, props.initial, props.mode],
|
|
|
|
|
+ () => {
|
|
|
|
|
+ void loadSampleInitial()
|
|
|
|
|
+ },
|
|
|
{ immediate: true, deep: true }
|
|
{ immediate: true, deep: true }
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -182,11 +236,33 @@
|
|
|
ElMessage.warning('填写办理时间时必须指定办理人员')
|
|
ElMessage.warning('填写办理时间时必须指定办理人员')
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- if (!props.protocolId) return
|
|
|
|
|
|
|
+ const code = (props.sampleCode || '').trim()
|
|
|
|
|
+ if (useSampleLevel.value && !code) return
|
|
|
|
|
+ if (!useSampleLevel.value && !props.protocolId) return
|
|
|
saving.value = true
|
|
saving.value = true
|
|
|
try {
|
|
try {
|
|
|
const urls = files.value.map((f) => f.fileUrl).filter(Boolean).join(',')
|
|
const urls = files.value.map((f) => f.fileUrl).filter(Boolean).join(',')
|
|
|
- if (props.mode === 'storage-cert') {
|
|
|
|
|
|
|
+ if (useSampleLevel.value) {
|
|
|
|
|
+ if (props.mode === 'storage-cert') {
|
|
|
|
|
+ await fetchUpdateSampleStorageCert(code, {
|
|
|
|
|
+ handleTime: form.handleTime || null,
|
|
|
|
|
+ handlerUserId: form.handleTime ? form.handlerUserId : null,
|
|
|
|
|
+ certImageUrls: urls,
|
|
|
|
|
+ remark: form.remark,
|
|
|
|
|
+ mailCertTime: form.mailCertTime || null,
|
|
|
|
|
+ collectionProtocolId: props.protocolId
|
|
|
|
|
+ })
|
|
|
|
|
+ } else {
|
|
|
|
|
+ await fetchUpdateSampleInsurance(code, {
|
|
|
|
|
+ handleTime: form.handleTime || null,
|
|
|
|
|
+ handlerUserId: form.handleTime ? form.handlerUserId : null,
|
|
|
|
|
+ insuranceAttachments: urls,
|
|
|
|
|
+ handleRemark: form.remark,
|
|
|
|
|
+ policySendTime: form.policySendTime || null,
|
|
|
|
|
+ collectionProtocolId: props.protocolId
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (props.mode === 'storage-cert') {
|
|
|
await fetchUpdateStorageCertHandle(props.protocolId, {
|
|
await fetchUpdateStorageCertHandle(props.protocolId, {
|
|
|
handleTime: form.handleTime || null,
|
|
handleTime: form.handleTime || null,
|
|
|
handlerUserId: form.handleTime ? form.handlerUserId : null,
|
|
handlerUserId: form.handleTime ? form.handlerUserId : null,
|
|
@@ -210,6 +286,12 @@
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
<style scoped lang="scss">
|
|
|
|
|
+ .handle-sample-hint {
|
|
|
|
|
+ margin: 0 0 10px;
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+ color: var(--mint-text-muted, #64748b);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
.handle-actions {
|
|
.handle-actions {
|
|
|
margin-top: 8px;
|
|
margin-top: 8px;
|
|
|
}
|
|
}
|