feat: switch protocol view cert/insurance handle panels to sample level.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
8cebb8e0b8
commit
efbf8f6ac9
6 files changed
+353
-14
No files matched your search
@@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<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>
|
||||
<div class="form-grid-2">
|
||||
<el-form-item label="办理时间" required>
|
||||
@@ -31,6 +32,26 @@
|
||||
/>
|
||||
</el-select>
|
||||
</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">
|
||||
<div class="attachment-upload">
|
||||
<div class="attachment-list">
|
||||
@@ -78,7 +99,11 @@
|
||||
import { fetchUserList } from '@/api/admin'
|
||||
import { fetchUploadAttachment } from '@/api/business'
|
||||
import {
|
||||
fetchSampleInsurance,
|
||||
fetchSampleStorageCert,
|
||||
fetchUpdateFullmoonHandle,
|
||||
fetchUpdateSampleInsurance,
|
||||
fetchUpdateSampleStorageCert,
|
||||
fetchUpdateStorageCertHandle
|
||||
} from '@/api/sample-info-handle'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
@@ -88,6 +113,8 @@
|
||||
const props = defineProps<{
|
||||
mode: 'storage-cert' | 'insurance'
|
||||
protocolId: string
|
||||
/** 有值时按样本级读写(客户服务管理入口) */
|
||||
sampleCode?: string
|
||||
initial?: Record<string, unknown> | null
|
||||
}>()
|
||||
|
||||
@@ -101,13 +128,17 @@
|
||||
const form = reactive({
|
||||
handleTime: '' as string,
|
||||
handlerUserId: '' as string,
|
||||
remark: ''
|
||||
remark: '',
|
||||
mailCertTime: '',
|
||||
policySendTime: ''
|
||||
})
|
||||
|
||||
const attachmentLabel = computed(() =>
|
||||
props.mode === 'storage-cert' ? '储存证附件' : '保险附件'
|
||||
)
|
||||
|
||||
const useSampleLevel = computed(() => Boolean((props.sampleCode || '').trim()))
|
||||
|
||||
function urlsToFiles(raw: string) {
|
||||
return String(raw || '')
|
||||
.split(',')
|
||||
@@ -120,32 +151,55 @@
|
||||
}))
|
||||
}
|
||||
|
||||
function applyInitial() {
|
||||
const init = props.initial || {}
|
||||
function applyInitial(init: Record<string, unknown>) {
|
||||
form.handleTime = String(init.handleTime || '')
|
||||
form.handlerUserId = String(init.handlerUserId || '')
|
||||
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'
|
||||
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) {
|
||||
form.handlerUserId = uid
|
||||
}
|
||||
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) {
|
||||
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(
|
||||
() => [props.protocolId, props.initial],
|
||||
() => applyInitial(),
|
||||
() => [props.protocolId, props.sampleCode, props.initial, props.mode],
|
||||
() => {
|
||||
void loadSampleInitial()
|
||||
},
|
||||
{ immediate: true, deep: true }
|
||||
)
|
||||
|
||||
@@ -182,11 +236,33 @@
|
||||
ElMessage.warning('填写办理时间时必须指定办理人员')
|
||||
return
|
||||
}
|
||||
if (!props.protocolId) return
|
||||
const code = (props.sampleCode || '').trim()
|
||||
if (useSampleLevel.value && !code) return
|
||||
if (!useSampleLevel.value && !props.protocolId) return
|
||||
saving.value = true
|
||||
try {
|
||||
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, {
|
||||
handleTime: form.handleTime || null,
|
||||
handlerUserId: form.handleTime ? form.handlerUserId : null,
|
||||
@@ -210,6 +286,12 @@
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.handle-sample-hint {
|
||||
margin: 0 0 10px;
|
||||
font-size: 13px;
|
||||
color: var(--mint-text-muted, #64748b);
|
||||
}
|
||||
|
||||
.handle-actions {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user