ソースを参照

九防页面添加打印功能

unknown 11 時間 前
コミット
13c6f689dc

+ 4 - 4
src/views/elderly/apply/nine-precautions/attack/AddForm.vue

@@ -143,13 +143,13 @@
                   <div class="content-item">(2) 攻击行为在一天内至少出现两次以上或攻击行为造成了他人肉体上的伤害</div>
                 </td>
                 <td class="level" rowspan="2">IV级</td>
-                <td class="select" rowspan="7">
+                <td class="select" rowspan="2">
                   <el-radio-group v-model="form.attackLevel" :disabled="isDetail" @change="handleLevelChange">
-                    <el-radio :value="1">  符合</el-radio>
+                    <el-radio :value="4">  符合</el-radio>
                   </el-radio-group>
                   <div class="multi-select">
-                    <el-checkbox-group v-model="form.attackLevel1Items" :disabled="isDetail || form.attackLevel !== 1">
-                      <el-checkbox v-for="n in 7" :key="n" :value="n">{{ n }}</el-checkbox>
+                    <el-checkbox-group v-model="form.attackLevel4Items" :disabled="isDetail || form.attackLevel !== 4">
+                      <el-checkbox v-for="n in 2" :key="n" :value="n">{{ n }}</el-checkbox>
                     </el-checkbox-group>
                   </div>
                 </td>

+ 81 - 82
src/views/elderly/apply/nine-precautions/nutritional-risk/AddForm.vue

@@ -77,69 +77,65 @@
             </tr>
           </thead>
           <tbody>
-            <!-- 1. BMI -->
-            <tr>
-              <td class="col-item">1. BMI</td>
-              <td class="col-score">
-                <el-radio :label="0" v-model="form.initialScores[0]" :disabled="isDetail" @change="calculateScores">BMI&lt;19<br/>或 BMI≥28</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="1" v-model="form.initialScores[0]" :disabled="isDetail" @change="calculateScores">19≤BMI&lt;21<br/>或 26≤BMI&lt;28</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="2" v-model="form.initialScores[0]" :disabled="isDetail" @change="calculateScores">21≤BMI&lt;23<br/>或24≤BMI&lt;26</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="3" v-model="form.initialScores[0]" :disabled="isDetail" @change="calculateScores">23≤BMI≤24</el-radio>
-              </td>
-            </tr>
-
-            <!-- 2. 近3个月体重变化 -->
-            <tr>
-              <td class="col-item">2. 近3个月体重变化</td>
-              <td class="col-score">
-                <el-radio :label="0" v-model="form.initialScores[1]" :disabled="isDetail" @change="calculateScores">减少或增加≥3Kg</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="1" v-model="form.initialScores[1]" :disabled="isDetail" @change="calculateScores">不知道</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="2" v-model="form.initialScores[1]" :disabled="isDetail" @change="calculateScores">1Kg≤减少&lt;3Kg<br/>或1Kg≤增加&lt;3Kg</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="3" v-model="form.initialScores[1]" :disabled="isDetail" @change="calculateScores">0Kg&lt;减少&lt;1Kg<br/>或0Kg&lt;增加&lt;1Kg</el-radio>
-              </td>
-            </tr>
-
-            <!-- 3. 活动能力 -->
-            <tr>
-              <td class="col-item">3. 活动能力</td>
-              <td class="col-score">
-                <el-radio :label="0" v-model="form.initialScores[2]" :disabled="isDetail" @change="calculateScores">卧床</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="1" v-model="form.initialScores[2]" :disabled="isDetail" @change="calculateScores">需要依赖工具活动</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="2" v-model="form.initialScores[2]" :disabled="isDetail" @change="calculateScores">独立户外活动</el-radio>
-              </td>
-              <td class="col-score">—</td>
-            </tr>
+          <!-- 6. 近三个月有无饮食量变化 -->
+          <tr>
+            <td class="col-item">1. 近三个月有无饮食量变化</td>
+            <td class="col-score">
+              <el-radio :label="0" v-model="form.initialScores[5]" :disabled="isDetail" @change="calculateScores">严重增加或减少</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="1" v-model="form.initialScores[5]" :disabled="isDetail" @change="calculateScores">增加或减少</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="2" v-model="form.initialScores[5]" :disabled="isDetail" @change="calculateScores">无变化</el-radio>
+            </td>
+            <td class="col-score">—</td>
+          </tr>
 
-            <!-- 4. 牙齿状况 -->
-            <tr>
-              <td class="col-item">4. 牙齿状况</td>
-              <td class="col-score">
-                <el-radio :label="0" v-model="form.initialScores[3]" :disabled="isDetail" @change="calculateScores">全口或半口缺</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="1" v-model="form.initialScores[3]" :disabled="isDetail" @change="calculateScores">用义齿</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="2" v-model="form.initialScores[3]" :disabled="isDetail" @change="calculateScores">正常</el-radio>
-              </td>
-              <td class="col-score">—</td>
-            </tr>
+          <!-- 2. 近3个月体重变化 -->
+          <tr>
+            <td class="col-item">2. 近3个月体重变化</td>
+            <td class="col-score">
+              <el-radio :label="0" v-model="form.initialScores[1]" :disabled="isDetail" @change="calculateScores">减少或增加≥3Kg</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="1" v-model="form.initialScores[1]" :disabled="isDetail" @change="calculateScores">不知道</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="2" v-model="form.initialScores[1]" :disabled="isDetail" @change="calculateScores">1Kg≤减少&lt;3Kg<br/>或1Kg≤增加&lt;3Kg</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="3" v-model="form.initialScores[1]" :disabled="isDetail" @change="calculateScores">0Kg&lt;减少&lt;1Kg<br/>或0Kg&lt;增加&lt;1Kg</el-radio>
+            </td>
+          </tr>
+          <!-- 3. 活动能力 -->
+          <tr>
+            <td class="col-item">3. 活动能力</td>
+            <td class="col-score">
+              <el-radio :label="0" v-model="form.initialScores[2]" :disabled="isDetail" @change="calculateScores">卧床</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="1" v-model="form.initialScores[2]" :disabled="isDetail" @change="calculateScores">需要依赖工具活动</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="2" v-model="form.initialScores[2]" :disabled="isDetail" @change="calculateScores">独立户外活动</el-radio>
+            </td>
+            <td class="col-score">—</td>
+          </tr>
+          <!-- 4. 牙齿状况 -->
+          <tr>
+            <td class="col-item">4. 牙齿状况</td>
+            <td class="col-score">
+              <el-radio :label="0" v-model="form.initialScores[3]" :disabled="isDetail" @change="calculateScores">全口或半口缺</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="1" v-model="form.initialScores[3]" :disabled="isDetail" @change="calculateScores">用义齿</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="2" v-model="form.initialScores[3]" :disabled="isDetail" @change="calculateScores">正常</el-radio>
+            </td>
+            <td class="col-score">—</td>
+          </tr>
 
             <!-- 5. 神经精神疾病 -->
             <tr>
