|
|
@@ -18,14 +18,23 @@
|
|
|
<view class="student-no">{{ bed.studentNo }}</view>
|
|
|
</view>
|
|
|
<view v-else class="empty-bed">空床位</view>
|
|
|
- <view v-if="bed.isLeaveAuto" class="leave-tag">
|
|
|
- <u-tag text="请假" type="warning" size="mini"></u-tag>
|
|
|
+ <view v-if="bed.isLeaveAuto || bed.isHolidayStayAuto" class="leave-tag">
|
|
|
+ <!-- 只展示状态名,不展示请假类型(如「其他假」) -->
|
|
|
+ <u-tag v-if="bed.isLeaveAuto" text="请假" type="warning" size="mini"></u-tag>
|
|
|
+ <u-tag
|
|
|
+ v-if="bed.isHolidayStayAuto"
|
|
|
+ text="假期留宿"
|
|
|
+ type="primary"
|
|
|
+ size="mini"
|
|
|
+ :custom-style="{ marginLeft: bed.isLeaveAuto ? '8rpx' : '0' }"
|
|
|
+ ></u-tag>
|
|
|
</view>
|
|
|
- <view v-else-if="bed.isHolidayStayAuto" class="leave-tag">
|
|
|
- <u-tag text="假期留宿" type="primary" size="mini"></u-tag>
|
|
|
- </view>
|
|
|
- <view class="status-label" :class="getStatusColorClass(bed.rollCallStatus)">
|
|
|
- {{ getStatusLabel(bed.rollCallStatus) }}
|
|
|
+ <view
|
|
|
+ v-if="!bed.isLeaveAuto && !bed.isHolidayStayAuto"
|
|
|
+ class="status-label"
|
|
|
+ :class="getStatusColorClass(bed)"
|
|
|
+ >
|
|
|
+ {{ getStatusLabel(bed) }}
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
@@ -112,11 +121,21 @@ export default {
|
|
|
let present = 0, leave = 0, holidayStay = 0, absent = 0, empty = 0;
|
|
|
this.bedDetails.forEach((bed) => {
|
|
|
const status = bed.rollCallStatus;
|
|
|
- if (status === '0') present++;
|
|
|
- else if (status === '1') leave++;
|
|
|
- else if (status === '4') holidayStay++;
|
|
|
- else if (status === '2') absent++;
|
|
|
- else if (status === '3') empty++;
|
|
|
+ if (status === '3') {
|
|
|
+ empty++;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (status === '2') {
|
|
|
+ absent++;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (status === '0') {
|
|
|
+ present++;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 请假/留宿可同时计入(同一人可同时出现在两类统计)
|
|
|
+ if (bed.isLeaveAuto || status === '1') leave++;
|
|
|
+ if (bed.isHolidayStayAuto || status === '4') holidayStay++;
|
|
|
});
|
|
|
return { present, leave, holidayStay, absent, empty };
|
|
|
},
|
|
|
@@ -215,21 +234,27 @@ export default {
|
|
|
|
|
|
if (!bed.studentId) {
|
|
|
bed.rollCallStatus = '3';
|
|
|
- } else if (item.leaveInfo) {
|
|
|
- // 请假优先
|
|
|
- bed.rollCallStatus = '1';
|
|
|
- bed.isLeaveAuto = true;
|
|
|
- bed.leaveId = item.leaveInfo.leaveId;
|
|
|
- bed.leaveTypeName = item.leaveInfo.leaveTypeName;
|
|
|
- bed.leaveStartTime = item.leaveInfo.leaveStartTime;
|
|
|
- bed.leaveEndTime = item.leaveInfo.leaveEndTime;
|
|
|
- } else if (item.holidayStayInfo) {
|
|
|
- bed.rollCallStatus = '4';
|
|
|
- bed.isHolidayStayAuto = true;
|
|
|
- bed.holidayStayId = item.holidayStayInfo.holidayStayId;
|
|
|
- bed.holidayType = item.holidayStayInfo.holidayType;
|
|
|
- bed.holidayStartDate = item.holidayStayInfo.applyStartDate;
|
|
|
- bed.holidayEndDate = item.holidayStayInfo.applyEndDate;
|
|
|
+ } else {
|
|
|
+ if (item.leaveInfo) {
|
|
|
+ bed.isLeaveAuto = true;
|
|
|
+ bed.leaveId = item.leaveInfo.leaveId;
|
|
|
+ bed.leaveTypeName = item.leaveInfo.leaveTypeName;
|
|
|
+ bed.leaveStartTime = item.leaveInfo.leaveStartTime;
|
|
|
+ bed.leaveEndTime = item.leaveInfo.leaveEndTime;
|
|
|
+ }
|
|
|
+ if (item.holidayStayInfo) {
|
|
|
+ bed.isHolidayStayAuto = true;
|
|
|
+ bed.holidayStayId = item.holidayStayInfo.holidayStayId;
|
|
|
+ bed.holidayType = item.holidayStayInfo.holidayType;
|
|
|
+ bed.holidayStartDate = item.holidayStayInfo.applyStartDate;
|
|
|
+ bed.holidayEndDate = item.holidayStayInfo.applyEndDate;
|
|
|
+ }
|
|
|
+ // 主状态:请假优先落库;仅留宿时为 4;两者都有时仍为 1,但双标签都展示
|
|
|
+ if (bed.isLeaveAuto) {
|
|
|
+ bed.rollCallStatus = '1';
|
|
|
+ } else if (bed.isHolidayStayAuto) {
|
|
|
+ bed.rollCallStatus = '4';
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return bed;
|
|
|
@@ -250,6 +275,7 @@ export default {
|
|
|
},
|
|
|
|
|
|
getBedCardClass(bed) {
|
|
|
+ if (bed.isLeaveAuto && bed.isHolidayStayAuto) return 'bed-leave bed-holiday-stay-both';
|
|
|
if (bed.rollCallStatus === '0') return 'bed-present';
|
|
|
if (bed.rollCallStatus === '1') return 'bed-leave';
|
|
|
if (bed.rollCallStatus === '4') return 'bed-holiday-stay';
|
|
|
@@ -258,7 +284,9 @@ export default {
|
|
|
return '';
|
|
|
},
|
|
|
|
|
|
- getStatusLabel(status) {
|
|
|
+ getStatusLabel(bed) {
|
|
|
+ if (bed && bed.isLeaveAuto && bed.isHolidayStayAuto) return '请假+假期留宿';
|
|
|
+ const status = typeof bed === 'string' ? bed : bed && bed.rollCallStatus;
|
|
|
if (status === '0') return '在寝';
|
|
|
if (status === '1') return '请假';
|
|
|
if (status === '4') return '假期留宿';
|
|
|
@@ -267,7 +295,9 @@ export default {
|
|
|
return '';
|
|
|
},
|
|
|
|
|
|
- getStatusColorClass(status) {
|
|
|
+ getStatusColorClass(bed) {
|
|
|
+ if (bed && bed.isLeaveAuto && bed.isHolidayStayAuto) return 'color-leave';
|
|
|
+ const status = typeof bed === 'string' ? bed : bed && bed.rollCallStatus;
|
|
|
if (status === '0') return 'color-present';
|
|
|
if (status === '1') return 'color-leave';
|
|
|
if (status === '4') return 'color-holiday-stay';
|
|
|
@@ -277,12 +307,14 @@ export default {
|
|
|
},
|
|
|
|
|
|
handleBedClick(bed) {
|
|
|
- if (bed.isLeaveAuto) {
|
|
|
- uni.showToast({ title: '该学生处于请假状态,不可修改', icon: 'none' });
|
|
|
- return;
|
|
|
- }
|
|
|
- if (bed.isHolidayStayAuto) {
|
|
|
- uni.showToast({ title: '该学生处于假期留宿状态,不可修改', icon: 'none' });
|
|
|
+ if (bed.isLeaveAuto || bed.isHolidayStayAuto) {
|
|
|
+ const tip =
|
|
|
+ bed.isLeaveAuto && bed.isHolidayStayAuto
|
|
|
+ ? '该学生同时处于请假与假期留宿,不可修改'
|
|
|
+ : bed.isLeaveAuto
|
|
|
+ ? '该学生处于请假状态,不可修改'
|
|
|
+ : '该学生处于假期留宿状态,不可修改';
|
|
|
+ uni.showToast({ title: tip, icon: 'none' });
|
|
|
return;
|
|
|
}
|
|
|
if (!bed.studentId) {
|