This commit is contained in:
Your Name
2026-05-08 15:20:02 +08:00
parent dfbb6d82b3
commit 623bda2ecb
5 changed files with 271 additions and 98 deletions
+8 -7
View File
@@ -411,7 +411,7 @@
<div style="max-width: 320px; line-height: 1.7; font-size: 12px">
add_external_contact 事件数按接待企微成员归属部门定渠道时须客户带对应企微标签<br />
<template v-if="tb.channel_name">
<b>名称含二中心的部门</b>在选定渠道下进线计 <b>0</b>
<b>二中心及其组织下级</b>与部门 ErCenter 子树一致在选定渠道下进线计 <b>0</b>
</template>
</div>
</template>
@@ -423,9 +423,9 @@
<el-tooltip placement="top" effect="dark" :show-after="200">
<template #content>
<div style="max-width: 320px; line-height: 1.7; font-size: 12px">
诊单指派日志条成功指派<b>to_assistant_id &gt; 0</b><b>被指派医助</b>归属展示部门<template v-if="tb.channel_name">
<b>tcm_diagnosis_assign_log</b> 成功指派<b>to_assistant_id &gt; 0</b>**仅按 <b>related_po_create_time</b>** 落在所选区间内与日志表快照一致诊单手动指派已写入该字段<b>被指派医助</b>归属展示部门<template v-if="tb.channel_name">
选定渠道时收窄与{{ tb.channel_name }}业绩同口径标签诊单或 channels EXISTS<br />
<b>名称含二中心的部门</b>在选定渠道下本列计 <b>0</b>
<b>二中心及其组织下级</b>在选定渠道下本列计 <b>0</b>
</template>
<template v-else><br />未选渠道时不限客户来源合计业绩列渠道无关</template>
</div>
@@ -547,11 +547,12 @@
<template #content>
<div style="max-width: 320px; line-height: 1.7; font-size: 12px">
<template v-if="tb.channel_name">
有渠道时<b>合计行 ROI</b> = <b>{{ tb.channel_name }}业绩合计</b>与上表该渠道业绩列合计一致<b>不含名称含二中心的部门</b>÷ <b>投放成本合计</b><br />
部门行 ROI = 该部门 <b>{{ tb.channel_name }}业绩</b> ÷ 该部门 <b>投放成本</b>二中心部门该渠道业绩与进线为 0合计业绩列无关
有渠道时<b>合计行 ROI</b> = <b>{{ tb.channel_name }}业绩合计</b>与上表该渠道业绩列合计一致<b>不含二中心及其组织下级</b>÷ <b>投放成本合计</b><br />
部门行 ROI = 该部门 <b>{{ tb.channel_name }}业绩</b> ÷ 该部门 <b>投放成本</b><b>二中心子树</b>部门该渠道业绩与进线为 0投放成本分摊进线计 0故无 ROI合计业绩列无关
</template>
<template v-else>
<b>合计业绩</b> ÷ <b>投放成本</b>投放成本按各部门<b>进线条数占比</b>从总成本中分摊
<b>合计 ROI</b> = 全表业绩合计<b>不含二中心子树</b>各部门行业绩÷ <b>投放成本合计</b><br />
部门行 = 该部门合计业绩口径业绩 ÷ 该部门均摊投放成本<b>二中心子树</b>部门不参与成本分摊进线占比计 0故无 ROI
</template>
</div>
</template>
@@ -564,7 +565,7 @@
<template #content>
<div style="max-width: 320px; line-height: 1.7; font-size: 12px">
区间与渠道与账务表一致后得到<b>总投放成本</b><b>单进线成本</b> = 总成本 ÷ 各展示部门<b>进线合计</b><br />
各部门行投放成本 = 单进线成本 × 该部门进线四舍五入尾差并入进线最多的部门
各部门行投放成本 = 单进线成本 × 该部门进线四舍五入尾差并入进线最多的部门<b>二中心及其组织下级</b>进线在分摊中计 <b>0</b> ROI 分子扣除范围一致
</div>
</template>
<el-icon class="col-info"><InfoFilled /></el-icon>
@@ -12,6 +12,25 @@
{{ assistantLogCellText(row, 'to') }}
</template>
</el-table-column>
<el-table-column label="快照·业务单创建人" min-width="130" show-overflow-tooltip>
<template #default="{ row }">
{{ relatedPoCreatorCell(row) }}
</template>
</el-table-column>
<el-table-column label="快照·业务单创建时间" width="190">
<template #header>
<span>快照·业务单创建时间</span>
<el-tooltip
placement="top"
content="related_po_create_time:触发本次操作的处方业务订单 create_time;与原文助一致时表示医助创建订单时间"
>
<el-icon class="assign-log-col-hint"><QuestionFilled /></el-icon>
</el-tooltip>
</template>
<template #default="{ row }">
{{ relatedPoCreateTimeCell(row) }}
</template>
</el-table-column>
<el-table-column label="操作人" width="110" prop="operator_name" />
<el-table-column label="操作账号" width="120" prop="operator_account" show-overflow-tooltip />
<el-table-column label="IP" width="130" prop="ip" show-overflow-tooltip />
@@ -20,6 +39,7 @@
</template>
<script setup lang="ts">
import { QuestionFilled } from '@element-plus/icons-vue'
import { ref, watch } from 'vue'
import { tcmDiagnosisAssignLogList } from '@/api/tcm'
@@ -30,6 +50,35 @@ const props = defineProps<{
const loading = ref(false)
const rows = ref<any[]>([])
/** 对应日志表 related_po_creator_id:触发本次释放/指派的业务订单 creator */
function relatedPoCreatorCell(row: Record<string, unknown>): string {
const name = row.related_po_creator_name
if (name != null && String(name).trim() !== '') {
return String(name)
}
const id = Number(row.related_po_creator_id)
if (Number.isFinite(id) && id > 0) {
return `ID:${id}`
}
return '—'
}
/** 对应日志表 related_po_create_timeUnix)格式化为可读时间 */
function relatedPoCreateTimeCell(row: Record<string, unknown>): string {
const t = row.related_po_create_time_text
if (t != null && String(t).trim() !== '') {
return String(t)
}
const ts = Number(row.related_po_create_time)
if (!Number.isFinite(ts) || ts <= 0) {
return '—'
}
const d = new Date(ts * 1000)
if (Number.isNaN(d.getTime())) return '—'
const pad = (n: number) => String(n).padStart(2, '0')
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
}
function assistantLogCellText(row: Record<string, unknown>, side: 'from' | 'to'): string {
const nameKey = side === 'from' ? 'from_assistant_name' : 'to_assistant_name'
const idKey = side === 'from' ? 'from_assistant_id' : 'to_assistant_id'
@@ -69,3 +118,12 @@ watch(
defineExpose({ refresh: load })
</script>
<style scoped>
.assign-log-col-hint {
margin-left: 4px;
vertical-align: middle;
color: var(--el-text-color-secondary);
cursor: help;
}
</style>
+4 -5
View File
@@ -1390,13 +1390,12 @@ const handleConfirmAssign = async () => {
feedback.msgWarning('没有可指派的诊单,请关闭后重新勾选')
return
}
const promises = ids.map((id) =>
tcmDiagnosisAssign({
for (const id of ids) {
await tcmDiagnosisAssign({
id,
assistant_id: assignForm.value.assistant_id
assistant_id: assignForm.value.assistant_id!,
})
)
await Promise.all(promises)
}
selectedIds.value = []
batchAssignIds.value = []
}