@@ -155,21 +151,24 @@
               </td>
               <td class="col-score">—</td>
             </tr>
+          <!-- 1. BMI -->
+          <tr>
+            <td class="col-item">6. BMI</td>
+            <td class="col-score">
+              <el-radio :label="0" v-model="form.initialScores[0]" :disabled="isDetail" @change="calculateScores">BMI&lt;19<br/>或 BMI≥28</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="1" v-model="form.initialScores[0]" :disabled="isDetail" @change="calculateScores">19≤BMI&lt;21<br/>或 26≤BMI&lt;28</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="2" v-model="form.initialScores[0]" :disabled="isDetail" @change="calculateScores">21≤BMI&lt;23<br/>或24≤BMI&lt;26</el-radio>
+            </td>
+            <td class="col-score">
+              <el-radio :label="3" v-model="form.initialScores[0]" :disabled="isDetail" @change="calculateScores">23≤BMI≤24</el-radio>
+            </td>
+          </tr>
+
 
-            <!-- 6. 近三个月有无饮食量变化 -->
-            <tr>
-              <td class="col-item">6. 近三个月有无饮食量变化</td>
-              <td class="col-score">
-                <el-radio :label="0" v-model="form.initialScores[5]" :disabled="isDetail" @change="calculateScores">严重增加或减少</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="1" v-model="form.initialScores[5]" :disabled="isDetail" @change="calculateScores">增加或减少</el-radio>
-              </td>
-              <td class="col-score">
-                <el-radio :label="2" v-model="form.initialScores[5]" :disabled="isDetail" @change="calculateScores">无变化</el-radio>
-              </td>
-              <td class="col-score">—</td>
-            </tr>
           </tbody>
         </table>
 
