From 39c8b288ec8294e026459dfb1955f0bbc49ebb52 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期一, 19 十月 2026 11:10:40 +0800
Subject: [PATCH] 测试完成

---
 src/views/patient/archives/maternalHealth/KuppermanScoreTable.vue |  168 +++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 131 insertions(+), 37 deletions(-)

diff --git a/src/views/patient/archives/maternalHealth/KuppermanScoreTable.vue b/src/views/patient/archives/maternalHealth/KuppermanScoreTable.vue
index af18f04..e2852bc 100644
--- a/src/views/patient/archives/maternalHealth/KuppermanScoreTable.vue
+++ b/src/views/patient/archives/maternalHealth/KuppermanScoreTable.vue
@@ -1,50 +1,144 @@
 <template>
-  <div>
-    <el-table :data="items" border size="small">
-      <el-table-column prop="symptom" label="鐥囩姸" width="160" />
-      <el-table-column label="绋嬪害" align="center" width="120">
-        <template slot-scope="scope">
-          <el-select v-if="editing" v-model="scope.row.degree" size="small">
-            <el-option v-for="o in degrees" :key="o.v" :label="o.l" :value="o.v" />
-          </el-select>
-          <span v-else>{{ degLabel(scope.row.degree) }}</span>
-        </template>
+  <div class="scale-wrap">
+    <div class="scale-title">鏀硅壇 Kupperman 璇勫垎鏍囧噯</div>
+
+    <!-- 绾歌川琛ㄨ〃澶达細鎮h�呭熀鏈俊鎭� -->
+    <el-descriptions :column="3" border size="small" class="scale-head">
+      <el-descriptions-item label="濮撳悕">{{ patient.name || "-" }}</el-descriptions-item>
+      <el-descriptions-item label="鎬у埆">{{ patient.sex || "-" }}</el-descriptions-item>
+      <el-descriptions-item label="骞撮緞">{{ patient.age || "-" }}</el-descriptions-item>
+      <el-descriptions-item label="绉戝">{{ patient.dept || "-" }}</el-descriptions-item>
+      <el-descriptions-item label="涓村簥璇婃柇">{{ patient.diagnosis || "-" }}</el-descriptions-item>
+      <el-descriptions-item label="璇勪及鏃ユ湡">
+        <el-date-picker v-if="editing" v-model="local.date" value-format="yyyy-MM-dd" size="mini" style="width:160px" placeholder="閫夋嫨鏃ユ湡" />
+        <span v-else>{{ local.date || "-" }}</span>
+      </el-descriptions-item>
+    </el-descriptions>
+
+    <div class="scale-tip">鎸囧璇細鐥囩姸绋嬪害鎸� 0=鏃犮��1=杞汇��2=涓��3=閲� 璇勫垎锛屽悇椤瑰緱鍒� = 绋嬪害 脳 绯绘暟銆�</div>
+
+    <!-- 绾歌川琛ㄤ富浣擄細鐥囩姸 + 绯绘暟 + 0~3 绋嬪害 + 璇勫垎 -->
+    <el-table :data="items" border size="small" class="kup-table">
+      <el-table-column type="index" label="搴忓彿" width="60" align="center" />
+      <el-table-column prop="symptom" label="鐥囩姸" min-width="160" />
+      <el-table-column prop="factorLabel" label="绯绘暟" width="70" align="center" />
+      <el-table-column label="0 鏃�" align="center" width="80">
+        <template slot-scope="scope"><el-radio v-if="editing" v-model="local[scope.row.key]" :label="0">&nbsp;</el-radio><span v-else>{{ local[scope.row.key] === 0 ? "鉁�" : "" }}</span></template>
       </el-table-column>
