yxh
2026-10-18 1446994d504819c367e1ff667360eadb314f9ac6
src/views/ecg/doctor/components/DevInstallPanel.vue
@@ -43,6 +43,11 @@
  </div>
  <!-- 医生装机列表 -->
  <!-- 【本次需求】操作功能区与已完成记录之间的标题栏 -->
  <div class="records-title">
    <span class="records-title__bar"></span>
    <span class="records-title__text">已完成列表</span>
  </div>
  <div class="records-host">
    <ContentWrap class="records-wrap">
    <el-table
@@ -69,7 +74,9 @@
      </el-table-column>
      <el-table-column label="装机情况" align="center" prop="lost">
        <template #default="scope">
          <span v-if="scope.row.jobType === 10">"已装机"</span>
          <!-- 【本需求】完成被撤销过:该条记录显示「已撤销」;再次完成时后端 undone 自动变回 false -->
          <el-tag v-if="scope.row.undone" type="danger" size="small">已撤销</el-tag>
          <span v-else-if="scope.row.jobType === 10">"已装机"</span>
          <span v-if="scope.row.jobType === 35">"已放弃"</span>
        </template>
      </el-table-column>
@@ -213,6 +220,10 @@
  formData.value.doctor = queueVO?.doctor
  formData.value.doctorTime = queueVO?.doctorTime
  formData.value.patSrc = queueVO?.patSrc
  // 【本次修复】条码/打印小票依赖 patDetails(含 source/appointmentId),
  // 队列行本就带着它;原先只在 getFreeRentInfo() 查到"待检查单"时才赋值,
  // 导致绝大多数情况下 patDetails 为 undefined → 条码不显示。
  formData.value.patDetails = queueVO?.patDetails
  formData.value.patMobile = queueVO?.patMobile
  formData.value.patPhone = queueVO?.patPhone
  formData.value.patWardDesc = queueVO?.patWardDesc
@@ -225,7 +236,7 @@
  getReadyRentInfo(formData.value)    // 获取领用信息
  copyBarcode()
}
defineExpose({ setPatient }) // 提供 setPatient 方法,用于设置患者
defineExpose({ setPatient, getList: () => getList() }) // 提供 setPatient 方法,用于设置患者
/** 提交表单 */
@@ -467,9 +478,17 @@
  if (!formData.value.checkType)
    return ""
  const displayBarcode: number[] = checkTypeStore.getCheckTypeDispBarCode(formData.value.checkType!)
  if (formData.value.patDetails == null || formData.value.patDetails.source == null ||
    !displayBarcode.includes(formData.value.patDetails.source))
  // 【本次修复】「患者条码显示」未配置(null/空)→ 不显示(按现场确认口径)
  const displayBarcode: number[] | undefined = checkTypeStore.getCheckTypeDispBarCode(formData.value.checkType!)
  if (displayBarcode == null || displayBarcode.length === 0)
    return ""
  // 【本次修复】来源优先取 patDetails.source,缺失时回退到平铺的 patSrc
  // (原来直接取 patDetails.source,patDetails 缺失时 `.includes` 还会抛异常)
  const patSource = formData.value.patDetails?.source ?? formData.value.patSrc
  if (patSource == null)
    return ""
  if (!displayBarcode.map(Number).includes(Number(patSource)))
    return ""
  return getBarcode()
@@ -479,13 +498,14 @@
  if (!formData.value.checkType)
    return ""
  const patSource = formData.value.patDetails?.source
  const patSource = formData.value.patDetails?.source ?? formData.value.patSrc
  if (patSource == null)
    return ""
  if (1 === patSource || 2 === patSource)
  // 门诊/急诊 → 申请单号;住院/体检 → 就诊流水号
  if (1 === Number(patSource) || 2 === Number(patSource))
    return formData.value.applyNo ?? ""
  else if (3 === patSource || 4 === patSource)
  else if (3 === Number(patSource) || 4 === Number(patSource))
    return formData.value.episodeId ?? ""
  return ""
@@ -505,6 +525,28 @@
</script>
<style scoped lang="scss">
/* 【本次需求】「已完成列表」标题栏:左侧主色竖线 + 加粗小标题,紧凑高度不挤压表格 */
.records-title {
  display: flex;
  align-items: center;
  flex: none;
  gap: 6px;
  padding: 2px 0 6px;
  &__bar {
    width: 3px;
    height: 14px;
    background-color: var(--el-color-primary);
    border-radius: 2px;
  }
  &__text {
    font-size: 14px;
    font-weight: 600;
    color: var(--el-text-color-primary);
  }
}
/* ==========================================================================
   需求:表单内容挤占了下方记录表格的空间 —— 压缩行间距。
   Element Plus 默认 `.el-form-item { margin-bottom: 18px }`;
@@ -556,15 +598,21 @@
.patient-actions {
  display: flex;
  flex: none;
  flex-wrap: nowrap;
  /* 按钮多时允许换行,避免挤在一行(检查页最多 6 个按钮) */
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  /* 上下留白 + 分隔线,形成独立功能块 */
  padding: 6px 4px;
  margin-bottom: 6px;
  background-color: var(--el-bg-color);
  border-top: 1px solid var(--el-border-color-lighter);
  border-bottom: 1px solid var(--el-border-color-lighter);
  /*
    【本次需求】操作功能区做一点视觉区分,方便医生一眼定位:
    极浅的主色底 + 细边框 + 左侧 3px 主色竖条(与「▎已完成列表」标题条同款语言)。
    只做"稍有区分",不改按钮本身的尺寸/颜色/顺序。
  */
  padding: 8px 10px;
  margin: 2px 0 10px;
  background-color: var(--el-color-primary-light-9);
  border: 1px solid var(--el-color-primary-light-7);
  border-left: 3px solid var(--el-color-primary);
  border-radius: 4px;
  /* Element Plus 给相邻 el-button 默认加了 margin-left:12px,会与 gap 叠加,清掉 */
  :deep(.el-button + .el-button) {