|
|
@@ -1,14 +1,47 @@
|
|
|
<template>
|
|
|
- <div :class="roleIdStr==14 || roleIdStr==21|| roleIdStr==11?'mt':''">
|
|
|
- <div class="list" v-for="item in historyList" :key="item.id" @click="$router.push({path:'/followUp/details',query:{id:item.id}})">
|
|
|
+ <div :class="roleIdStr == 14 || roleIdStr == 21 || roleIdStr == 11 ? 'mt' : ''">
|
|
|
+ <div
|
|
|
+ class="list"
|
|
|
+ v-for="item in historyList"
|
|
|
+ :key="item.id"
|
|
|
+ @click="$router.push({ path: '/followUp/details', query: { id: item.id } })"
|
|
|
+ >
|
|
|
+ <!-- 头像区域 -->
|
|
|
<div class="img">
|
|
|
- <img class="tx" :src="item.url?item.url:require('../../assets/tx.png')" alt="">
|
|
|
- <img v-if="item.followNum == 0" class="warning" src="../../assets/warning.png" alt="">
|
|
|
+ <img
|
|
|
+ class="tx"
|
|
|
+ :src="item.url ? getpics(item.url) : require('../../assets/tx.png')"
|
|
|
+ alt="头像"
|
|
|
+ />
|
|
|
+ <img
|
|
|
+ v-if="item.followNum == 0"
|
|
|
+ class="warning"
|
|
|
+ src="../../assets/warning.png"
|
|
|
+ alt="警告"
|
|
|
+ />
|
|
|
</div>
|
|
|
+
|
|
|
+ <!-- 信息区域 -->
|
|
|
<div class="text">
|
|
|
- <p class="title">{{item.name}}-{{item.sex}}-{{item.age}}<span class="mes">{{item.childTypeName}}</span></p>
|
|
|
- <p class="num">随访时间:{{item.followDate}}</p>
|
|
|
- <p class="num adress">居住地址:{{item.address}}</p>
|
|
|
+ <!-- 标题+预警级别容器 -->
|
|
|
+ <div class="title-wrapper">
|
|
|
+ <p class="title">
|
|
|
+ {{ item.name }}-{{ item.sex }}-{{ item.age }}
|
|
|
+ <span class="mes">{{ item.childTypeName }}</span>
|
|
|
+ </p>
|
|
|
+
|
|
|
+ <!-- 预警级别标签 -->
|
|
|
+ <div
|
|
|
+ v-if="item.warningLevel > 0"
|
|
|
+ class="warning-level"
|
|
|
+ :class="getWarningClass(item.warningLevel)"
|
|
|
+ >
|
|
|
+ {{ getWarningText(item.warningLevel) }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <p class="num">随访时间:{{ item.followDate }}</p>
|
|
|
+ <p class="num adress">居住地址:{{ item.address }}</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -16,89 +49,246 @@
|
|
|
|
|
|
<script>
|
|
|
export default {
|
|
|
- props: ['historyList'],
|
|
|
+ name: "HistoryList",
|
|
|
+ props: {
|
|
|
+ historyList: {
|
|
|
+ type: Array,
|
|
|
+ default: () => [],
|
|
|
+ },
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
- bgimg: require('../../assets/newsbg.png'),
|
|
|
- roleIdStr: JSON.parse(sessionStorage.getItem('userInfo')).roleIdStr,
|
|
|
- }
|
|
|
+ bgimg: require("../../assets/newsbg.png"),
|
|
|
+ roleIdStr: JSON.parse(sessionStorage.getItem("userInfo") || "{}")?.roleIdStr || "",
|
|
|
+ };
|
|
|
},
|
|
|
methods: {
|
|
|
getpics(item) {
|
|
|
- if (!item) return this.bgimg
|
|
|
- var url = ''
|
|
|
- var arr = item.split(',')
|
|
|
- arr.forEach((item) => {
|
|
|
- if (item.indexOf('.jpg') || item.indexOf('.png')) {
|
|
|
- url = arr[0].replace('/cgpimage/', '/cgpimage/240x240/')
|
|
|
- return
|
|
|
+ if (!item) return this.bgimg;
|
|
|
+ let url = "";
|
|
|
+ const arr = item.split(",");
|
|
|
+ // 修复逻辑:indexOf返回-1表示不存在,需要取反
|
|
|
+ arr.some((imgItem) => {
|
|
|
+ if (imgItem.indexOf(".jpg") !== -1 || imgItem.indexOf(".png") !== -1) {
|
|
|
+ url = imgItem.replace("/cgpimage/", "/cgpimage/240x240/");
|
|
|
+ return true; // 终止遍历
|
|
|
}
|
|
|
- })
|
|
|
- return url
|
|
|
+ return false;
|
|
|
+ });
|
|
|
+ return url || this.bgimg; // 兜底
|
|
|
+ },
|
|
|
+ // 获取预警级别文本(兼容数字/字符串类型)
|
|
|
+ getWarningText(level) {
|
|
|
+ const levelNum = Number(level);
|
|
|
+ const levelMap = {
|
|
|
+ 1: "蓝色预警",
|
|
|
+ 2: "黄色预警",
|
|
|
+ 3: "橙色预警",
|
|
|
+ 4: "红色预警",
|
|
|
+ };
|
|
|
+ return levelMap[levelNum] || "";
|
|
|
+ },
|
|
|
+ // 获取预警级别样式类
|
|
|
+ getWarningClass(level) {
|
|
|
+ const levelNum = Number(level);
|
|
|
+ if ([1, 2, 3, 4].includes(levelNum)) {
|
|
|
+ return `level-${levelNum}`;
|
|
|
+ }
|
|
|
+ return "level-default";
|
|
|
},
|
|
|
},
|
|
|
-}
|
|
|
+};
|
|
|
</script>
|
|
|
+
|
|
|
<style lang="scss" scoped>
|
|
|
+// 基础样式
|
|
|
.mt {
|
|
|
margin-top: 100px;
|
|
|
}
|
|
|
+
|
|
|
+// 列表项样式(卡片化优化)
|
|
|
.list {
|
|
|
display: flex;
|
|
|
- align-items: center;
|
|
|
- margin-bottom: 26px;
|
|
|
+ align-items: flex-start;
|
|
|
+ margin: 0 16px 20px;
|
|
|
+ padding: 24px;
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 16px;
|
|
|
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
|
|
|
+ transition: box-shadow 0.2s ease;
|
|
|
+ cursor: pointer; // 点击态提示
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 头像区域优化
|
|
|
.img {
|
|
|
+ position: relative;
|
|
|
.tx {
|
|
|
- width: 100px;
|
|
|
- height: 100px;
|
|
|
+ width: 96px;
|
|
|
+ height: 96px;
|
|
|
border-radius: 50%;
|
|
|
+ object-fit: cover;
|
|
|
+ border: 3px solid #f8f9fa;
|
|
|
+ }
|
|
|
+ .warning {
|
|
|
+ width: 28px;
|
|
|
+ height: 28px;
|
|
|
+ position: absolute;
|
|
|
+ top: -8px;
|
|
|
+ right: -8px;
|
|
|
+ animation: pulse 1.5s ease infinite alternate;
|
|
|
+ }
|
|
|
+ @keyframes pulse {
|
|
|
+ 0% {
|
|
|
+ opacity: 0.7;
|
|
|
+ transform: scale(0.95);
|
|
|
+ }
|
|
|
+ 100% {
|
|
|
+ opacity: 1;
|
|
|
+ transform: scale(1.05);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // 文本信息区域
|
|
|
.text {
|
|
|
text-align: left;
|
|
|
- margin-left: 26px;
|
|
|
- width: calc(100% - 116px);
|
|
|
- .title {
|
|
|
- overflow: hidden;
|
|
|
- white-space: nowrap;
|
|
|
- text-overflow: ellipsis;
|
|
|
- font-size: 30px;
|
|
|
- }
|
|
|
- .adress {
|
|
|
+ margin-left: 24px;
|
|
|
+ width: calc(100% - 120px);
|
|
|
+
|
|
|
+ // 标题+预警级别容器
|
|
|
+ .title-wrapper {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 16px;
|
|
|
width: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 标题样式优化
|
|
|
+ .title {
|
|
|
overflow: hidden;
|
|
|
white-space: nowrap;
|
|
|
text-overflow: ellipsis;
|
|
|
- display: block !important;
|
|
|
+ font-size: 32px;
|
|
|
+ margin: 0;
|
|
|
+ color: #1d2129;
|
|
|
+ font-weight: 500;
|
|
|
+ max-width: calc(100% - 120px);
|
|
|
+ line-height: 1.4;
|
|
|
}
|
|
|
+
|
|
|
.mes {
|
|
|
font-size: 26px;
|
|
|
- margin-left: 10px;
|
|
|
+ margin-left: 12px;
|
|
|
+ color: #666c78;
|
|
|
+ font-weight: 400;
|
|
|
+ background-color: #f2f3f5;
|
|
|
+ padding: 2px 8px;
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 预警级别标签样式
|
|
|
+ .warning-level {
|
|
|
+ padding: 6px 16px;
|
|
|
+ border-radius: 24px;
|
|
|
+ font-size: 22px;
|
|
|
+ color: #fff;
|
|
|
+ font-weight: 500;
|
|
|
+ display: inline-block;
|
|
|
+ min-width: 90px;
|
|
|
+ text-align: center;
|
|
|
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 各级别颜色
|
|
|
+ .level-1 {
|
|
|
+ background-color: #1890ff;
|
|
|
+ }
|
|
|
+ .level-2 {
|
|
|
+ background-color: #faad14;
|
|
|
+ color: #1d2129 !important;
|
|
|
+ }
|
|
|
+ .level-3 {
|
|
|
+ background-color: #fa8c16;
|
|
|
+ }
|
|
|
+ .level-4 {
|
|
|
+ background-color: #f5222d;
|
|
|
}
|
|
|
+ .level-default {
|
|
|
+ background-color: #8c8c8c;
|
|
|
+ }
|
|
|
+
|
|
|
.zero {
|
|
|
- color: #ff3b30;
|
|
|
+ color: #f5222d;
|
|
|
+ font-weight: 600;
|
|
|
+ font-size: 26px;
|
|
|
}
|
|
|
+
|
|
|
.num {
|
|
|
- font-size: 24px;
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- align-items: center;
|
|
|
- .van-button {
|
|
|
- border-radius: 8px;
|
|
|
+ font-size: 25px;
|
|
|
+ color: #4e5969;
|
|
|
+ margin-bottom: 12px !important;
|
|
|
+
|
|
|
+ &.adress {
|
|
|
+ // 最多显示2行
|
|
|
+ display: -webkit-box !important;
|
|
|
+ -webkit-line-clamp: 2;
|
|
|
+ -webkit-box-orient: vertical;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ line-height: 1.4;
|
|
|
+ min-height: 67px; /* 24px字体 * 1.4行高 * 2行 ≈ 67px */
|
|
|
}
|
|
|
}
|
|
|
|
|
|
p {
|
|
|
margin: 0;
|
|
|
- margin-bottom: 16px;
|
|
|
font-size: 26px;
|
|
|
+ color: #4e5969;
|
|
|
}
|
|
|
}
|
|
|
- .van-button {
|
|
|
- width: 160px;
|
|
|
- background-color: #1677ff;
|
|
|
- color: #fff;
|
|
|
- font-size: 24px;
|
|
|
+}
|
|
|
+
|
|
|
+// 移动端适配
|
|
|
+@media (max-width: 750px) {
|
|
|
+ .list {
|
|
|
+ padding: 20px 16px;
|
|
|
+ margin: 0 12px 16px;
|
|
|
+
|
|
|
+ .img .tx {
|
|
|
+ width: 88px;
|
|
|
+ height: 88px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .text {
|
|
|
+ margin-left: 20px;
|
|
|
+ width: calc(100% - 108px);
|
|
|
+
|
|
|
+ .title {
|
|
|
+ font-size: 29px;
|
|
|
+ max-width: calc(100% - 100px);
|
|
|
+ }
|
|
|
+
|
|
|
+ .mes {
|
|
|
+ font-size: 24px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .warning-level {
|
|
|
+ font-size: 20px;
|
|
|
+ padding: 4px 12px;
|
|
|
+ min-width: 80px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .num {
|
|
|
+ font-size: 24px;
|
|
|
+ &.adress {
|
|
|
+ min-height: 62px; /* 22px字体 * 1.4行高 * 2行 ≈ 62px */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</style>
|