-      <el-table-column prop="score" label="璇勫垎" align="center" width="100" />
+      <el-table-column label="1 杞�" align="center" width="80">
+        <template slot-scope="scope"><el-radio v-if="editing" v-model="local[scope.row.key]" :label="1">&nbsp;</el-radio><span v-else>{{ local[scope.row.key] === 1 ? "鉁�" : "" }}</span></template>
+      </el-table-column>
+      <el-table-column label="2 涓�" align="center" width="80">
+        <template slot-scope="scope"><el-radio v-if="editing" v-model="local[scope.row.key]" :label="2">&nbsp;</el-radio><span v-else>{{ local[scope.row.key] === 2 ? "鉁�" : "" }}</span></template>
+      </el-table-column>
+      <el-table-column label="3 閲�" align="center" width="80">
+        <template slot-scope="scope"><el-radio v-if="editing" v-model="local[scope.row.key]" :label="3">&nbsp;</el-radio><span v-else>{{ local[scope.row.key] === 3 ? "鉁�" : "" }}</span></template>
+      </el-table-column>
+      <el-table-column label="璇勫垎" align="center" width="80">
+        <template slot-scope="scope">{{ (Number(local[scope.row.key]) || 0) * scope.row.factor }}</template>
+      </el-table-column>
     </el-table>
-    <div style="margin-top:10px;font-size:14px">鎬诲垎锛歿{ totalScore }} &nbsp;&nbsp; 绋嬪害锛歿{ severity }}</div>
+
+    <!-- 缁撴灉 -->
+    <el-descriptions :column="3" border size="small" class="scale-result">
+      <el-descriptions-item label="Kupperman 鎬诲垎"><b :class="levelClass">{{ totalScore }}</b> 鍒�</el-descriptions-item>
+      <el-descriptions-item label="绋嬪害">{{ severity }}</el-descriptions-item>
+      <el-descriptions-item label="璇勫垎浜哄憳">
+        <el-input v-if="editing" v-model="local.evaluator" size="mini" style="width:160px" placeholder="璇疯緭鍏�" />
+        <span v-else>{{ local.evaluator || "-" }}</span>
+      </el-descriptions-item>
+    </el-descriptions>
+    <div class="kup-range">绋嬪害鍒嗙骇锛氣墹6 姝e父锛�7~15 杞诲害锛�16~30 涓害锛�&gt;30 閲嶅害锛涘悇椤瑰緱鍒� = 绋嬪害 脳 绯绘暟</div>
   </div>
 </template>
+
 <script>
