需求开发
This commit is contained in:
@@ -329,6 +329,7 @@ export default {
|
|||||||
// })
|
// })
|
||||||
},
|
},
|
||||||
popupSearch(data) {
|
popupSearch(data) {
|
||||||
|
console.log(data[0].data[1]);
|
||||||
// 获取此次提交前,旧的政策类型值
|
// 获取此次提交前,旧的政策类型值
|
||||||
const oldTypeL = this.queryParams.policyTypeL || "";
|
const oldTypeL = this.queryParams.policyTypeL || "";
|
||||||
|
|
||||||
@@ -339,6 +340,15 @@ export default {
|
|||||||
selections[item.type] = active.dictLabel === "全部" ? "" : active.dictValue;
|
selections[item.type] = active.dictLabel === "全部" ? "" : active.dictValue;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 政策类型选中 '0' 时传 tag 并清空 policyTypeL
|
||||||
|
if (selections.policyTypeL === '0') {
|
||||||
|
const tag = uni.getStorageSync('userInfo')?.userTagName || {};
|
||||||
|
this.queryParams.tag = tag
|
||||||
|
selections.policyTypeL = ""
|
||||||
|
} else {
|
||||||
|
delete this.queryParams.tag
|
||||||
|
}
|
||||||
|
|
||||||
// 核心判定逻辑:
|
// 核心判定逻辑:
|
||||||
// 如果发现“政策类型(policyTypeL)”发生了变化
|
// 如果发现“政策类型(policyTypeL)”发生了变化
|
||||||
if (selections.policyTypeL !== oldTypeL) {
|
if (selections.policyTypeL !== oldTypeL) {
|
||||||
|
|||||||
@@ -27,6 +27,12 @@
|
|||||||
"navigationBarTitleText": "消息"
|
"navigationBarTitleText": "消息"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/msglog/messageDetail",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "消息详情"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/careerfair/careerfair",
|
"path": "pages/careerfair/careerfair",
|
||||||
"style": {
|
"style": {
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
<view class="row-left">
|
<view class="row-left">
|
||||||
<image class="left-img" src="@/static/tabbar/chat4.png"></image>
|
<image class="left-img" src="@/static/tabbar/chat4.png"></image>
|
||||||
<text class="left-text">消息</text>
|
<text class="left-text">消息</text>
|
||||||
|
<text v-if="unreadNoticeCount > 0" class="unread-badge">{{ unreadNoticeCount > 99 ? '99+' : unreadNoticeCount }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="row-right">
|
<view class="row-right">
|
||||||
<uni-icons color="#909090" type="right" size="14"></uni-icons>
|
<uni-icons color="#909090" type="right" size="14"></uni-icons>
|
||||||
@@ -192,6 +193,9 @@ const feedbackPopup = ref(null);
|
|||||||
const { userInfo, Completion } = storeToRefs(useUserStore());
|
const { userInfo, Completion } = storeToRefs(useUserStore());
|
||||||
const counts = ref({});
|
const counts = ref({});
|
||||||
|
|
||||||
|
// 计算未读消息数量
|
||||||
|
const unreadNoticeCount = computed(() => counts.value.unreadNoticeCount || 0);
|
||||||
|
|
||||||
// 提醒设置
|
// 提醒设置
|
||||||
const reminderEnabled = ref(true);
|
const reminderEnabled = ref(true);
|
||||||
const reminderFrequency = ref('realtime');
|
const reminderFrequency = ref('realtime');
|
||||||
@@ -442,6 +446,23 @@ function submitFeedback() {
|
|||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
}
|
}
|
||||||
|
.unread-badge{
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 32rpx;
|
||||||
|
height: 32rpx;
|
||||||
|
padding: 0 10rpx;
|
||||||
|
margin-left: 12rpx;
|
||||||
|
background: linear-gradient(135deg, #FF4757, #FF6B81);
|
||||||
|
border-radius: 16rpx;
|
||||||
|
font-size: 20rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #FFFFFF;
|
||||||
|
line-height: 32rpx;
|
||||||
|
text-align: center;
|
||||||
|
box-shadow: 0 2rpx 8rpx rgba(255, 71, 87, 0.4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.row-right{
|
.row-right{
|
||||||
color: #6E6E6E;
|
color: #6E6E6E;
|
||||||
|
|||||||
343
pages/msglog/messageDetail.vue
Normal file
343
pages/msglog/messageDetail.vue
Normal file
@@ -0,0 +1,343 @@
|
|||||||
|
<template>
|
||||||
|
<AppLayout>
|
||||||
|
<view class="detail-content">
|
||||||
|
|
||||||
|
<scroll-view scroll-y class="detail-scroll">
|
||||||
|
<view class="scroll-body" v-if="message">
|
||||||
|
<view class="msg-card" :class="{ unread: message.isRead === '0' }">
|
||||||
|
<view class="card-row">
|
||||||
|
<view class="card-icon">
|
||||||
|
<image class="card-icon-img" v-if="message.title === '招聘会预约提醒'" src="/static/icon/msgtype.png"></image>
|
||||||
|
<image class="card-icon-img" v-else-if="message.title === '职位上新'" src="/static/icon/msgtype2.png"></image>
|
||||||
|
<image class="card-icon-img" v-else-if="message.title === '系统通知'" src="/static/icon/msgtype3.png"></image>
|
||||||
|
<image class="card-icon-img card-icon-default" v-else src="/static/icon/bell.png"></image>
|
||||||
|
</view>
|
||||||
|
<view class="card-info">
|
||||||
|
<view class="info-title-row">
|
||||||
|
<view class="unread-dot" v-if="message.isRead === '0'"></view>
|
||||||
|
<text class="info-title" :class="{ 'title-bold': message.isRead === '0' }">{{ message.title }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="info-meta">
|
||||||
|
<text class="info-time">{{ message.createTime || message.date }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="card-divider"></view>
|
||||||
|
|
||||||
|
<view class="card-subtitle" v-if="message.subTitle">
|
||||||
|
<text class="subtitle-label">摘要</text>
|
||||||
|
<text class="subtitle-text">{{ message.subTitle }}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="card-content" v-if="message.noticeContent">
|
||||||
|
<text class="content-label">详情</text>
|
||||||
|
<text class="content-text">{{ message.noticeContent }}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="card-footer" v-if="message.noticeType === '4'">
|
||||||
|
<text class="footer-hint" @click="handleMsgClick">点击查看详情</text>
|
||||||
|
<uni-icons color="#909090" type="right" size="14"></uni-icons>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- <view class="info-card">
|
||||||
|
<view class="info-item">
|
||||||
|
<text class="info-item-label">消息类型</text>
|
||||||
|
<text class="info-item-value">{{ message.noticeType === '4' ? '职位相关' : message.title }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="info-item">
|
||||||
|
<text class="info-item-label">接收时间</text>
|
||||||
|
<text class="info-item-value">{{ message.createTime || message.date }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="info-item">
|
||||||
|
<text class="info-item-label">阅读状态</text>
|
||||||
|
<text class="info-item-value status-text" :class="{ unread: message.isRead === '0' }">{{ message.isRead === '0' ? '未读' : '已读' }}</text>
|
||||||
|
</view>
|
||||||
|
</view> -->
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="empty-state" v-else-if="!loading">
|
||||||
|
<image class="empty-icon" src="/static/icon/empty.png" mode="aspectFit"></image>
|
||||||
|
<text class="empty-text">消息不存在</text>
|
||||||
|
<text class="empty-desc">该消息可能已被删除</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="loading-state" v-if="loading">
|
||||||
|
<text class="loading-text">加载中...</text>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
</AppLayout>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { inject, ref } from 'vue';
|
||||||
|
import { onLoad } from '@dcloudio/uni-app';
|
||||||
|
const { $api, navTo } = inject('globalFunction');
|
||||||
|
import { useReadMsg } from '@/stores/useReadMsg';
|
||||||
|
|
||||||
|
const message = ref(null);
|
||||||
|
const loading = ref(false);
|
||||||
|
const hasMarkedRead = ref(false);
|
||||||
|
|
||||||
|
onLoad(() => {
|
||||||
|
const item = uni.getStorageSync('currentMessageDetail');
|
||||||
|
if (item) {
|
||||||
|
message.value = item;
|
||||||
|
if (item.isRead === '0') {
|
||||||
|
markAsRead(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loading.value = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
function goBack() {
|
||||||
|
uni.navigateBack();
|
||||||
|
}
|
||||||
|
|
||||||
|
function markAsRead(item) {
|
||||||
|
if (!item.noticeId || hasMarkedRead.value) return;
|
||||||
|
hasMarkedRead.value = true;
|
||||||
|
$api.createRequest('/app/notice/read/noticeRead', { id: item.noticeId }, 'POST').then(() => {
|
||||||
|
message.value.isRead = '1';
|
||||||
|
useReadMsg().fetchMessages();
|
||||||
|
}).catch(err => {
|
||||||
|
console.error('标记已读失败:', err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleMsgClick() {
|
||||||
|
const item = message.value;
|
||||||
|
if (!item) return;
|
||||||
|
|
||||||
|
if (item.noticeType === '4') {
|
||||||
|
if (item.bussinessIdEncrypt) {
|
||||||
|
navTo(`/packageA/pages/post/post?jobId=${encodeURIComponent(item.bussinessId)}&encryptJobId=${encodeURIComponent(item.bussinessIdEncrypt)}`);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// switch (item.title) {
|
||||||
|
// case '职位上新':
|
||||||
|
// navTo('/packageA/pages/newJobPosition/newJobPosition');
|
||||||
|
// break;
|
||||||
|
// case '招聘会预约提醒':
|
||||||
|
// navTo('/packageA/pages/reservation/reservation');
|
||||||
|
// break;
|
||||||
|
// case '系统通知':
|
||||||
|
// navTo('/packageA/pages/systemNotification/systemNotification');
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
.detail-content
|
||||||
|
height: 100vh
|
||||||
|
display: flex
|
||||||
|
flex-direction: column
|
||||||
|
background: #F5F6FA
|
||||||
|
|
||||||
|
.detail-header
|
||||||
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
justify-content: space-between
|
||||||
|
padding: 20rpx 28rpx
|
||||||
|
background: #FFFFFF
|
||||||
|
position: relative
|
||||||
|
.header-back
|
||||||
|
width: 60rpx
|
||||||
|
height: 60rpx
|
||||||
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
justify-content: center
|
||||||
|
.header-title
|
||||||
|
font-size: 36rpx
|
||||||
|
font-weight: 600
|
||||||
|
color: #1A1A1A
|
||||||
|
position: absolute
|
||||||
|
left: 50%
|
||||||
|
transform: translateX(-50%)
|
||||||
|
.header-right
|
||||||
|
width: 60rpx
|
||||||
|
|
||||||
|
.detail-scroll
|
||||||
|
flex: 1
|
||||||
|
overflow: hidden
|
||||||
|
|
||||||
|
.scroll-body
|
||||||
|
padding: 28rpx
|
||||||
|
padding-bottom: 40rpx
|
||||||
|
|
||||||
|
.msg-card
|
||||||
|
background: #FFFFFF
|
||||||
|
border-radius: 20rpx
|
||||||
|
padding: 32rpx
|
||||||
|
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.06)
|
||||||
|
transition: all 0.2s ease
|
||||||
|
&:active
|
||||||
|
transform: scale(0.99)
|
||||||
|
&.unread
|
||||||
|
border-left: 6rpx solid #FF4757
|
||||||
|
|
||||||
|
.card-row
|
||||||
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
.card-icon
|
||||||
|
width: 88rpx
|
||||||
|
height: 88rpx
|
||||||
|
border-radius: 50%
|
||||||
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
justify-content: center
|
||||||
|
margin-right: 24rpx
|
||||||
|
flex-shrink: 0
|
||||||
|
.card-icon-img
|
||||||
|
width: 100%
|
||||||
|
height: 100%
|
||||||
|
border-radius: 50%
|
||||||
|
.card-icon-default
|
||||||
|
width: 60%
|
||||||
|
height: 60%
|
||||||
|
.card-info
|
||||||
|
flex: 1
|
||||||
|
min-width: 0
|
||||||
|
.info-title-row
|
||||||
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
margin-bottom: 12rpx
|
||||||
|
.unread-dot
|
||||||
|
width: 14rpx
|
||||||
|
height: 14rpx
|
||||||
|
background: #FF4757
|
||||||
|
border-radius: 50%
|
||||||
|
margin-right: 10rpx
|
||||||
|
flex-shrink: 0
|
||||||
|
.info-title
|
||||||
|
font-size: 34rpx
|
||||||
|
color: #1A1A1A
|
||||||
|
font-weight: 500
|
||||||
|
line-height: 1.3
|
||||||
|
&.title-bold
|
||||||
|
font-weight: 700
|
||||||
|
.info-meta
|
||||||
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
.info-status
|
||||||
|
font-size: 24rpx
|
||||||
|
color: #FF4757
|
||||||
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
margin-right: 20rpx
|
||||||
|
&.read
|
||||||
|
color: #BBBBBB
|
||||||
|
.status-dot
|
||||||
|
width: 10rpx
|
||||||
|
height: 10rpx
|
||||||
|
background: #FF4757
|
||||||
|
border-radius: 50%
|
||||||
|
margin-right: 6rpx
|
||||||
|
.info-time
|
||||||
|
font-size: 24rpx
|
||||||
|
color: #AAAAAA
|
||||||
|
|
||||||
|
.card-divider
|
||||||
|
height: 1rpx
|
||||||
|
background: #F0F0F0
|
||||||
|
margin: 28rpx 0
|
||||||
|
|
||||||
|
.card-subtitle
|
||||||
|
margin-bottom: 24rpx
|
||||||
|
.subtitle-label
|
||||||
|
display: inline-block
|
||||||
|
font-size: 22rpx
|
||||||
|
color: #FFFFFF
|
||||||
|
background: #256BFA
|
||||||
|
border-radius: 6rpx
|
||||||
|
padding: 2rpx 12rpx
|
||||||
|
margin-bottom: 12rpx
|
||||||
|
.subtitle-text
|
||||||
|
display: block
|
||||||
|
font-size: 28rpx
|
||||||
|
color: #333333
|
||||||
|
line-height: 1.5
|
||||||
|
|
||||||
|
.card-content
|
||||||
|
.content-label
|
||||||
|
display: inline-block
|
||||||
|
font-size: 22rpx
|
||||||
|
color: #FFFFFF
|
||||||
|
background: #9E74FD
|
||||||
|
border-radius: 6rpx
|
||||||
|
padding: 2rpx 12rpx
|
||||||
|
margin-bottom: 12rpx
|
||||||
|
.content-text
|
||||||
|
display: block
|
||||||
|
font-size: 28rpx
|
||||||
|
color: #555555
|
||||||
|
line-height: 1.7
|
||||||
|
|
||||||
|
.card-footer
|
||||||
|
margin-top: 32rpx
|
||||||
|
padding-top: 24rpx
|
||||||
|
border-top: 1rpx dashed #E8E8E8
|
||||||
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
justify-content: center
|
||||||
|
.footer-hint
|
||||||
|
font-size: 26rpx
|
||||||
|
color: #256BFA
|
||||||
|
margin-right: 4rpx
|
||||||
|
|
||||||
|
.info-card
|
||||||
|
background: #FFFFFF
|
||||||
|
border-radius: 20rpx
|
||||||
|
padding: 24rpx 32rpx
|
||||||
|
margin-top: 24rpx
|
||||||
|
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.06)
|
||||||
|
.info-item
|
||||||
|
display: flex
|
||||||
|
justify-content: space-between
|
||||||
|
align-items: center
|
||||||
|
padding: 20rpx 0
|
||||||
|
border-bottom: 1rpx solid #F5F5F5
|
||||||
|
&:last-child
|
||||||
|
border-bottom: none
|
||||||
|
.info-item-label
|
||||||
|
font-size: 26rpx
|
||||||
|
color: #999999
|
||||||
|
.info-item-value
|
||||||
|
font-size: 26rpx
|
||||||
|
color: #333333
|
||||||
|
font-weight: 500
|
||||||
|
&.status-text.unread
|
||||||
|
color: #FF4757
|
||||||
|
|
||||||
|
.empty-state
|
||||||
|
display: flex
|
||||||
|
flex-direction: column
|
||||||
|
align-items: center
|
||||||
|
justify-content: center
|
||||||
|
padding: 200rpx 40rpx
|
||||||
|
.empty-icon
|
||||||
|
width: 200rpx
|
||||||
|
height: 200rpx
|
||||||
|
margin-bottom: 32rpx
|
||||||
|
opacity: 0.5
|
||||||
|
.empty-text
|
||||||
|
font-size: 30rpx
|
||||||
|
color: #999999
|
||||||
|
font-weight: 500
|
||||||
|
margin-bottom: 12rpx
|
||||||
|
.empty-desc
|
||||||
|
font-size: 26rpx
|
||||||
|
color: #CCCCCC
|
||||||
|
|
||||||
|
.loading-state
|
||||||
|
display: flex
|
||||||
|
justify-content: center
|
||||||
|
padding: 200rpx 0
|
||||||
|
.loading-text
|
||||||
|
font-size: 28rpx
|
||||||
|
color: #BBBBBB
|
||||||
|
</style>
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
<!-- 消息列表 -->
|
<!-- 消息列表 -->
|
||||||
<view
|
<view
|
||||||
class="list-card press-button"
|
class="list-card press-button"
|
||||||
|
:class="{ unread: item.isRead === '0' }"
|
||||||
v-for="(item, index) in msgList"
|
v-for="(item, index) in msgList"
|
||||||
:key="index"
|
:key="index"
|
||||||
@click="seeDetail(item, index)"
|
@click="seeDetail(item, index)"
|
||||||
@@ -16,21 +17,29 @@
|
|||||||
></image>
|
></image>
|
||||||
<image
|
<image
|
||||||
class="card-img-flame"
|
class="card-img-flame"
|
||||||
v-if="item.title === '职位上新'"
|
v-else-if="item.title === '职位上新'"
|
||||||
src="/static/icon/msgtype2.png"
|
src="/static/icon/msgtype2.png"
|
||||||
></image>
|
></image>
|
||||||
<image
|
<image
|
||||||
class="card-img-flame"
|
class="card-img-flame"
|
||||||
v-if="item.title === '系统通知'"
|
v-else-if="item.title === '系统通知'"
|
||||||
src="/static/icon/msgtype3.png"
|
src="/static/icon/msgtype3.png"
|
||||||
></image>
|
></image>
|
||||||
|
<image
|
||||||
|
class="card-img-flame card-img-default"
|
||||||
|
v-else
|
||||||
|
src="/static/icon/bell.png"
|
||||||
|
></image>
|
||||||
<view class="subscript" v-if="item.notReadCount || !item.isRead">
|
<view class="subscript" v-if="item.notReadCount || !item.isRead">
|
||||||
{{ item.notReadCount || '' }}
|
{{ item.notReadCount || '' }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="card-info">
|
<view class="card-info">
|
||||||
<view class="info-title">
|
<view class="info-title">
|
||||||
<text>{{ item.title }}</text>
|
<view class="title-left">
|
||||||
|
<view class="unread-dot" v-if="item.isRead === '0'"></view>
|
||||||
|
<text :class="{ 'unread-text': item.isRead === '0' }">{{ item.title }}</text>
|
||||||
|
</view>
|
||||||
<view class="card-time">{{ item.date }}</view>
|
<view class="card-time">{{ item.date }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="info-text line_2">{{ item.subTitle || '消息' }}</view>
|
<view class="info-text line_2">{{ item.subTitle || '消息' }}</view>
|
||||||
@@ -66,26 +75,8 @@ async function loadData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function seeDetail(item, index) {
|
function seeDetail(item, index) {
|
||||||
if (item.noticeType === '4') {
|
uni.setStorageSync('currentMessageDetail', item);
|
||||||
useReadMsg().markAsRead(item, index);
|
navTo('/pages/msglog/messageDetail');
|
||||||
if (item.bussinessId) {
|
|
||||||
navTo(`/packageA/pages/post/post?jobId=${encodeURIComponent(item.bussinessId)}&encryptJobId=${encodeURIComponent(item.bussinessId)}`);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (item.title) {
|
|
||||||
case '职位上新':
|
|
||||||
useReadMsg().markAsRead(item, index);
|
|
||||||
navTo('/packageA/pages/newJobPosition/newJobPosition');
|
|
||||||
break;
|
|
||||||
case '招聘会预约提醒':
|
|
||||||
useReadMsg().markAsRead(item, index);
|
|
||||||
navTo('/packageA/pages/reservation/reservation');
|
|
||||||
break;
|
|
||||||
case '系统通知':
|
|
||||||
navTo('/packageA/pages/systemNotification/systemNotification');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({ loadData });
|
defineExpose({ loadData });
|
||||||
@@ -110,6 +101,8 @@ defineExpose({ loadData });
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 26rpx 36rpx;
|
padding: 26rpx 36rpx;
|
||||||
margin: 0 0 28rpx 0
|
margin: 0 0 28rpx 0
|
||||||
|
&.unread
|
||||||
|
background: linear-gradient(135deg, #FFFAFA 0%, #FFFFFF 100%)
|
||||||
.card-img
|
.card-img
|
||||||
width: 96rpx;
|
width: 96rpx;
|
||||||
height: 96rpx;
|
height: 96rpx;
|
||||||
@@ -121,6 +114,9 @@ defineExpose({ loadData });
|
|||||||
.card-img-flame
|
.card-img-flame
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%
|
height: 100%
|
||||||
|
.card-img-default
|
||||||
|
width: 60%
|
||||||
|
height: 60%
|
||||||
.subscript
|
.subscript
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
@@ -147,15 +143,31 @@ defineExpose({ loadData });
|
|||||||
color: #333333;
|
color: #333333;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
width: 100%
|
width: 100%
|
||||||
text
|
.title-left
|
||||||
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
min-width: 0
|
||||||
|
flex: 1
|
||||||
|
.unread-dot
|
||||||
|
width: 14rpx
|
||||||
|
height: 14rpx
|
||||||
|
background: #F73636
|
||||||
|
border-radius: 50%
|
||||||
|
margin-right: 12rpx
|
||||||
|
flex-shrink: 0
|
||||||
|
.unread-text
|
||||||
|
font-weight: 600
|
||||||
|
text
|
||||||
|
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
|
||||||
.card-time
|
.card-time
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #AAAAAA;
|
color: #AAAAAA;
|
||||||
height: 100%
|
height: 100%
|
||||||
margin: 4rpx;
|
margin: 4rpx;
|
||||||
|
flex-shrink: 0
|
||||||
.info-text
|
.info-text
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
<!-- 未读消息列表 -->
|
<!-- 未读消息列表 -->
|
||||||
<view
|
<view
|
||||||
class="list-card press-button"
|
class="list-card press-button"
|
||||||
|
:class="{ unread: item.isRead === '0' }"
|
||||||
v-for="(item, index) in unreadMsgList"
|
v-for="(item, index) in unreadMsgList"
|
||||||
:key="index"
|
:key="index"
|
||||||
@click="seeDetail(item)"
|
@click="seeDetail(item)"
|
||||||
@@ -16,19 +17,27 @@
|
|||||||
></image>
|
></image>
|
||||||
<image
|
<image
|
||||||
class="card-img-flame"
|
class="card-img-flame"
|
||||||
v-if="item.title === '职位上新'"
|
v-else-if="item.title === '职位上新'"
|
||||||
src="/static/icon/msgtype2.png"
|
src="/static/icon/msgtype2.png"
|
||||||
></image>
|
></image>
|
||||||
<image
|
<image
|
||||||
class="card-img-flame"
|
class="card-img-flame"
|
||||||
v-if="item.title === '系统通知'"
|
v-else-if="item.title === '系统通知'"
|
||||||
src="/static/icon/msgtype3.png"
|
src="/static/icon/msgtype3.png"
|
||||||
></image>
|
></image>
|
||||||
|
<image
|
||||||
|
class="card-img-flame card-img-default"
|
||||||
|
v-else
|
||||||
|
src="/static/icon/bell.png"
|
||||||
|
></image>
|
||||||
<view class="subscript" v-if="item.notReadCount">{{ item.notReadCount }}</view>
|
<view class="subscript" v-if="item.notReadCount">{{ item.notReadCount }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="card-info">
|
<view class="card-info">
|
||||||
<view class="info-title">
|
<view class="info-title">
|
||||||
<text>{{ item.title }}</text>
|
<view class="title-left">
|
||||||
|
<view class="unread-dot" v-if="item.isRead === '0'"></view>
|
||||||
|
<text :class="{ 'unread-text': item.isRead === '0' }">{{ item.title }}</text>
|
||||||
|
</view>
|
||||||
<view class="card-time">{{ item.date }}</view>
|
<view class="card-time">{{ item.date }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="info-text line_2">{{ item.subTitle || '消息' }}</view>
|
<view class="info-text line_2">{{ item.subTitle || '消息' }}</view>
|
||||||
@@ -64,7 +73,8 @@ async function loadData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function seeDetail(item) {
|
function seeDetail(item) {
|
||||||
console.log(item);
|
uni.setStorageSync('currentMessageDetail', item);
|
||||||
|
navTo('/pages/msglog/messageDetail');
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({ loadData });
|
defineExpose({ loadData });
|
||||||
@@ -89,6 +99,8 @@ defineExpose({ loadData });
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 26rpx 36rpx;
|
padding: 26rpx 36rpx;
|
||||||
margin: 0 0 28rpx 0
|
margin: 0 0 28rpx 0
|
||||||
|
&.unread
|
||||||
|
background: linear-gradient(135deg, #FFFAFA 0%, #FFFFFF 100%)
|
||||||
.card-img
|
.card-img
|
||||||
width: 96rpx;
|
width: 96rpx;
|
||||||
height: 96rpx;
|
height: 96rpx;
|
||||||
@@ -100,6 +112,9 @@ defineExpose({ loadData });
|
|||||||
.card-img-flame
|
.card-img-flame
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%
|
height: 100%
|
||||||
|
.card-img-default
|
||||||
|
width: 60%
|
||||||
|
height: 60%
|
||||||
.subscript
|
.subscript
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
@@ -126,15 +141,31 @@ defineExpose({ loadData });
|
|||||||
color: #333333;
|
color: #333333;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
width: 100%
|
width: 100%
|
||||||
text
|
.title-left
|
||||||
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
min-width: 0
|
||||||
|
flex: 1
|
||||||
|
.unread-dot
|
||||||
|
width: 14rpx
|
||||||
|
height: 14rpx
|
||||||
|
background: #F73636
|
||||||
|
border-radius: 50%
|
||||||
|
margin-right: 12rpx
|
||||||
|
flex-shrink: 0
|
||||||
|
.unread-text
|
||||||
|
font-weight: 600
|
||||||
|
text
|
||||||
|
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
|
||||||
.card-time
|
.card-time
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #AAAAAA;
|
color: #AAAAAA;
|
||||||
height: 100%
|
height: 100%
|
||||||
margin: 4rpx;
|
margin: 4rpx;
|
||||||
|
flex-shrink: 0
|
||||||
.info-text
|
.info-text
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export const useReadMsg = defineStore('readMsg', () => {
|
|||||||
|
|
||||||
// 未读消息列表
|
// 未读消息列表
|
||||||
const unreadMsgList = computed(() =>
|
const unreadMsgList = computed(() =>
|
||||||
msgList.value.filter(msg => msg.notReadCount > 0)
|
msgList.value.filter(msg => msg.isRead == 0)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -198,11 +198,14 @@ export function createRequest(url, data = {}, method = 'GET', loading = false, h
|
|||||||
data: requestData,
|
data: requestData,
|
||||||
header,
|
header,
|
||||||
success: resData => {
|
success: resData => {
|
||||||
|
const responseData = handleResponseData(resData.data)
|
||||||
|
console.log('[请求] 接口地址:', config.baseUrl + url)
|
||||||
|
console.log('[请求] 解密后数据:', JSON.stringify(responseData))
|
||||||
// 响应拦截
|
// 响应拦截
|
||||||
if (resData.statusCode === 200) {
|
if (resData.statusCode === 200) {
|
||||||
const responseData = handleResponseData(resData.data)
|
// const responseData = handleResponseData(resData.data)
|
||||||
console.log('[请求] 接口地址:', config.baseUrl + url)
|
// console.log('[请求] 接口地址:', config.baseUrl + url)
|
||||||
console.log('[请求] 解密后数据:', JSON.stringify(responseData))
|
// console.log('[请求] 解密后数据:', JSON.stringify(responseData))
|
||||||
const {
|
const {
|
||||||
code,
|
code,
|
||||||
msg
|
msg
|
||||||
|
|||||||
Reference in New Issue
Block a user