|
|
@@ -0,0 +1,1349 @@
|
|
|
+<template>
|
|
|
+ <el-drawer
|
|
|
+ v-model="dialogVisible"
|
|
|
+ :title="title"
|
|
|
+ resizable
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :close-on-press-escape="false"
|
|
|
+ :destroy-on-close="true"
|
|
|
+ size="85%"
|
|
|
+ :before-close="handleClosed"
|
|
|
+ >
|
|
|
+
|
|
|
+ <div class="mmse-form">
|
|
|
+ <!-- 楼层清洁 -->
|
|
|
+
|
|
|
+
|
|
|
+ <el-row :gutter="40">
|
|
|
+ <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" class="row">
|
|
|
+ <text>楼栋</text>
|
|
|
+ <el-select :disabled="isDetail" v-model="dataForm.buildId" placeholder="选择楼栋" style="width: 100%" @change="handleBuildChange">
|
|
|
+ <el-option v-for="(item,index) in buildList" :key="index" :label="item.buildName" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ </el-col>
|
|
|
+ <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" class="row">
|
|
|
+ <text>楼层</text>
|
|
|
+ <el-select :disabled="isDetail" v-model="dataForm.floorId" placeholder="选择楼层" style="width: 100%" @change="handleFloorChange">
|
|
|
+ <el-option v-for="(item,index) in floorList" :key="index" :label="item.floorName" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row :gutter="40">
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="row">
|
|
|
+ <text>登记人</text>
|
|
|
+ <el-input :disabled="isDetail" v-model="form.assessor" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="row">
|
|
|
+ <text>登记月份</text>
|
|
|
+ <el-date-picker :disabled="isDetail" v-model="form.assessDate" type="month" style="width: 100%;"/>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <!-- 表单内容区域 -->
|
|
|
+ <div class="form-body">
|
|
|
+ <!-- 楼宇清洁消毒记录表 -->
|
|
|
+ <div class="building-cleaning-table-wrapper">
|
|
|
+ <table class="building-cleaning-table">
|
|
|
+ <thead>
|
|
|
+ <!-- 日期行 -->
|
|
|
+ <tr>
|
|
|
+ <th colspan="2" rowspan="2" class="col-area-header">区域/日期</th>
|
|
|
+ <th v-for="day in 31" :key="'day-'+day" colspan="3" class="col-day-header">{{ day }}</th>
|
|
|
+ </tr>
|
|
|
+ <!-- 时段行 -->
|
|
|
+ <tr>
|
|
|
+ <template v-for="day in 31" :key="'time-'+day">
|
|
|
+ <th class="col-time">早</th>
|
|
|
+ <th class="col-time">中</th>
|
|
|
+ <th class="col-time">晚</th>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ </thead>
|
|
|
+ <tbody>
|
|
|
+ <!-- 护理站 -->
|
|
|
+ <tr>
|
|
|
+ <td rowspan="3" class="area-name">护理站</td>
|
|
|
+ <td class="item-name">台面电话</td>
|
|
|
+ <template v-for="day in 31" :key="'nurse1-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].nurseStation.phone.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].nurseStation.phone.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].nurseStation.phone.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].nurseStation.phone.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].nurseStation.phone.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].nurseStation.phone.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td class="item-name">桌子</td>
|
|
|
+ <template v-for="day in 31" :key="'nurse2-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].nurseStation.table.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].nurseStation.table.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].nurseStation.table.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].nurseStation.table.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].nurseStation.table.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].nurseStation.table.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td class="item-name">椅子</td>
|
|
|
+ <template v-for="day in 31" :key="'nurse3-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].nurseStation.chair.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].nurseStation.chair.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].nurseStation.chair.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].nurseStation.chair.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].nurseStation.chair.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].nurseStation.chair.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+
|
|
|
+ <!-- 长者房间 -->
|
|
|
+ <tr>
|
|
|
+ <td rowspan="4" class="area-name">长者房间<br/>(含氯250mg/L)</td>
|
|
|
+ <td class="item-name">床头柜</td>
|
|
|
+ <template v-for="day in 31" :key="'room1-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.bedsideTable.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.bedsideTable.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.bedsideTable.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.bedsideTable.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.bedsideTable.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.bedsideTable.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td class="item-name">床围栏</td>
|
|
|
+ <template v-for="day in 31" :key="'room2-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.bedRail.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.bedRail.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.bedRail.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.bedRail.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.bedRail.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.bedRail.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td class="item-name">开关按钮</td>
|
|
|
+ <template v-for="day in 31" :key="'room3-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.switchBtn.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.switchBtn.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.switchBtn.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.switchBtn.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.switchBtn.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.switchBtn.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td class="item-name">门把手</td>
|
|
|
+ <template v-for="day in 31" :key="'room4-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.doorHandle.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.doorHandle.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.doorHandle.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.doorHandle.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].elderRoom.doorHandle.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].elderRoom.doorHandle.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+
|
|
|
+ <!-- 居室 -->
|
|
|
+ <tr>
|
|
|
+ <td rowspan="3" class="area-name">居室<br/>(含氯250mg/L)</td>
|
|
|
+ <td class="item-name">地面</td>
|
|
|
+ <template v-for="day in 31" :key="'living1-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].livingRoom.floor.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].livingRoom.floor.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].livingRoom.floor.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].livingRoom.floor.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].livingRoom.floor.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].livingRoom.floor.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td class="item-name">窗台</td>
|
|
|
+ <template v-for="day in 31" :key="'living2-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].livingRoom.windowsill.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].livingRoom.windowsill.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].livingRoom.windowsill.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].livingRoom.windowsill.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].livingRoom.windowsill.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].livingRoom.windowsill.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td class="item-name">走廊扶手</td>
|
|
|
+ <template v-for="day in 31" :key="'living3-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].livingRoom.handrail.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].livingRoom.handrail.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].livingRoom.handrail.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].livingRoom.handrail.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].livingRoom.handrail.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].livingRoom.handrail.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+
|
|
|
+ <!-- 卫生间 -->
|
|
|
+ <tr>
|
|
|
+ <td rowspan="2" class="area-name">卫生间<br/>(含氯500mg/L)</td>
|
|
|
+ <td class="item-name">水龙头</td>
|
|
|
+ <template v-for="day in 31" :key="'toilet1-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].toilet.faucet.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].toilet.faucet.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].toilet.faucet.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].toilet.faucet.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].toilet.faucet.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].toilet.faucet.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td class="item-name">马桶</td>
|
|
|
+ <template v-for="day in 31" :key="'toilet2-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].toilet.toilet.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].toilet.toilet.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].toilet.toilet.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].toilet.toilet.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].toilet.toilet.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].toilet.toilet.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+
|
|
|
+ <!-- 开水间 -->
|
|
|
+ <tr>
|
|
|
+ <td class="area-name">开水间<br/>(含氯500mg/L)</td>
|
|
|
+ <td class="item-name">-</td>
|
|
|
+ <template v-for="day in 31" :key="'water-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].waterRoom.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].waterRoom.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].waterRoom.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].waterRoom.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].waterRoom.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].waterRoom.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+
|
|
|
+ <!-- 垃圾存放处 -->
|
|
|
+ <tr>
|
|
|
+ <td class="area-name">垃圾存放处<br/>(含氯500mg/L)</td>
|
|
|
+ <td class="item-name">-</td>
|
|
|
+ <template v-for="day in 31" :key="'garbage-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].garbage.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].garbage.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].garbage.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].garbage.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].garbage.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].garbage.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+
|
|
|
+ <!-- 开窗通风 -->
|
|
|
+ <tr>
|
|
|
+ <td class="area-name">开窗通风</td>
|
|
|
+ <td class="item-name">-</td>
|
|
|
+ <template v-for="day in 31" :key="'vent-'+day">
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].ventilation.morning" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].ventilation.morning || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].ventilation.noon" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].ventilation.noon || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <select v-if="!isDetail" v-model="form.records[day-1].ventilation.evening" class="native-select">
|
|
|
+ <option value="">--</option>
|
|
|
+ <option value="已完成">已完成</option>
|
|
|
+ </select>
|
|
|
+ <span v-else class="check-value">{{ form.records[day-1].ventilation.evening || '--' }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+
|
|
|
+ <!-- 执行签名 -->
|
|
|
+ <tr>
|
|
|
+ <td class="area-name">执行签名</td>
|
|
|
+ <td class="item-name">-</td>
|
|
|
+ <template v-for="day in 31" :key="'sign-'+day">
|
|
|
+ <td colspan="3">
|
|
|
+ <el-input v-if="!isDetail" v-model="form.records[day-1].signature" size="small" placeholder="签名" />
|
|
|
+ <span v-else>{{ form.records[day-1].signature }}</span>
|
|
|
+ </td>
|
|
|
+ </template>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 备注说明 -->
|
|
|
+ <div class="note-section">
|
|
|
+ <div class="note-title">备注说明</div>
|
|
|
+ <div class="note-content">
|
|
|
+ <p>1、护理站、长者房间、居室区域均予250mg/L含氯消毒液擦拭消毒;</p>
|
|
|
+ <p>2、卫生间、开水间、垃圾存放处均予500mg/L含氯消毒液擦拭消毒。</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div>前端提交的数据,后端可以参照这个格式:
|
|
|
+ {
|
|
|
+ "buildId": 190,
|
|
|
+ "floorId": 644,
|
|
|
+ "floorName": "2层",
|
|
|
+ "elderName": "0318",
|
|
|
+ "bedName": "测试楼-2层-201-10",
|
|
|
+ "tenantId": 195,
|
|
|
+ "buildName": "测试楼",
|
|
|
+ "assessData": " ",
|
|
|
+ "assessor": "啊啊啊",
|
|
|
+ "assessDate": "2026-03-27",
|
|
|
+ "orgType": 1
|
|
|
+ }
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="handleClosed">关闭</el-button>
|
|
|
+ <el-button style="margin-left: 22px;margin-right: 30px" v-loading="formLoading" type="primary" v-show="!isDetail" @click="submitForm">确定</el-button>
|
|
|
+ <el-button v-if="isDetail" type="success" @click="handleExport">打印</el-button>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ </el-drawer>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script lang="ts" setup>
|
|
|
+import { computed, ref } from 'vue'
|
|
|
+
|
|
|
+import dayjs from 'dayjs'
|
|
|
+
|
|
|
+import { buildingCleaningCreate, buildingCleaningGetById, buildingCleaningUpdate } from "@/api/social-work";
|
|
|
+import {getBuildList} from "@/api/system/badManage";
|
|
|
+const message = useMessage() // 消息弹窗
|
|
|
+const { t } = useI18n() // 国际化
|
|
|
+const title = ref('')
|
|
|
+const dialogVisible = ref(false) // 弹窗
|
|
|
+const formRef = ref() // 表单 Ref
|
|
|
+const selectElderRef = ref() // 表单 Ref
|
|
|
+const isDetail = ref(false) // 是否详情打开
|
|
|
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
|
+let dataForm = ref({
|
|
|
+ // 表单字段
|
|
|
+ id: undefined,
|
|
|
+ idCard: '',
|
|
|
+ buildId: '',
|
|
|
+ floorId: '',
|
|
|
+ floorName: '',
|
|
|
+ contractNumber: '', //档案号
|
|
|
+ elderName: '',//长者姓名
|
|
|
+ bedName: '', //床位号
|
|
|
+ elderAge: '', //年龄
|
|
|
+ elderSex: '', //性别
|
|
|
+ checkInTime: '', //入院日期
|
|
|
+ elderId: '',
|
|
|
+ tenantId: undefined
|
|
|
+})
|
|
|
+
|
|
|
+
|
|
|
+const buildList = ref([])
|
|
|
+const floorList = ref([])
|
|
|
+const handleBuildChange = (buildId: any) => {
|
|
|
+ const selectedBuild = buildList.value.find((item: any) => item.id === buildId)
|
|
|
+ if (selectedBuild) {
|
|
|
+ dataForm.value.buildName = selectedBuild.buildName
|
|
|
+ floorList.value = selectedBuild.floorList || []
|
|
|
+ // 清空楼层选择
|
|
|
+ dataForm.value.floorId = ''
|
|
|
+ dataForm.value.floorName = ''
|
|
|
+ }
|
|
|
+}
|
|
|
+const handleFloorChange = (floorId: any) => {
|
|
|
+ const selectedFloor = floorList.value.find((item: any) => item.id === floorId)
|
|
|
+ if (selectedFloor) {
|
|
|
+ dataForm.value.floorName = selectedFloor.floorName
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const elderUp = (e) => {
|
|
|
+ dataForm.value.elderName = e.elderName
|
|
|
+ dataForm.value.elderId = e.id
|
|
|
+ dataForm.value.elderSex = e.elderSex === 1 ? '男' : '女'
|
|
|
+ dataForm.value.bedName = e.bedName || ''
|
|
|
+ dataForm.value.checkInTime = e.checkInTime
|
|
|
+ dataForm.value.contractNumber = e.contractNumber
|
|
|
+ dataForm.value.elderAge = e.elderAge
|
|
|
+}
|
|
|
+
|
|
|
+// ========== 感知觉与沟通评估表 表单序列化方法 ==========
|
|
|
+
|
|
|
+// 危险物品登记不需要计算总分,保留计算属性占位
|
|
|
+const totalScore = computed(() => {
|
|
|
+ return 0
|
|
|
+})
|
|
|
+
|
|
|
+
|
|
|
+/** 将表单数据序列化为 JSON 对象 */
|
|
|
+const serializeFormData = () => {
|
|
|
+ return {
|
|
|
+ // 基本信息
|
|
|
+ assessor: form.assessor || '',
|
|
|
+ assessDate: form.assessDate ? dayjs(form.assessDate).format('YYYY-MM-DD') : '',
|
|
|
+
|
|
|
+ // 31天楼宇清洁记录
|
|
|
+ records: form.records || []
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 将 JSON 对象反序列化为表单数据 */
|
|
|
+const deserializeFormData = (formData: Record<string, any>) => {
|
|
|
+ if (!formData) return
|
|
|
+
|
|
|
+ // 基本信息
|
|
|
+ form.assessor = formData.assessor || ''
|
|
|
+ form.assessDate = formData.assessDate ? dayjs(formData.assessDate).toDate() : ''
|
|
|
+
|
|
|
+ // 31天楼宇清洁记录
|
|
|
+ if (formData.records && formData.records.length > 0) {
|
|
|
+ form.records = formData.records
|
|
|
+ } else {
|
|
|
+ form.records = generate31DaysRecords()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 重置楼宇清洁消毒记录表表单数据 */
|
|
|
+const resetPerceptionForm = () => {
|
|
|
+ form.assessor = ''
|
|
|
+ form.assessDate = ''
|
|
|
+
|
|
|
+ // 重置31天楼宇清洁记录
|
|
|
+ form.records = generate31DaysRecords()
|
|
|
+}
|
|
|
+
|
|
|
+/** 打开弹窗 */
|
|
|
+const open = async (tenantId, id?: any, detail: boolean = false) => {
|
|
|
+ resetForm()
|
|
|
+ dialogVisible.value = true
|
|
|
+ dataForm.value.id = id || undefined
|
|
|
+ dataForm.value.tenantId = tenantId
|
|
|
+ isDetail.value = detail
|
|
|
+ try {
|
|
|
+ buildList.value = await getBuildList({tenantIds: tenantId})
|
|
|
+ }catch (e) {}
|
|
|
+
|
|
|
+ if (id) {
|
|
|
+ title.value = "编辑-楼宇清洁消毒记录"
|
|
|
+ // 加载登记数据
|
|
|
+ await loadDangerousGoodsData(id)
|
|
|
+ } else {
|
|
|
+ title.value = "新增-楼宇清洁消毒记录"
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 加载登记数据 */
|
|
|
+const loadDangerousGoodsData = async (id: number) => {
|
|
|
+ try {
|
|
|
+ const res = await buildingCleaningGetById(id)
|
|
|
+ if (res) {
|
|
|
+ // 填充长者基本信息
|
|
|
+ dataForm.value.elderName = res.elderName || ''
|
|
|
+ dataForm.value.elderId = res.elderId || ''
|
|
|
+ dataForm.value.elderSex = res.elderSex || ''
|
|
|
+ dataForm.value.bedName = res.bedName || ''
|
|
|
+ dataForm.value.checkInTime = res.checkInTime || ''
|
|
|
+ dataForm.value.contractNumber = res.fileNumber || ''
|
|
|
+ dataForm.value.elderAge = res.elderAge || ''
|
|
|
+ await selectElderRef.value.upData(res.elderName, res.elderId)
|
|
|
+ // 解析 assessData
|
|
|
+ if (res.assessData) {
|
|
|
+ const formData = JSON.parse(res.assessData)
|
|
|
+ deserializeFormData(formData)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ message.error('加载楼宇清洁消毒记录数据失败')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// 生成31天的记录数据结构
|
|
|
+const generate31DaysRecords = () => {
|
|
|
+ return Array.from({ length: 31 }, () => ({
|
|
|
+ // 护理站
|
|
|
+ nurseStation: {
|
|
|
+ phone: { morning: '', noon: '', evening: '' },
|
|
|
+ table: { morning: '', noon: '', evening: '' },
|
|
|
+ chair: { morning: '', noon: '', evening: '' }
|
|
|
+ },
|
|
|
+ // 长者房间
|
|
|
+ elderRoom: {
|
|
|
+ bedsideTable: { morning: '', noon: '', evening: '' },
|
|
|
+ bedRail: { morning: '', noon: '', evening: '' },
|
|
|
+ switchBtn: { morning: '', noon: '', evening: '' },
|
|
|
+ doorHandle: { morning: '', noon: '', evening: '' }
|
|
|
+ },
|
|
|
+ // 居室
|
|
|
+ livingRoom: {
|
|
|
+ floor: { morning: '', noon: '', evening: '' },
|
|
|
+ windowsill: { morning: '', noon: '', evening: '' },
|
|
|
+ handrail: { morning: '', noon: '', evening: '' }
|
|
|
+ },
|
|
|
+ // 卫生间
|
|
|
+ toilet: {
|
|
|
+ faucet: { morning: '', noon: '', evening: '' },
|
|
|
+ toilet: { morning: '', noon: '', evening: '' }
|
|
|
+ },
|
|
|
+ // 开水间
|
|
|
+ waterRoom: { morning: '', noon: '', evening: '' },
|
|
|
+ // 垃圾存放处
|
|
|
+ garbage: { morning: '', noon: '', evening: '' },
|
|
|
+ // 开窗通风
|
|
|
+ ventilation: { morning: '', noon: '', evening: '' },
|
|
|
+ // 执行签名
|
|
|
+ signature: ''
|
|
|
+ }))
|
|
|
+}
|
|
|
+
|
|
|
+const form = reactive({
|
|
|
+ // 基本信息
|
|
|
+ assessor: '',
|
|
|
+ assessDate: '',
|
|
|
+
|
|
|
+ // 31天楼宇清洁记录
|
|
|
+ records: generate31DaysRecords()
|
|
|
+})
|
|
|
+
|
|
|
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
|
|
+
|
|
|
+/** 提交表单 */
|
|
|
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
|
|
+const submitForm = async () => {
|
|
|
+ if (formLoading.value) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ formLoading.value = true
|
|
|
+ // 提交请求
|
|
|
+ try {
|
|
|
+ const assessData = serializeFormData()
|
|
|
+ const tempParams = {
|
|
|
+ ...dataForm.value,
|
|
|
+ assessData: JSON.stringify(assessData),
|
|
|
+ assessor: form.assessor,
|
|
|
+ assessDate: form.assessDate ? dayjs(form.assessDate).format('YYYY-MM-DD') : ''
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dataForm.value.id) {
|
|
|
+ const res = await buildingCleaningUpdate(tempParams)
|
|
|
+ if (res) {
|
|
|
+ message.success(t('common.updateSuccess'))
|
|
|
+ dialogVisible.value = false
|
|
|
+ // 发送操作成功的事件
|
|
|
+ emit('success')
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ const res = await buildingCleaningCreate(tempParams)
|
|
|
+ if (res) {
|
|
|
+ message.success(t('common.createSuccess'))
|
|
|
+ dialogVisible.value = false
|
|
|
+ // 发送操作成功的事件
|
|
|
+ emit('success')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ setTimeout(() => {
|
|
|
+ formLoading.value = false
|
|
|
+ }, 500)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+/** 重置表单 */
|
|
|
+const resetForm = () => {
|
|
|
+ dataForm.value = {
|
|
|
+ id: undefined,
|
|
|
+ idCard: '',
|
|
|
+ buildId: '',
|
|
|
+ floorId: '',
|
|
|
+ floorName: '',
|
|
|
+ contractNumber: '', //档案号
|
|
|
+ elderName: '',//长者姓名
|
|
|
+ bedName: '', //床位号
|
|
|
+ elderAge: '', //年龄
|
|
|
+ elderSex: '', //性别
|
|
|
+ checkInTime: '', //入院日期
|
|
|
+ elderId: '',
|
|
|
+ tenantId: undefined
|
|
|
+ }
|
|
|
+ formRef.value?.resetFields()
|
|
|
+
|
|
|
+ // 重置感知觉与沟通评估表表单
|
|
|
+ resetPerceptionForm()
|
|
|
+}
|
|
|
+
|
|
|
+// 关闭表单
|
|
|
+const handleClosed = () => {
|
|
|
+ dialogVisible.value = false
|
|
|
+ resetForm()
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+.mmse-form {
|
|
|
+ margin: 0 auto;
|
|
|
+ background: #fff;
|
|
|
+
|
|
|
+ .form-title {
|
|
|
+ text-align: center;
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: bold;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ .info-row {
|
|
|
+ display: flex;
|
|
|
+ gap: 40px;
|
|
|
+ width: 100%;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 10px;
|
|
|
+
|
|
|
+ .info-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+
|
|
|
+ .label {
|
|
|
+ width: 82px;
|
|
|
+ text-align: right;
|
|
|
+ margin-right: 4px;
|
|
|
+ white-space: nowrap;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ .form-body {
|
|
|
+ border: 1px solid #333;
|
|
|
+ padding: 15px;
|
|
|
+
|
|
|
+ .building-cleaning-table-wrapper {
|
|
|
+ overflow-x: auto;
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ .building-cleaning-table {
|
|
|
+ min-width: 2400px;
|
|
|
+ border-collapse: collapse;
|
|
|
+ border: 1px solid #333;
|
|
|
+
|
|
|
+ th, td {
|
|
|
+ border: 1px solid #333;
|
|
|
+ padding: 2px;
|
|
|
+ text-align: center;
|
|
|
+ vertical-align: middle;
|
|
|
+ }
|
|
|
+
|
|
|
+ th {
|
|
|
+ background: #f5f7fa;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 11px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-area-header {
|
|
|
+ width: 80px;
|
|
|
+ min-width: 80px;
|
|
|
+ background: #e8f4f8;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-day-header {
|
|
|
+ width: 75px;
|
|
|
+ min-width: 75px;
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-time {
|
|
|
+ width: 55px;
|
|
|
+ min-width: 55px;
|
|
|
+ font-size: 12px;
|
|
|
+ background: #fffbe6;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-day-header {
|
|
|
+ width: 165px;
|
|
|
+ min-width: 165px;
|
|
|
+ font-size: 13px;
|
|
|
+ background: #f5f7fa;
|
|
|
+ }
|
|
|
+
|
|
|
+ .area-name {
|
|
|
+ font-weight: bold;
|
|
|
+ background: #f5f7fa;
|
|
|
+ font-size: 11px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .item-name {
|
|
|
+ width: 60px;
|
|
|
+ min-width: 60px;
|
|
|
+ font-size: 11px;
|
|
|
+ background: #fafafa;
|
|
|
+ }
|
|
|
+
|
|
|
+ tbody {
|
|
|
+ tr {
|
|
|
+ height: 32px;
|
|
|
+ }
|
|
|
+
|
|
|
+ td {
|
|
|
+ .native-select {
|
|
|
+ width: 100%;
|
|
|
+ height: 26px;
|
|
|
+ padding: 0 16px 0 2px;
|
|
|
+ font-size: 11px;
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
+ border-radius: 3px;
|
|
|
+ background-color: #fff;
|
|
|
+ text-align: center;
|
|
|
+ cursor: pointer;
|
|
|
+ appearance: none;
|
|
|
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-position: right 2px center;
|
|
|
+ background-size: 12px;
|
|
|
+
|
|
|
+ &:focus {
|
|
|
+ border-color: #409eff;
|
|
|
+ outline: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ option {
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .check-value {
|
|
|
+ font-size: 11px;
|
|
|
+ display: inline-block;
|
|
|
+ min-width: 24px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .dangerous-goods-table {
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ .goods-table {
|
|
|
+ width: 100%;
|
|
|
+ border-collapse: collapse;
|
|
|
+ border: 1px solid #333;
|
|
|
+
|
|
|
+ th, td {
|
|
|
+ border: 1px solid #333;
|
|
|
+ padding: 10px 8px;
|
|
|
+ text-align: center;
|
|
|
+ vertical-align: middle;
|
|
|
+ }
|
|
|
+
|
|
|
+ th {
|
|
|
+ background: #f5f7fa;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-no {
|
|
|
+ width: 50px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-bed {
|
|
|
+ width: 80px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-name {
|
|
|
+ width: 80px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-goods-title {
|
|
|
+ background: #f5f7fa;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-goods {
|
|
|
+ width: 100px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-storage {
|
|
|
+ width: 120px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-sign {
|
|
|
+ width: 120px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .col-remark {
|
|
|
+ width: 150px;
|
|
|
+ }
|
|
|
+
|
|
|
+ tbody {
|
|
|
+ td {
|
|
|
+ .el-input {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-textarea {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .section {
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ &:last-child {
|
|
|
+ margin-bottom: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .section-title {
|
|
|
+ font-weight: bold;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .form-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 12px;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 8px;
|
|
|
+
|
|
|
+ .item-number {
|
|
|
+ font-weight: bold;
|
|
|
+ min-width: 25px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .item-label {
|
|
|
+ white-space: nowrap;
|
|
|
+ min-width: fit-content;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .other-input {
|
|
|
+ width: 200px;
|
|
|
+ margin-left: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 调整 Element Plus 组件样式
|
|
|
+ :deep(.el-input__inner) {
|
|
|
+ height: 28px;
|
|
|
+ line-height: 28px;
|
|
|
+ border-top: none;
|
|
|
+ border-left: none;
|
|
|
+ border-right: none;
|
|
|
+ border-radius: 0;
|
|
|
+ padding: 0 4px;
|
|
|
+
|
|
|
+ &:focus {
|
|
|
+ border-color: #409eff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ :deep(.el-checkbox__label),
|
|
|
+ :deep(.el-radio__label) {
|
|
|
+ padding-left: 4px;
|
|
|
+ }
|
|
|
+}
|
|
|
+.row{
|
|
|
+ margin-bottom: 12px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+ text{
|
|
|
+ text-align: right;
|
|
|
+ margin-right: 4px;
|
|
|
+ width: 82px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 感知觉与沟通评估表 特有样式
|
|
|
+.total-score-section {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 15px;
|
|
|
+ background: #f5f7fa;
|
|
|
+ border-radius: 4px;
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ .total-score {
|
|
|
+ display: flex;
|
|
|
+ align-items: baseline;
|
|
|
+ gap: 4px;
|
|
|
+
|
|
|
+ .score-label {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+
|
|
|
+ .score-value {
|
|
|
+ font-size: 28px;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #409eff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .score-max {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #909399;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .risk-level {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: bold;
|
|
|
+ padding: 8px 16px;
|
|
|
+ border-radius: 4px;
|
|
|
+
|
|
|
+ &.risk-none {
|
|
|
+ color: #67c23a;
|
|
|
+ background: #f0f9eb;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.risk-low {
|
|
|
+ color: #e6a23c;
|
|
|
+ background: #fdf6ec;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.risk-medium {
|
|
|
+ color: #f56c6c;
|
|
|
+ background: #fef0f0;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.risk-high {
|
|
|
+ color: #f56c6c;
|
|
|
+ background: #fef0f0;
|
|
|
+ border: 1px solid #f56c6c;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.assessment-table {
|
|
|
+ width: 100%;
|
|
|
+ border-collapse: collapse;
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ table {
|
|
|
+ width: 100%;
|
|
|
+ border: 1px solid #333;
|
|
|
+
|
|
|
+ th, td {
|
|
|
+ border: 1px solid #333;
|
|
|
+ padding: 12px;
|
|
|
+ text-align: left;
|
|
|
+ }
|
|
|
+
|
|
|
+ th {
|
|
|
+ background: #f5f7fa;
|
|
|
+ font-weight: bold;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .criteria-col {
|
|
|
+ width: 60%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .score-col {
|
|
|
+ width: 15%;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .select-col {
|
|
|
+ width: 25%;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .criteria {
|
|
|
+ text-align: left;
|
|
|
+ }
|
|
|
+
|
|
|
+ .score {
|
|
|
+ text-align: center;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+
|
|
|
+ .select {
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+ :deep(.el-radio) {
|
|
|
+ margin-right: 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.remark-section {
|
|
|
+ margin: 15px 0;
|
|
|
+ padding: 12px;
|
|
|
+ background: #f5f7fa;
|
|
|
+ border-radius: 4px;
|
|
|
+ border: 1px solid #e4e7ed;
|
|
|
+
|
|
|
+ .remark-label {
|
|
|
+ font-weight: bold;
|
|
|
+ color: #606266;
|
|
|
+ }
|
|
|
+
|
|
|
+ .remark-text {
|
|
|
+ color: #606266;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.risk-judgment-section {
|
|
|
+ margin: 20px 0;
|
|
|
+ padding: 15px;
|
|
|
+ background: #f5f7fa;
|
|
|
+ border-radius: 4px;
|
|
|
+ border: 1px solid #e4e7ed;
|
|
|
+
|
|
|
+ .risk-judgment-title {
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 16px;
|
|
|
+ margin-bottom: 12px;
|
|
|
+ color: #303133;
|
|
|
+ }
|
|
|
+
|
|
|
+ .risk-options {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 20px;
|
|
|
+
|
|
|
+ :deep(.el-radio) {
|
|
|
+ margin-right: 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.preventive-section {
|
|
|
+ margin: 20px 0;
|
|
|
+ padding: 15px;
|
|
|
+ background: #f5f7fa;
|
|
|
+ border-radius: 4px;
|
|
|
+ border: 1px solid #e4e7ed;
|
|
|
+
|
|
|
+ .preventive-title {
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 16px;
|
|
|
+ margin-bottom: 12px;
|
|
|
+ color: #303133;
|
|
|
+ }
|
|
|
+
|
|
|
+ .preventive-options {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 15px;
|
|
|
+
|
|
|
+ :deep(.el-checkbox) {
|
|
|
+ margin-right: 20px;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .other-input {
|
|
|
+ width: 200px;
|
|
|
+ margin-left: 10px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.signature-section {
|
|
|
+ margin: 20px 0;
|
|
|
+ padding: 15px;
|
|
|
+ background: #f5f7fa;
|
|
|
+ border-radius: 4px;
|
|
|
+ border: 1px solid #e4e7ed;
|
|
|
+
|
|
|
+ .signature-row {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ gap: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .signature-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 10px;
|
|
|
+
|
|
|
+ &.date-item {
|
|
|
+ :deep(.el-date-picker) {
|
|
|
+ width: 150px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .signature-label {
|
|
|
+ font-weight: bold;
|
|
|
+ white-space: nowrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .signature-input {
|
|
|
+ width: 150px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .date-picker {
|
|
|
+ width: 150px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.note-section {
|
|
|
+ margin-top: 20px;
|
|
|
+ padding: 15px;
|
|
|
+ background: #f5f7fa;
|
|
|
+ border-radius: 4px;
|
|
|
+ border: 1px solid #e4e7ed;
|
|
|
+
|
|
|
+ .note-title {
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 16px;
|
|
|
+ margin-bottom: 12px;
|
|
|
+ color: #303133;
|
|
|
+ }
|
|
|
+
|
|
|
+ .note-content {
|
|
|
+ font-size: 13px;
|
|
|
+ line-height: 1.8;
|
|
|
+ color: #606266;
|
|
|
+
|
|
|
+ p {
|
|
|
+ margin: 5px 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .indent {
|
|
|
+ margin-left: 20px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|