+const KUP_ITEMS = [
+  { key: "kup_0", symptom: "娼儹鍑烘睏", factor: 4 },
+  { key: "kup_1", symptom: "鎰熻寮傚父", factor: 2 },
+  { key: "kup_2", symptom: "澶辩湢", factor: 2 },
+  { key: "kup_3", symptom: "鎯呯华娉㈠姩", factor: 2 },
+  { key: "kup_4", symptom: "鎶戦儊鐤戝績", factor: 1 },
+  { key: "kup_5", symptom: "鐪╂檿", factor: 1 },
+  { key: "kup_6", symptom: "鐤蹭箯", factor: 1 },
+  { key: "kup_7", symptom: "楠ㄥ叧鑺傜棝", factor: 1 },
+  { key: "kup_8", symptom: "澶寸棝", factor: 1 },
+  { key: "kup_9", symptom: "蹇冩偢", factor: 1 },
+  { key: "kup_10", symptom: "鐨偆铓佽蛋鎰�", factor: 1 },
+  { key: "kup_11", symptom: "鎬х敓娲�", factor: 2 },
+  { key: "kup_12", symptom: "娉屽翱绯荤棁鐘�", factor: 2 },
+];
+
+const KEYS = KUP_ITEMS.map((i) => i.key);
+
 export default {
-  name:"KuppermanScoreTable",
-  props:{ value:{ type:Object, default:()=>({}) }, editing:Boolean },
-  data(){ return { degrees:[{v:0,l:"鏃�"},{v:1,l:"杞�"},{v:2,l:"涓�"},{v:3,l:"閲�"}] }; },
-  computed:{
-    items(){
-      const list = [
-        { symptom:"娼儹鍑烘睏",factor:4 },{ symptom:"鎰熻寮傚父",factor:2 },{ symptom:"澶辩湢",factor:2 },
-        { symptom:"鎯呯华娉㈠姩",factor:2 },{ symptom:"鎶戦儊",factor:1 },{ symptom:"鐪╂檿",factor:1 },
-        { symptom:"鐤蹭箯",factor:1 },{ symptom:"鍏宠妭鐥�",factor:1 },{ symptom:"澶寸棝",factor:1 },
-        { symptom:"蹇冩偢",factor:1 },{ symptom:"鐨偆铓佽蛋鎰�",factor:1 },{ symptom:"鎬х敓娲�",factor:2 },{ symptom:"娉屽翱绯绘劅鏌�",factor:2 },
-      ];
-      return list.map(item => {
-        const v = this.value[item.symptom]||0;
-        return { ...item, degree:v, score:item.factor * v };
-      });
+  name: "KuppermanScoreTable",
+  props: {
+    value: { type: Object, default: () => ({}) },
+    patient: { type: Object, default: () => ({}) },
+    editing: Boolean,
+  },
+  data() {
+    return {
+      items: KUP_ITEMS.map((i) => Object.assign({}, i, { factorLabel: "脳" + i.factor })),
+      local: this.normalize(this.value),
+    };
+  },
+  computed: {
+    totalScore() {
+      return KUP_ITEMS.reduce((s, i) => s + (Number(this.local[i.key]) || 0) * i.factor, 0);
     },
-    totalScore(){ return this.items.reduce((s,i)=>s+i.score,0); },
-    severity(){ const t=this.totalScore; return t<=6?"姝e父":t<=15?"杞诲害":t<=30?"涓害":"閲嶅害"; },
+    severity() {
+      const t = this.totalScore;
+      if (t <= 6) return "姝e父";
+      if (t <= 15) return "杞诲害";
+      if (t <= 30) return "涓害";
+      return "閲嶅害";
+    },
+    levelClass() {
+      const t = this.totalScore;
+      return t <= 6 ? "lv-good" : t <= 15 ? "lv-mid" : t <= 30 ? "lv-warn" : "lv-bad";
+    },
   },
-  watch:{
-    items:{ deep:true, handler(v){
-      const obj = { ...this.value, kuppermanTotal:this.totalScore, kuppermanSeverity:this.severity };
-      v.forEach(i=>{ obj[i.symptom]=i.degree; });
-      this.$emit('input',obj);
-    }},
+  watch: {
+    value: {
+      deep: true,
+      handler(v) {
+        const n = this.normalize(v);
+        if (JSON.stringify(n) !== JSON.stringify(this.local)) this.local = n;
+      },
+    },
+    local: {
+      deep: true,
+      handler(v) {
+        const out = this.buildOut(v);
+        if (JSON.stringify(out) !== JSON.stringify(this.value)) this.$emit("input", out);
+      },
+    },
   },
-  methods:{
-    degLabel(v){ const r=this.degrees.find(d=>d.v===v); return r?r.l:"-"; },
+  methods: {
+    normalize(v) {
+      const src = v || {};
+      const out = { date: src.date || "", evaluator: src.evaluator || "" };
+      KEYS.forEach((k) => { out[k] = Number(src[k]) || 0; });
+      return out;
+    },
+    buildOut(v) {
+      return Object.assign({}, v, { kuppermanTotal: this.totalScore, kuppermanSeverity: this.severity });
+    },
   },
 };
 </script>
+
+<style scoped>
+.scale-title { margin-bottom: 10px; font-size: 16px; font-weight: 700; text-align: center; color: #303133; }
+.scale-head { margin-bottom: 10px; }
+.scale-tip { margin-bottom: 10px; padding: 6px 10px; font-size: 13px; color: #606266; line-height: 1.6; background: #f8f9fb; border-left: 3px solid #c0c4cc; }
+.kup-table { margin-bottom: 12px; }
+.scale-result { margin-top: 6px; }
+.kup-range { margin-top: 8px; font-size: 12px; color: #909399; }
+.lv-good { color: #67c23a; }
+.lv-mid { color: #409eff; }
+.lv-warn { color: #e6a23c; }
+.lv-bad { color: #f56c6c; }
+</style>

--
Gitblit v1.9.3