@@ -784,12 +783,12 @@ const handleExport = () => {
 
   // 初筛项目数据
   const initialItems = [
-    { name: '1. BMI', options: [{ score: 0, text: 'BMI<19 或 BMI≥28' }, { score: 1, text: '19≤BMI<21 或 26≤BMI<28' }, { score: 2, text: '21≤BMI<23 或 24≤BMI<26' }, { score: 3, text: '23≤BMI≤24' }] },
+    { name: '1. 近三个月有无饮食量变化', options: [{ score: 0, text: '严重增加或减少' }, { score: 1, text: '增加或减少' }, { score: 2, text: '无变化' }, { score: null, text: '—' }] },
     { name: '2. 近3个月体重变化', options: [{ score: 0, text: '减少或增加≥3Kg' }, { score: 1, text: '不知道' }, { score: 2, text: '1Kg≤减少<3Kg 或 1Kg≤增加<3Kg' }, { score: 3, text: '0Kg<减少<1Kg 或 0Kg<增加<1Kg' }] },
     { name: '3. 活动能力', options: [{ score: 0, text: '卧床' }, { score: 1, text: '需要依赖工具活动' }, { score: 2, text: '独立户外活动' }, { score: null, text: '—' }] },
     { name: '4. 牙齿状况', options: [{ score: 0, text: '全口或半口缺' }, { score: 1, text: '用义齿' }, { score: 2, text: '正常' }, { score: null, text: '—' }] },
     { name: '5. 神经精神疾病', options: [{ score: 0, text: '严重认知障碍或抑郁' }, { score: 1, text: '轻度认知障碍或抑郁' }, { score: 2, text: '无认知障碍或抑郁' }, { score: null, text: '—' }] },
-    { name: '6. 近三个月有无饮食量变化', options: [{ score: 0, text: '严重增加或减少' }, { score: 1, text: '增加或减少' }, { score: 2, text: '无变化' }, { score: null, text: '—' }] }
+    { name: '6. BMI', options: [{ score: 0, text: 'BMI<19 或 BMI≥28' }, { score: 1, text: '19≤BMI<21 或 26≤BMI<28' }, { score: 2, text: '21≤BMI<23 或 24≤BMI<26' }, { score: 3, text: '23≤BMI≤24' }] }
   ]
 
   // 评估项目数据
@@ -1261,15 +1260,15 @@ defineExpose({
           }
 
           .col-item {
-            width: 20%;
-            text-align: center;
+            padding-left: 30px;
+            text-align: left;
             font-weight: bold;
             vertical-align: middle;
           }
 
           .col-score {
-            width: 20%;
-            text-align: center;
+            padding-left: 30px;
+            text-align: left;
             vertical-align: middle;
 
             .el-radio {

+ 473 - 174
src/views/elderly/apply/nine-precautions/risk-disclosure-statement/Form.vue

@@ -1,10 +1,12 @@
 <template>
-  <Dialog
+  <el-drawer
     v-model="dialogVisible"
     :title="dialogTitle"
-    width="80%"
+    size="70%"
     class="risk-disclosure-statement-form"
-    scroll
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    :destroy-on-close="true"
     @close="handleClosed"
   >
     <el-form
@@ -38,9 +40,8 @@
       </el-row>
 
       <!-- 长者详情展示 - 对应图片中的表一表头信息 -->
-      <div v-if="elderDetail.id" class="elder-detail-wrap">
-        <el-descriptions :column="4" border size="small">
-          <el-descriptions-item label="区/楼层">{{ elderDetail.floorName || '-' }}</el-descriptions-item>
+      <div  class="elder-detail-wrap">
+        <el-descriptions :column="2" border size="small">
           <el-descriptions-item label="姓名">{{ elderDetail.elderName || '-' }}</el-descriptions-item>
           <el-descriptions-item label="性别">{{ getDictLabel(DICT_TYPE.SYSTEM_USER_SEX, elderDetail.elderSex) || '-' }}</el-descriptions-item>
           <el-descriptions-item label="年龄">{{ elderDetail.elderAge || '-' }}岁</el-descriptions-item>
@@ -59,141 +60,92 @@
           经我院评估您或您相关第三方的身体状况,您或您亲属在我院养老期间,存在下列服务安全风险。为保证对您或您相关第三方的服务质量,特向您告知!我院将针对老年人的情况做好相关防范措施,请您理解、配合、并支持相关工作措施的落实。
         </p>
 
-        <!-- 风险项目列表 -->
-        <div class="risk-list">
-          <div v-for="(item, index) in riskItems" :key="index" class="risk-item">
-            <el-checkbox v-model="item.checked" :label="item.name" />
-            <span class="risk-label">风险程度:</span>
-            <el-radio-group v-model="item.riskLevel" size="small">
-              <el-radio value="low">低危</el-radio>
-              <el-radio value="medium">中危</el-radio>
-              <el-radio value="high">高危</el-radio>
-            </el-radio-group>
-          </div>
+        <!-- 风险项目表格 -->
+        <div class="risk-table-wrapper">
+          <table class="risk-table">
+            <thead>
+              <tr>
+                <th class="col-index">序号</th>
+                <th class="col-project">项目</th>
+                <th class="col-level">风险程度</th>
+                <th class="col-remark">备注</th>
+              </tr>
+            </thead>
+            <tbody>
+              <tr v-for="(item, index) in riskTableItems" :key="index">
+                <td class="col-index">{{ index + 1 }}</td>
+                <td class="col-project">{{ item.name }}</td>
+                <td class="col-level">
+                  <el-select 
+                    v-model="item.riskLevel" 
+                    placeholder="请选择" 
+                    style="width: 120px"
+                    :disabled="isView"
+                  >
+                    <el-option 
+                      v-for="option in getRiskOptions(item.key)" 
+                      :key="option.value" 
+                      :label="option.label" 
+                      :value="option.value" 
+                    />
+                  </el-select>
+                </td>
+                <td class="col-remark">
+                  <span class="remark-text">风险程度:</span>
+                  <el-checkbox v-model="item.lowChecked" :disabled="isView" size="small">低危</el-checkbox>
+                  <el-checkbox v-model="item.mediumChecked" :disabled="isView" size="small">中危</el-checkbox>
+                  <el-checkbox v-model="item.highChecked" :disabled="isView" size="small">高危</el-checkbox>
+                </td>
+              </tr>
+            </tbody>
+          </table>
         </div>
 
-        <!-- 其他风险 -->
-        <el-form-item label="其它服务风险:" class="other-risk">
-          <TgTextarea v-model="dataForm.otherRisk" placeholder="请输入其他服务风险" :rows="2" />
-        </el-form-item>
-      </div>
+        <!-- 预计下次评估日期 -->
+        <div class="next-assess-date">
+          <span class="date-label">预计下次评估日期:</span>
+          <el-date-picker
+            v-model="dataForm.nextAssessDate"
+            type="date"
+            placeholder="选择日期"
+            style="width: 150px"
+            :disabled="isView"
+          />
+          <span class="date-value">{{ dataForm.nextAssessDate ? formatDate(dataForm.nextAssessDate) : '无' }}</span>
+        </div>
 
-      <!-- 签名区域 -->
-      <div class="section-title">签字确认</div>
-      <el-row :gutter="20">
-        <el-col :span="24">
-          <el-form-item label="首次告知签名:" label-width="170">
-            <div style="display: flex;flex-direction: row">
-              <div style="display: flex;align-items: center;width: 560px">
-                通过对老年人的整体评估,老年人有可能发生:
-                <TgInput v-model="dataForm.firstRisk" placeholder="输入风险" style="width: 250px;margin-left: 10px"/>
-              </div>
-              其风险及防范措施已向老年人或相关第三方进行了如实告知。
-            </div>
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item label="护理人员签名" label-width="170">
-            <TgInput v-model="dataForm.firstNurseSign" placeholder="签字人" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="老年人/相关第三方签字" label-width="170">
-            <TgInput v-model="dataForm.firstElderSign" placeholder="签字人" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="签字日期">
-            <TgDatePicker v-model="dataForm.firstSignDate" type="date" placeholder="选择日期" />
-          </el-form-item>
-        </el-col>
-      </el-row>
+        <!-- 告知签名区域 -->
+        <div class="signature-section">
+          <div class="signature-title">告知签名:</div>
+          <p class="signature-desc">
+            通过对老年人的整体评估,老年人有可能发生以上风险,其风险及防范措施已向老年人或相关第三方进行了如实告知。
+          </p>
+          <p class="signature-declare">
+            (老年人或相关第三方声明:本人已知悉并签字确认。)
+          </p>
+          
+          <div class="signature-item">
+            <span class="signature-label">经办人(护理人员):</span>
 
-      <!-- 第二次告知签名 -->
-      <el-divider />
-      <el-row :gutter="20">
-        <el-col :span="24">
-          <el-form-item label="第二次告知签名:" label-width="170">
-            <div style="display: flex;flex-direction: row">
-              <div style="display: flex;align-items: center;width: 700px">
-                通过对老年人的整体评估,随着病情的发展变化,老年人有可能发生:
-                <TgInput v-model="dataForm.secondRisk" placeholder="输入风险" style="width: 250px;margin-left: 10px"/>
-              </div>
-              其风险及防范措施已向老年人或相关第三方进行了如实告知。
-            </div>
-          </el-form-item>
-        </el-col>
-        <el-col :span="24">
-          <el-form-item label="护理人员" label-width="170">
-            <TgInput v-model="dataForm.secondNurseSign" placeholder="签字人" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="变动风险" label-width="170">
-            <TgInput v-model="dataForm.secondChangeRisk" placeholder="变动风险描述" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="风险程度">
-            <el-radio-group v-model="dataForm.secondRiskLevel" size="small">
-              <el-radio value="low">低危</el-radio>
-              <el-radio value="medium">中危</el-radio>
-              <el-radio value="high">高危</el-radio>
-            </el-radio-group>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="老年人/相关第三方签字" label-width="170">
-            <TgInput v-model="dataForm.secondElderSign" placeholder="签字人" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="签字日期">
-            <TgDatePicker v-model="dataForm.secondSignDate" type="date" placeholder="选择日期" />
-          </el-form-item>
-        </el-col>
-      </el-row>
+          </div>
+          
+          <div class="signature-item">
+            <span class="signature-label">老年人或相关第三方签名:</span>
 
-      <!-- 其他备注 -->
-      <el-divider />
-      <el-form-item label="其他">
-        <TgTextarea v-model="dataForm.remark" placeholder="请输入其他备注信息" :rows="3" />
-      </el-form-item>
+          </div>
+        </div>
+      </div>
 
-      <!-- 底部签名 -->
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="护理人员">
-            <TgInput v-model="dataForm.nurseSign" placeholder="护理人员签字" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="老年人/相关第三方签字" label-width="170">
-            <TgInput v-model="dataForm.elderSign" placeholder="签字人" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12" :offset="12">
-          <el-form-item label="签字日期" label-width="170">
-            <TgDatePicker v-model="dataForm.signDate" type="date" placeholder="选择日期" />
-          </el-form-item>
-        </el-col>
-      </el-row>
+ 
     </el-form>
 
     <template #footer>
       <el-button v-if="!isView" @click="handleClosed">取消</el-button>
       <el-button v-if="!isView" type="primary" @click="submitForm" :loading="submitLoading">确定</el-button>
       <el-button v-if="isView" @click="handleClosed">关闭</el-button>
+      <el-button v-if="isView" type="success" @click="handleExport">打印</el-button>
     </template>
-  </Dialog>
+  </el-drawer>
 </template>
 
 <script setup lang="ts">
@@ -223,18 +175,71 @@ const selectElderRef = ref()
 // 长者详情
 const elderDetail = ref<any>({})
 
-// 风险项目
-const riskItems = ref([
-  { name: '噎食', checked: false, riskLevel: '' },
-  { name: '食品药品误食', checked: false, riskLevel: '' },
-  { name: '压疮', checked: false, riskLevel: '' },
-  { name: '烫伤', checked: false, riskLevel: '' },
-  { name: '坠床', checked: false, riskLevel: '' },
-  { name: '跌倒', checked: false, riskLevel: '' },
-  { name: '他伤或自伤', checked: false, riskLevel: '' },
-  { name: '走失', checked: false, riskLevel: '' }
+// 风险项目表格数据
+const riskTableItems = ref([
+  { key: 'asphyxiation', name: '防噎食评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+  { key: 'pressureUlcer', name: '防压疮评估', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+  { key: 'fall', name: '防跌倒风险评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+  { key: 'bedFall', name: '防坠床评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+  { key: 'scald', name: '防烫伤评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+  { key: 'wandering', name: '防走失风险评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+  { key: 'selfHarm', name: '防自伤或他伤:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+  { key: 'foodDrug', name: '防食品药品误食评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+  { key: 'entertainment', name: '防文娱活动意外:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false }
 ])
 
+// 接口返回的风险数据选项(模拟数据,实际从接口获取)
+const riskOptionsMap = ref<Record<string, any[]>>({
+  asphyxiation: [],
+  pressureUlcer: [],
+  fall: [],
+  bedFall: [],
+  scald: [],
+  wandering: [],
+  selfHarm: [],
+  foodDrug: [],
+  entertainment: []
+})
+
+// 获取风险选项(从接口数据)
+const getRiskOptions = (key: string) => {
+  // 如果接口返回了数据,使用接口数据
+  const options = riskOptionsMap.value[key]
+  if (options && options.length > 0) {
+    return options
+  }
+  // 默认选项
+  return [
+    { label: '无风险', value: 'none' },
+    { label: '低风险', value: 'low' },
+    { label: '中风险', value: 'medium' },
+    { label: '高风险', value: 'high' }
+  ]
+}
+
+// 加载长者风险数据(从接口获取)
+const loadElderRiskData = async (elderId: string) => {
+  try {
+    // TODO: 调用接口获取长者的各项评估数据
+    // const res = await getElderRiskAssessments(elderId)
+    // 模拟接口返回数据
+    const mockData = {
+      asphyxiation: [{ label: '√低风险', value: 'low' }, { label: '√中风险', value: 'medium' }],
+      pressureUlcer: [{ label: '√低风险', value: 'low' }],
+      fall: [{ label: '√低风险', value: 'low' }],
+      bedFall: [{ label: '√高风险', value: 'high' }],
+      scald: [{ label: '√低风险', value: 'low' }],
+      wandering: [{ label: '√低风险', value: 'low' }],
+      selfHarm: [{ label: '√低风险', value: 'low' }],
+      foodDrug: [{ label: '√低风险', value: 'low' }],
+      entertainment: [{ label: '√低风险', value: 'low' }]
+    }
+    riskOptionsMap.value = mockData
+  } catch (e) {
+    console.error('获取风险数据失败', e)
+  }
+}
+
 // 表单数据
 const dataForm = reactive({
   id: undefined,
@@ -244,6 +249,8 @@ const dataForm = reactive({
   // 风险项目数据 (JSON格式存储到 riskData)
   riskData: '',
   otherRisk: '',
+  // 预计下次评估日期
+  nextAssessDate: '',
   // 首次告知签名
   firstRisk: '',
   firstNurseSign: '',
@@ -277,6 +284,8 @@ const handleSelectElder = async (item: any) => {
     try {
       const res = await getElderInfoById(item.id)
       elderDetail.value = res
+      // 加载长者的风险评估数据
+      await loadElderRiskData(item.id)
     } catch (e) {
       console.error('获取长者详情失败', e)
     }
@@ -302,13 +311,20 @@ const open = async (row?: any, viewMode = false) => {
       // 解析风险项目
       if (res.riskData) {
         const parsedData = JSON.parse(res.riskData)
-        // 解析风险项目列表
-        if (parsedData.risks && Array.isArray(parsedData.risks)) {
-          riskItems.value = riskItems.value.map(item => {
-            const saved = parsedData.risks.find((s: any) => s.name === item.name)
-            return saved || item
-          })
-        }
+        // 解析风险表格数据
+        riskTableItems.value = riskTableItems.value.map(item => {
+          const saved = parsedData[item.key]
+          if (saved) {
+            return {
+              ...item,
+              riskLevel: saved.level || saved.id || '',
+              lowChecked: saved.remark?.low || false,
+              mediumChecked: saved.remark?.medium || false,
+              highChecked: saved.remark?.high || false
+            }
+          }
+          return item
+        })
         // 解析其他风险
         if (parsedData.otherRisk !== undefined) {
           dataForm.otherRisk = parsedData.otherRisk
@@ -329,6 +345,13 @@ const open = async (row?: any, viewMode = false) => {
   }
 }
 
+// 日期格式化
+const formatDate = (date: any) => {
+  if (!date) return ''
+  const d = new Date(date)
+  return `${d.getFullYear()}年${d.getMonth() + 1}月${d.getDate()}日`
+}
+
 // 重置表单
 const resetForm = () => {
   Object.assign(dataForm, {
@@ -338,6 +361,7 @@ const resetForm = () => {
     tenantId: getTenantId(),
     riskData: '',
     otherRisk: '',
+    nextAssessDate: '',
     firstRisk: '',
     firstNurseSign: '',
     firstElderSign: '',
@@ -354,16 +378,28 @@ const resetForm = () => {
     signDate: ''
   })
   elderDetail.value = {}
-  riskItems.value = [
-    { name: '噎食', checked: false, riskLevel: '' },
-    { name: '食品药品误食', checked: false, riskLevel: '' },
-    { name: '压疮', checked: false, riskLevel: '' },
-    { name: '烫伤', checked: false, riskLevel: '' },
-    { name: '坠床', checked: false, riskLevel: '' },
-    { name: '跌倒', checked: false, riskLevel: '' },
-    { name: '他伤或自伤', checked: false, riskLevel: '' },
-    { name: '走失', checked: false, riskLevel: '' }
+  riskTableItems.value = [
+    { key: 'asphyxiation', name: '防噎食评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+    { key: 'pressureUlcer', name: '防压疮评估', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+    { key: 'fall', name: '防跌倒风险评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+    { key: 'bedFall', name: '防坠床评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+    { key: 'scald', name: '防烫伤评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+    { key: 'wandering', name: '防走失风险评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+    { key: 'selfHarm', name: '防自伤或他伤:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+    { key: 'foodDrug', name: '防食品药品误食评估:', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false },
+    { key: 'entertainment', name: '防文娱活动意外', riskLevel: '', lowChecked: false, mediumChecked: false, highChecked: false }
   ]
+  riskOptionsMap.value = {
+    asphyxiation: [],
+    pressureUlcer: [],
+    fall: [],
+    bedFall: [],
+    scald: [],
+    wandering: [],
+    selfHarm: [],
+    foodDrug: [],
+    entertainment: []
+  }
 }
 
 // 关闭弹窗
@@ -380,12 +416,21 @@ const submitForm = async () => {
 
   submitLoading.value = true
   try {
-    // 处理风险项目数据 - 包含风险项目列表和其他风险
-    const selectedRisks = riskItems.value.filter(item => item.checked)
-    const riskDataObj = {
-      risks: selectedRisks,
-      otherRisk: dataForm.otherRisk
-    }
+    // 处理风险项目数据 - 将表格数据转换为存储格式
+    const riskDataObj: Record<string, any> = {}
+    riskTableItems.value.forEach(item => {
+      riskDataObj[item.key] = {
+        id: item.riskLevel, // 风险程度ID
+        level: item.riskLevel, // 风险等级
+        // 备注信息
+        remark: {
+          low: item.lowChecked,
+          medium: item.mediumChecked,
+          high: item.highChecked
+        }
+      }
+    })
+    
     const submitData = {
       ...dataForm,
       riskData: JSON.stringify(riskDataObj)
@@ -406,6 +451,160 @@ const submitForm = async () => {
   }
 }
 
+// 打印功能
+const handleExport = () => {
+  // 创建打印窗口
+  const printWindow = window.open('', '_blank')
+  if (!printWindow) {
+    message.error('请允许弹出窗口以进行打印')
+    return
+  }
+
+  // 获取长者信息
+  const elderName = elderDetail.value.elderName || ''
+  const elderSex = getDictLabel(DICT_TYPE.SYSTEM_USER_SEX, elderDetail.value.elderSex) || ''
+  const elderAge = elderDetail.value.elderAge || ''
+  const bedName = elderDetail.value.bedName || ''
+  const nurseLevelName = elderDetail.value.nurseLevelName || ''
+
+  // 构建风险表格HTML
+  let riskTableHtml = ''
+  riskTableItems.value.forEach((item, index) => {
+    const riskLevelText = getRiskLevelText(item.riskLevel)
+    const lowChecked = item.lowChecked ? '☑' : '☐'
+    const mediumChecked = item.mediumChecked ? '☑' : '☐'
+    const highChecked = item.highChecked ? '☑' : '☐'
+    
+    riskTableHtml += `
+      <tr>
+        <td style="border: 1px solid #333; padding: 8px; text-align: center;">${index + 1}</td>
+        <td style="border: 1px solid #333; padding: 8px;">${item.name}</td>
+        <td style="border: 1px solid #333; padding: 8px; text-align: center;">${riskLevelText}</td>
+        <td style="border: 1px solid #333; padding: 8px;">
+          <span>风险程度:</span>
+          <span>${lowChecked}低危</span>
+          <span style="margin-left: 10px;">${mediumChecked}中危</span>
+          <span style="margin-left: 10px;">${highChecked}高危</span>
+        </td>
+      </tr>
+    `
+  })
+
+  // 预计下次评估日期
+  const nextAssessDate = dataForm.nextAssessDate ? formatDate(dataForm.nextAssessDate) : '无'
+
+  // 构建打印内容
+  const printContent = `
+    <!DOCTYPE html>
+    <html>
+    <head>
+      <meta charset="UTF-8">
+      <title>服务安全风险知情告知书</title>
+      <style>
+        body { font-family: 'SimSun', serif; font-size: 14px; line-height: 1.6; }
+        .print-container { width: 210mm; margin: 0 auto; padding: 20mm; }
+        .title { text-align: center; font-size: 22px; font-weight: bold; margin-bottom: 20px; }
+        .subtitle { text-align: center; font-size: 16px; margin-bottom: 30px; }
+        .info-row { display: flex; margin-bottom: 10px; }
+        .info-item { flex: 3; }
+        .section-title { font-weight: bold; margin: 20px 0 10px; }
+        .content-text { text-indent: 2em; margin-bottom: 10px; }
+        table { width: 100%; border-collapse: collapse; margin: 15px 0; }
+        th { background-color: #f5f5f5; font-weight: bold; }
+        .signature-section { margin-top: 30px; }
+        .signature-title { font-weight: bold; margin-bottom: 10px; }
+        .signature-item { margin: 15px 0; }
+        .signature-line { display: inline-block; width: 200px; border-bottom: 1px solid #333; margin-left: 10px; }
+        .next-date { margin: 15px 0; padding: 10px; background-color: #f5f5f5; }
+        @media print { body { margin: 0; } .print-container { padding: 10mm; } }
+      </style>
+    </head>
+    <body>
+      <div class="print-container">
+        <div class="title">服务安全风险知情告知书</div>
+        
+        <div class="info-row">
+          <div class="info-item">姓名:${elderName}</div>
+          <div class="info-item" style="flex: 2">性别:${elderSex}</div>
+          <div class="info-item" style="flex: 2">年龄:${elderAge}岁</div>
+          <div class="info-item">床号:${bedName}</div>
+          <div class="info-item">护理级别:${nurseLevelName}</div>
+        </div>
+
+        <div class="section-title">尊敬的老年人/相关第三方/监护人:</div>
+        <div class="content-text">您好!感谢您对本机构的信任和支持。</div>
+        <div class="content-text">
+          经我院评估您或您相关第三方的身体状况,您或您亲属在我院养老期间,存在下列服务安全风险。
+          为保证对您或您相关第三方的服务质量,特向您告知!我院将针对老年人的情况做好相关防范措施,
+          请您理解、配合、并支持相关工作措施的落实。
+        </div>
+
+        <table>
+          <thead>
+            <tr>
+              <th style="border: 1px solid #333; padding: 8px; width: 60px;">序号</th>
+              <th style="border: 1px solid #333; padding: 8px;">项目</th>
+              <th style="border: 1px solid #333; padding: 8px; width: 100px;">风险程度</th>
+              <th style="border: 1px solid #333; padding: 8px;">备注</th>
+            </tr>
+          </thead>
+          <tbody>
+            ${riskTableHtml}
+          </tbody>
+        </table>
+
+        <div class="next-date">
+          <strong>预计下次评估日期:</strong>${nextAssessDate}
+        </div>
+
+        <div class="signature-section">
+          <div class="signature-title">告知签名:</div>
+          <div class="content-text">
+            通过对老年人的整体评估,老年人有可能发生以上风险,其风险及防范措施已向老年人或相关第三方进行了如实告知。
+          </div>
+          <div style="color: #666; font-size: 12px; margin-bottom: 20px;">
+            (老年人或相关第三方声明:本人已知悉并签字确认。)
+          </div>
+          
+          <div class="signature-item">
+            <span>经办人(护理人员):</span>
+          
+          </div>
+          
+          <div class="signature-item">
+            <span>老年人或相关第三方签名:</span>
+           
+          </div>
+        </div>
+
+        ${dataForm.remark ? `<div class="section-title">其他备注:</div><div>${dataForm.remark}</div>` : ''}
+      </div>
+      <script>
+        window.onload = function() {
+          setTimeout(function() {
+            window.print();
+          }, 500);
+        };
+      <\/script>
+    </body>
+    </html>
+  `
+
+  printWindow.document.write(printContent)
+  printWindow.document.close()
+}
+
+// 获取风险等级文本
+const getRiskLevelText = (level: string): string => {
+  const levelMap: Record<string, string> = {
+    'none': '无风险',
+    'low': '低风险',
+    'medium': '中风险',
+    'high': '高风险'
+  }
+  return levelMap[level] || level || '-'
+}
+
 defineExpose({ open })
 </script>
 
@@ -444,25 +643,125 @@ defineExpose({ open })
   }
 }
 
-.risk-list {
-  margin: 15px 0;
+// 风险表格样式
+.risk-table-wrapper {
+  margin: 20px 0;
+  overflow-x: auto;
+
+  .risk-table {
+    width: 100%;
+    border-collapse: collapse;
+    font-size: 14px;
 
-  .risk-item {
+    th, td {
+      border: 1px solid #dcdfe6;
+      padding: 10px 8px;
+      text-align: center;
+    }
+
+    th {
+      background-color: #f5f7fa;
+      font-weight: bold;
+    }
+
+    .col-index {
+      width: 60px;
+    }
+
+    .col-project {
+      width: 180px;
+      text-align: left;
+      padding-left: 15px;
+    }
+
+    .col-level {
+      width: 140px;
+    }
+
+    .col-remark {
+      width: auto;
+      text-align: left;
+      padding-left: 15px;
+
+      .remark-text {
+        margin-right: 10px;
+        color: #606266;
+      }
+
+      :deep(.el-checkbox) {
+        margin-right: 15px;
+      }
+    }
+  }
+}
+
+// 预计下次评估日期
+.next-assess-date {
+  display: flex;
+  align-items: center;
+  margin: 20px 0;
+  padding: 15px;
+  background-color: #f5f7fa;
+  border-radius: 4px;
+
+  .date-label {
+    font-weight: bold;
+    margin-right: 15px;
+    color: #333;
+  }
+
+  .date-value {
+    margin-left: 15px;
+    color: #606266;
+  }
+}
+
+// 签名区域
+.signature-section {
+  margin-top: 30px;
+  padding: 20px;
+  background-color: #fafafa;
+  border-radius: 4px;
+  border: 1px solid #ebeef5;
+
+  .signature-title {
+    font-size: 16px;
+    font-weight: bold;
+    margin-bottom: 15px;
+    color: #333;
+  }
+
+  .signature-desc {
+    text-indent: 2em;
+    line-height: 1.8;
+    margin-bottom: 10px;
+    color: #606266;
+  }
+
+  .signature-declare {
+    text-indent: 2em;
+    margin-bottom: 25px;
+    color: #909399;
+    font-size: 13px;
+  }
+
+  .signature-item {
     display: flex;
     align-items: center;
-    margin-bottom: 10px;
-    padding: 8px;
-    background-color: #fff;
-    border-radius: 4px;
-
-    .risk-label {
-      margin-left: 20px;
-      margin-right: 10px;
-      color: #666;
+    margin-bottom: 20px;
+
+    .signature-label {
+      font-weight: bold;
+      white-space: nowrap;
+      color: #333;
     }
 
-    :deep(.el-checkbox) {
-      min-width: 120px;
+    .signature-line {
+      flex: 1;
+      height: 1px;
+      border-bottom: 1px solid #333;
+      margin-left: 10px;
+      min-width: 200px;
     }
   }
 }

+ 250 - 94
src/views/elderly/apply/nine-precautions/risk-disclosure-statement/index.vue

@@ -1,3 +1,189 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="80px"
+    >
+      <el-form-item label="长者姓名" prop="elderName">
+        <el-input
+          v-model="queryParams.elderName"
+          placeholder="请输入长者姓名"
+          class="!w-240px"
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+
+<!--      <el-form-item label="评估年份">-->
+<!--        <el-date-picker-->
+<!--          size="default"-->
+<!--          ref="selectRef"-->
+<!--          class="!w-240px"-->
+<!--          v-model="queryParams.recordMonthRange"-->
+<!--          type="year"-->
+<!--          :clearable="true"-->
+<!--          :editable="false"-->
+<!--          placeholder="选择记录年份"-->
+<!--          value-format="YYYY"-->
+<!--          format="YYYY"-->
+<!--          date-format="YYYY"-->
+<!--        />-->
+<!--      </el-form-item>-->
+
+      <el-form-item>
+        <el-button @click="handleQuery">
+          <Icon icon="ep:search" class="mr-5px" /> 搜索
+        </el-button>
+        <el-button @click="resetQuery">
+          <Icon icon="ep:refresh" class="mr-5px" /> 重置
+        </el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <TabBarBtn>
+      <template #next>
+        <el-button type="primary" @click="handleAdd">
+          <Icon icon="ep:plus" class="mr-5px" /> 新增
+        </el-button>
+         <el-button type="success" @click="handleAdd">
+          <Icon icon="ep:upload" class="mr-5px" /> 导出
+        </el-button>
+      </template>
+    </TabBarBtn>
+
+    <el-table v-loading="loading" :data="list" stripe>
+      <el-table-column type="index" label="序号" width="60" align="center" />
+      <el-table-column label="长者姓名" prop="elderName" width="110" align="center"/>
+      <el-table-column label="性别" prop="elderSex" width="80" align="center">
+        <template #default="{ row }">
+          {{ getDictLabel(DICT_TYPE.SYSTEM_USER_SEX, row.elderSex) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="年龄" prop="elderAge" width="80" align="center"/>
+
+      <el-table-column label="床号" prop="bedName" width="140" align="center"/>
+      <el-table-column label="合同号" prop="bedName" width="120" align="center"/>
+      <el-table-column label="护理级别" prop="bedName" width="120" align="center"/>
+      <el-table-column label="评估日期" prop="bedName" width="120" align="center"/>
+      <el-table-column label="防噎食评估" prop="asphyxiationRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.asphyxiationRisk)" @click="handleOpenAsphyxiation(row)">{{ row.asphyxiationRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="防压疮评估" prop="pressureUlcerRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.pressureUlcerRisk)" @click="handleOpenPressureUlcer(row)">{{ row.pressureUlcerRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="防跌倒评估" prop="fallRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.fallRisk)" @click="handleOpenFall(row)">{{ row.fallRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="防坠床评估" prop="bedFallRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.bedFallRisk)" @click="handleOpenBedFall(row)">{{ row.bedFallRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="防烫伤评估" prop="scaldRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.scaldRisk)" @click="handleOpenScald(row)">{{ row.scaldRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="防走失评估" prop="wanderingRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.wanderingRisk)" @click="handleOpenWandering(row)">{{ row.wanderingRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="防自杀评估" prop="suicideRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.suicideRisk)" @click="handleOpenSuicide(row)">{{ row.suicideRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+
+      <el-table-column label="简易精神状态" prop="mentalState" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.mentalState)" @click="handleOpenMental(row)">{{ row.mentalState || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="攻击风险评估" prop="attackRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.attackRisk)" @click="handleOpenAttack(row)">{{ row.attackRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="感知觉与沟通评估" prop="perceptionRisk" width="142" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.perceptionRisk)" @click="handleOpenPerception(row)">{{ row.perceptionRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="平衡能力评估" prop="balanceRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.balanceRisk)" @click="handleOpenBalance(row)">{{ row.balanceRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="日常生活能力评估" prop="dailyLivingRisk" width="142" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.dailyLivingRisk)" @click="handleOpenDailyLiving(row)">{{ row.dailyLivingRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="营养评估" prop="nutritionRisk" width="130" align="center" >
+        <template #default="{ row }">
+          <el-tag :type="getRiskType(row.nutritionRisk)" @click="handleOpenNutrition(row)">{{ row.nutritionRisk || '-' }}</el-tag>
+        </template>
+      </el-table-column>
+
+     <el-table-column label="操作" align="center" width="200" fixed="right">
+        <template #default="scope">
+          <el-button
+            link
+            type="primary"
+            @click="handleEdit(scope.row, scope.row.id)"
+          >
+            编辑
+          </el-button>
+          <el-button
+            link
+            type="warning"
+            @click="handleView(scope.row,scope.row.id)"
+          >
+            详情
+          </el-button>
+          <el-button
+            link
+            type="danger"
+            @click="handleDelete(scope.row)"
+          >
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
+
+    </el-table>
+
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 新增/编辑弹窗 -->
+  <SafetyRiskNoticeForm ref="formRef" @success="getList" />
+  
+  <!-- 防噎食评估详情弹窗 -->
+  <AsphyxiationForm ref="asphyxiationFormRef" />
+
+
+</template>
+
 <script setup lang="ts">
 import { DICT_TYPE, getDictLabel } from '@/utils/dict'
 import {
@@ -6,6 +192,7 @@ import {
 } from '@/api/elderly/apply/check-in'
 import { formatTime } from '@/utils'
 import SafetyRiskNoticeForm from './Form.vue'
+import AsphyxiationForm from '@/views/elderly/apply/nine-precautions/asphyxiation-by-choking/AddForm.vue'
 
 defineOptions({ name: 'RiskDisclosureStatement' })
 
@@ -53,7 +240,69 @@ const resetQuery = () => {
 // 新增
 const formRef = ref()
 const handleAdd = () => {
-  formRef.value?.open()
+   formRef.value?.open()
+
+
+}
+
+// 防噎食评估弹窗
+const asphyxiationFormRef = ref()
+const handleOpenAsphyxiation = (row: any) => {
+  // 打开防噎食评估详情弹窗,传入租户ID和长者ID
+  asphyxiationFormRef.value?.open(row.tenantId, row.asphyxiationId, true)
+}
+
+// 其他评估弹窗处理方法(待实现)
+const handleOpenPressureUlcer = (row: any) => {
+  message.info('防压疮评估功能开发中')
+}
+const handleOpenFall = (row: any) => {
+  message.info('防跌倒评估功能开发中')
+}
+const handleOpenBedFall = (row: any) => {
+  message.info('防坠床评估功能开发中')
+}
+const handleOpenScald = (row: any) => {
+  message.info('防烫伤评估功能开发中')
+}
+const handleOpenWandering = (row: any) => {
+  message.info('防走失评估功能开发中')
+}
+const handleOpenSuicide = (row: any) => {
+  message.info('防自杀评估功能开发中')
+}
+const handleOpenMental = (row: any) => {
+  message.info('简易精神状态功能开发中')
+}
+const handleOpenAttack = (row: any) => {
+  message.info('攻击风险评估功能开发中')
+}
+const handleOpenPerception = (row: any) => {
+  message.info('感知觉与沟通评估功能开发中')
+}
+const handleOpenBalance = (row: any) => {
+  message.info('平衡能力评估功能开发中')
+}
+const handleOpenDailyLiving = (row: any) => {
+  message.info('日常生活能力评估功能开发中')
+}
+const handleOpenNutrition = (row: any) => {
+  message.info('营养评估功能开发中')
+}
+
+/**
+ * 根据风险等级获取按钮类型(颜色)
+ * @param riskLevel 风险等级:无风险、低风险、中风险、高风险
+ * @returns Element Plus 按钮类型:success(绿)、info(灰)、warning(黄)、danger(红)、primary(蓝)
+ */
+const getRiskType = (riskLevel: string): string => {
+  if (!riskLevel) return 'info'
+  const level = riskLevel.trim()
+  if (level === '无风险') return 'success'
+  if (level === '低风险') return 'info'
+  if (level === '中风险') return 'warning'
+  if (level === '高风险') return 'danger'
+  return 'primary'
 }
 
 // 编辑
@@ -84,100 +333,7 @@ onMounted(() => {
 })
 </script>
 
-<template>
-  <ContentWrap>
-    <!-- 搜索工作栏 -->
-    <el-form
-      class="-mb-15px"
-      :model="queryParams"
-      ref="queryFormRef"
-      :inline="true"
-      label-width="80px"
-    >
-      <el-form-item label="长者姓名" prop="elderName">
-        <el-input
-          v-model="queryParams.elderName"
-          placeholder="请输入长者姓名"
-          class="!w-240px"
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-<!--      <el-form-item label="楼层" prop="floorName">-->
-<!--        <el-input-->
-<!--          v-model="queryParams.floorName"-->
-<!--          placeholder="请输入楼层"-->
-<!--          class="!w-240px"-->
-<!--          @keyup.enter="handleQuery"-->
-<!--        />-->
-<!--      </el-form-item>-->
-      <el-form-item>
-        <el-button @click="handleQuery">
-          <Icon icon="ep:search" class="mr-5px" /> 搜索
-        </el-button>
-        <el-button @click="resetQuery">
-          <Icon icon="ep:refresh" class="mr-5px" /> 重置
-        </el-button>
-      </el-form-item>
-    </el-form>
-  </ContentWrap>
-
-  <!-- 列表 -->
-  <ContentWrap>
-    <TabBarBtn>
-      <template #next>
-        <el-button type="primary" @click="handleAdd">
-          <Icon icon="ep:plus" class="mr-5px" /> 新增告知书
-        </el-button>
-      </template>
-    </TabBarBtn>
-
-    <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column type="index" label="序号" width="60" align="center" />
-      <el-table-column label="长者姓名" prop="elderName" min-width="100" />
-      <el-table-column label="性别" prop="elderSex" min-width="80">
-        <template #default="{ row }">
-          {{ getDictLabel(DICT_TYPE.SYSTEM_USER_SEX, row.elderSex) }}
-        </template>
-      </el-table-column>
-      <el-table-column label="年龄" prop="elderAge" min-width="80" />
 
-      <el-table-column label="床号" prop="bedName" min-width="200" />
-      <el-table-column label="首次告知日期" prop="firstSignDate" min-width="120">
-        <template #default="{ row }">
-          {{ row.firstSignDate ? formatTime(row.firstSignDate, 'yyyy-MM-dd') : '-' }}
-        </template>
-      </el-table-column>
-      <el-table-column label="第二次告知日期" prop="secondSignDate" min-width="120">
-        <template #default="{ row }">
-          {{ row.secondSignDate ? formatTime(row.secondSignDate, 'yyyy-MM-dd') : '-' }}
-        </template>
-      </el-table-column>
-      <el-table-column label="创建时间" prop="createTime" min-width="150">
-        <template #default="{ row }">
-          {{ row.createTime ? formatTime(row.createTime, 'yyyy-MM-dd HH:mm') : '-' }}
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" width="220" fixed="right">
-        <template #default="{ row }">
-          <el-button link type="primary" @click="handleView(row)">详情</el-button>
-          <el-button link type="primary" @click="handleEdit(row)">编辑</el-button>
-          <el-button link type="danger" @click="handleDelete(row)">删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <!-- 分页 -->
-    <Pagination
-      :total="total"
-      v-model:page="queryParams.pageNo"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </ContentWrap>
-
-  <!-- 新增/编辑弹窗 -->
-  <SafetyRiskNoticeForm ref="formRef" @success="getList" />
-</template>
 
 <style scoped lang="scss">
 </style>