Browse Source

预告加一个详情页

dev
wangmingyong@163.com 1 month ago
parent
commit
89d03682db
  1. 5
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/my/myPage.vue
  2. 216
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/plan/planNoticeDetail.vue
  3. 15
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/plan/planNoticeList.vue

5
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/my/myPage.vue

@ -5,7 +5,7 @@
<div class="user-info"> <div class="user-info">
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<!-- <img class="avatar" src="https://picsum.photos/120/120?random=avatar" alt="avatar" /> --> <!-- <img class="avatar" src="https://picsum.photos/120/120?random=avatar" alt="avatar" /> -->
<div></div> <div class="avatar"></div>
</div> </div>
<div class="user-name">{{ useCommon.enterpriseName}}</div> <div class="user-name">{{ useCommon.enterpriseName}}</div>
<div class="user-phone">电话{{ phoneNumber }}</div> <div class="user-phone">电话{{ phoneNumber }}</div>
@ -98,6 +98,9 @@ const toSettings = () => {
line-height: 80px; line-height: 80px;
color: #fff; color: #fff;
background: #1989fa; background: #1989fa;
.avatar{
font-size:38px;
}
} }
.user-name { .user-name {

216
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/plan/planNoticeDetail.vue

@ -0,0 +1,216 @@
<template>
<div class="notice-detail-page">
<!-- 内容区域 -->
<div class="content-area">
<div v-if="loading" class="loading-wrap">
<van-loading size="20" />&nbsp;加载中...
</div>
<template v-else-if="detail">
<!-- 基本信息卡片 -->
<div class="info-card">
<div class="info-row">
<span class="info-label">企业名称</span>
<span class="info-value">{{ detail.enterpriseName || '-' }}</span>
</div>
<div class="info-row">
<span class="info-label">企业联系人</span>
<span class="info-value">{{ detail.contactPerson || '-' }}</span>
</div>
<div class="info-row">
<span class="info-label">联系电话</span>
<span class="info-value">{{ detail.contactPhone || '-' }}</span>
</div>
<div class="info-row">
<span class="info-label">执法日期</span>
<span class="info-value">{{ formatDate(detail.enforceDate) || '-' }} {{ getTimeText(detail.enforceTime) }}</span>
</div>
<div class="info-row">
<span class="info-label">执法事项</span>
<span class="info-value detail_content">{{ detail.enforceContent || '-' }}</span>
</div>
<div class="info-row">
<span class="info-label">执法要求</span>
<span class="info-value detail_content">{{ detail.enforceRequirement || '-' }}</span>
</div>
<div class="info-row">
<span class="info-label">执法人员</span>
<div v-if="personList.length" class="enforcer-list">
<div v-for="(person, index) in personList" :key="index" class="enforcer-item">
<span class="enforcer-name">{{ person.name }}</span>
<span class="enforcer-phone">{{ person.phone }}</span>
</div>
</div>
<span v-else class="info-value">-</span>
</div>
</div>
</template>
<van-empty v-else description="未查询到预告信息" />
</div>
<!-- 底部反馈按钮 -->
<div class="footer-bar" v-if="detail">
<van-button class="feedback-btn" type="primary" block @click="goFeedback">反馈</van-button>
</div>
</div>
</template>
<script setup name="planNoticeDetail">
import { useRouter, useRoute } from 'vue-router';
import { getPlanNoticeDetail } from '@/api/enterprise/planNotice';
const router = useRouter();
const route = useRoute();
const loading = ref(true);
const detail = ref(null);
const personList = ref([]);
const getTimeText = (time) => {
const map = { 1: '上午', 2: '下午', 3: '其他' };
return map[time] || '';
};
const formatDate = (dateStr) => {
if (!dateStr) return '';
return String(dateStr).substring(0, 10).replace('T', ' ');
};
const goFeedback = () => {
const id = route.query.id;
router.push({
path: '/enterprise/enforcementChat',
query: { id }
});
};
onMounted(() => {
const id = route.query.id;
if (!id) {
loading.value = false;
return;
}
getPlanNoticeDetail({ id }, (res) => {
loading.value = false;
if (res.code === 200 && res.data) {
detail.value = res.data;
//
if (res.data.enforceUserNames) {
const names = res.data.enforceUserNames.split(',');
const tels = res.data.enforceUserTels ? res.data.enforceUserTels.split(',') : [];
personList.value = names.map((name, i) => ({
name,
phone: i < tels.length ? tels[i] : '',
}));
}
}
}, () => {
loading.value = false;
});
});
</script>
<style lang="less" scoped>
.notice-detail-page {
display: flex;
flex-direction: column;
height: 100%;
background: #fbfdff;
}
.content-area {
flex: 1;
overflow-y: auto;
padding: 0.27rem;
padding-bottom: 1.8rem;
}
.loading-wrap {
display: flex;
align-items: center;
justify-content: center;
padding: 40px 0;
color: #999;
font-size: 14px;
}
/* ===== 信息卡片 ===== */
.info-card {
background: #fff;
border-radius: 4px;
padding: 0.3rem 0.35rem;
margin-bottom: 0.27rem;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.info-row {
display: flex;
align-items: flex-start;
font-size: 0.32rem;
line-height: 1.8;
padding: 6px 0px;
.info-label {
color: #333;
margin-right: 18px;
font-size: 14px;
width: 70px;
flex-shrink: 0;
}
.info-value {
color: #999;
flex: 1;
word-break: break-all;
font-size: 14px;
}
}
/* ===== 执法人员 ===== */
.enforcer-list {
display: flex;
flex-direction: column;
gap: 8px;
padding: 6px 0px;
}
.enforcer-item {
display: flex;
align-items: center;
font-size: 14px;
color: #666;
gap: 12px;
.enforcer-name {
font-weight: 500;
color: #999;
}
.enforcer-phone {
color: #999;
}
}
.detail_content {
min-height: 100px;
}
/* ===== 底部反馈按钮 ===== */
.footer-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: 0.2rem 0.4rem;
padding-bottom: calc(0.2rem + env(safe-area-inset-bottom));
background: #fff;
box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.05);
z-index: 10;
}
.feedback-btn {
background: #2b7de9;
border: none;
border-radius: 0.3rem;
font-size: 0.34rem;
height: 0.88rem;
}
</style>

15
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/plan/planNoticeList.vue

@ -32,18 +32,18 @@
class="notice-card" class="notice-card"
v-for="item in list" v-for="item in list"
:key="item.id" :key="item.id"
@click="toDetail(item)"
> >
<div class="card-row time-row"> <div class="card-row time-row">
<span class="label">执法时间</span> <span class="label">执法时间</span>
<span class="value">{{ item.enforceDate }}</span> <span class="value">{{ item.enforceDate }}</span>
</div> </div>
<!-- <div class="card-title">{{ item.checkItemText }}</div> -->
<div class="card-row"> <div class="card-row">
<span class="label">执法单位</span> <span class="label">执法单位</span>
<span class="value">{{ item.bureauDeptName }}</span> <span class="value">{{ item.bureauDeptName }}</span>
</div> </div>
<div class="card-action"> <div class="card-action">
<span class="feedback-btn" :class="{ 'has-dot': item.hasFeedback }" @click="onFeedback(item)"> <span class="feedback-btn" :class="{ 'has-dot': item.hasFeedback }" @click.stop="onFeedback(item)">
<van-icon name="chat-o" size="14" /> <van-icon name="chat-o" size="14" />
反馈 反馈
</span> </span>
@ -166,6 +166,16 @@ const onFeedback = (item) => {
} }
}); });
}; };
// ========== ==========
const toDetail = (item) => {
router.push({
path: '/enterprise/planNoticeDetail',
query: {
id: item.id
}
});
};
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@ -210,6 +220,7 @@ const onFeedback = (item) => {
margin-bottom: 0.27rem; margin-bottom: 0.27rem;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
position: relative; position: relative;
cursor: pointer;
} }
.card-row { .card-row {

Loading…
Cancel
Save