Browse Source

Merge remote-tracking branch 'origin/dev' into dev

dev-v1.0.2
庄锐波 4 months ago
parent
commit
ac55d3a029
  1. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/RegisterPopups.vue
  2. 18
      zdxt-web-client/zdxt-efcode-enforcement-app/src/router/enforcement-app/enf-main-router.js
  3. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/law/lawServiceList.vue
  4. 162
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementReserveList.vue
  5. 170
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementTaskList.vue
  6. 33
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/messageCenter.vue
  7. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/nos/nosEvaluateList.vue

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/RegisterPopups.vue

@ -369,7 +369,7 @@ const loadBasisList = () => {
{
pageSize: basisPageSize.value,
pageNum: basisPageNum.value,
name: basisSearchKeyword.value || undefined,
lawName: basisSearchKeyword.value || undefined,
},
(res) => {
console.log(res)

18
zdxt-web-client/zdxt-efcode-enforcement-app/src/router/enforcement-app/enf-main-router.js

@ -124,6 +124,24 @@ const routes = [
isKeepAlive: false,
},
},
// 执法端-执法任务列表
{
path: "/enforcement/enforcementTaskList",
name: "enforcementTaskList",
component: () => import("@/views/enforcement/message/enforcementTaskList.vue"),
meta: {
isKeepAlive: false,
},
},
// 执法端-执法预约列表
{
path: "/enforcement/enforcementReserveList",
name: "enforcementReserveList",
component: () => import("@/views/enforcement/message/enforcementReserveList.vue"),
meta: {
isKeepAlive: false,
},
},
// 执法端-我的(tabbar)
{
path: "/enforcement/my",

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/law/lawServiceList.vue

@ -19,7 +19,7 @@
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="已全部加载"
finished-text=""
@load="onLoad"
:offset="50"
>

162
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementReserveList.vue

@ -0,0 +1,162 @@
<template>
<div class="reserve-list-page app_content">
<div class="content-area">
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list v-model:loading="loading" :finished="finished" finished-text=""
@load="onLoad" :offset="50">
<van-empty v-if="finished && reserveList.length === 0" description="暂无预约" />
<div v-for="(item, index) in reserveList" :key="index" class="reserve-item">
<div class="reserve-time">{{ item.time }}</div>
<div class="reserve-card">
<!-- <div class="card-header">
<span class="reserve-type">待确认预约:</span>
</div> -->
<div class="reserve-type">待执行任务:</div>
<div class="card-body">
<div class="reserve-row">
<span class="reserve-label">{{ item.reserveUnit ? '预约单位' : '执法单位' }}</span>
<span class="reserve-value">{{ item.reserveUnit || item.enforcementUnit || '-' }}</span>
</div>
<div class="reserve-row">
<span class="reserve-label">企业名称</span>
<span class="reserve-value">{{ item.enterpriseName || '-' }}</span>
</div>
<div class="reserve-row">
<span class="reserve-label">检查时间</span>
<span class="reserve-value">{{ item.checkTime || '-' }}</span>
</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</div>
</template>
<script setup name="enforcementReserveList">
import { ref, onMounted } from 'vue';
import { useRouter } from 'vue-router';
const router = useRouter();
const reserveList = ref([]);
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const fetchReserveList = () => {
loading.value = true;
setTimeout(() => {
const mockData = [
{
time: '2026-02-19 16:20',
enterpriseName: '深圳市新粤云有限公司',
reserveUnit: '深圳市生态环境局',
checkTime: '2026-02-20 上午'
},
{
time: '2026-03-20 15:23',
enterpriseName: '深圳市新粤云有限公司',
enforcementUnit: '深圳市生态环境局',
checkTime: '2026-04-21 上午'
},
{
time: '2026-04-18 10:23',
enterpriseName: '深圳市新粤云有限公司',
enforcementUnit: '深圳市生态环境局',
checkTime: '2026-04-20 上午'
}
];
reserveList.value = mockData;
loading.value = false;
finished.value = true;
refreshing.value = false;
}, 500);
};
const onLoad = () => {
if (loading.value || finished.value) return;
fetchReserveList();
};
const onRefresh = () => {
finished.value = false;
fetchReserveList();
};
onMounted(() => {
fetchReserveList();
});
</script>
<style lang="less" scoped>
.reserve-list-page {
display: flex;
flex-direction: column;
height: 100%;
background: #f5f5f5;
}
.content-area {
flex: 1;
overflow-y: auto;
padding: 12px;
}
.reserve-item {
margin-bottom: 16px;
}
.reserve-time {
font-size: 12px;
color: #999;
margin-bottom: 8px;
padding-left: 8px;
}
.reserve-card {
background: #fff;
border-radius: 12px;
padding: 12px 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.card-header {
margin-bottom: 8px;
}
.reserve-type {
font-size: 14px;
font-weight: 600;
color: #333;
padding: 8px 0;
}
.card-body {
padding-left: 4px;
}
.reserve-row {
display: flex;
align-items: center;
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
}
.reserve-label {
font-size: 13px;
color: #666;
min-width: 60px;
flex-shrink: 0;
}
.reserve-value {
font-size: 13px;
color: #333;
flex: 1;
}
</style>

170
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementTaskList.vue

@ -0,0 +1,170 @@
<template>
<div class="task-list-page app_content">
<!-- <van-nav-bar title="执法任务" left-arrow @click-left="goBack" /> -->
<div class="content-area">
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list v-model:loading="loading" :finished="finished" finished-text=""
@load="onLoad" :offset="50">
<van-empty v-if="finished && taskList.length === 0" description="暂无任务" />
<div v-for="(item, index) in taskList" :key="index" class="task-item">
<div class="task-time">{{ item.time }}</div>
<div class="task-card">
<!-- <div class="card-header">
<span class="task-type">待执行任务:</span>
</div> -->
<div class="task-type">待执行任务:</div>
<div class="card-body">
<div class="task-row">
<span class="task-label">企业名称</span>
<span class="task-value">{{ item.enterpriseName || '-' }}</span>
</div>
<div class="task-row">
<span class="task-label">检查时间</span>
<span class="task-value">{{ item.checkTime || '-' }}</span>
</div>
<div class="task-row">
<span class="task-label">执法事项</span>
<span class="task-value">{{ item.enforcementItem || '-' }}</span>
</div>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</div>
</template>
<script setup name="enforcementTaskList">
import { ref, onMounted } from 'vue';
import { useRouter } from 'vue-router';
const router = useRouter();
const taskList = ref([]);
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const pageNum = ref(1);
const pageSize = ref(10);
const goBack = () => {
router.back();
};
const fetchTaskList = () => {
loading.value = true;
setTimeout(() => {
const mockData = [
{
time: '2026-02-19 16:20',
enterpriseName: '深圳市新粤云有限公司',
checkTime: '2026-02-20 上午',
enforcementItem: '日常检查'
},
{
time: '2026-03-20 14:20',
enterpriseName: '深圳市新粤云有限公司',
checkTime: '2026-03-04 上午',
enforcementItem: '日常检查'
},
{
time: '2026-4-19 15:20',
enterpriseName: '深圳市新粤云有限公司',
checkTime: '2026-04-20 上午',
enforcementItem: '日常检查'
}
];
taskList.value = mockData;
loading.value = false;
finished.value = true;
refreshing.value = false;
}, 500);
};
const onLoad = () => {
if (loading.value || finished.value) return;
fetchTaskList();
};
const onRefresh = () => {
pageNum.value = 1;
finished.value = false;
fetchTaskList();
};
onMounted(() => {
fetchTaskList();
});
</script>
<style lang="less" scoped>
.task-list-page {
display: flex;
flex-direction: column;
height: 100%;
background: #f5f5f5;
}
.content-area {
flex: 1;
overflow-y: auto;
padding: 12px;
}
.task-item {
margin-bottom: 16px;
}
.task-time {
font-size: 12px;
color: #999;
margin-bottom: 8px;
padding-left: 8px;
}
.task-card {
background: #fff;
border-radius: 12px;
padding: 12px 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.card-header {
margin-bottom: 8px;
}
.task-type {
font-size: 14px;
font-weight: 600;
color: #333;
padding: 8px 0;
}
.card-body {
padding-left: 4px;
}
.task-row {
display: flex;
align-items: center;
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
}
.task-label {
font-size: 13px;
color: #666;
min-width: 60px;
flex-shrink: 0;
}
.task-value {
font-size: 13px;
color: #333;
flex: 1;
}
</style>

33
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/messageCenter.vue

@ -31,6 +31,7 @@
</div>
<div class="item-desc">{{ item.desc }}</div>
</div>
<div class="item-right">></div>
</div>
</van-list>
</van-pull-refresh>
@ -56,6 +57,7 @@
</div>
<div class="item-desc">{{ item.desc }}</div>
</div>
<div class="item-right"><van-icon name="arrow" size="20" /></div>
</div>
</van-list>
</van-pull-refresh>
@ -150,6 +152,14 @@ const initMessageList = () => {
icon: 'law',
iconBg: 'icon-blue',
unreadCount: messageStats.value.zfpjcount,
},{
id: 4,
title: '非现场执法评价',
desc: '',
time: '',
icon: 'law',
iconBg: 'icon-blue',
unreadCount: messageStats.value.zfpjcount,
},{
id: 2,
title: '计划通知',
@ -288,6 +298,11 @@ const onMessageClick = (item) => {
router.push({
path: '/enforcement/enforcementEvaluateList',
});
}else if(item.title === '非现场执法评价'){
sessionStorage.setItem('messageReturnTab', '0');
router.push({
path: '/enforcement/nos/evaluate',
});
} else {
showToast(`点击了:${item.title}`);
}
@ -300,6 +315,16 @@ const onTodoClick = (item) => {
router.push({
path: '/enforcement/enforcementNoticeList',
});
} else if (item.title === '执法任务') {
sessionStorage.setItem('messageReturnTab', '1');
router.push({
path: '/enforcement/enforcementTaskList',
});
} else if (item.title === '执法预约') {
sessionStorage.setItem('messageReturnTab', '1');
router.push({
path: '/enforcement/enforcementReserveList',
});
} else if (item.title === '待评价执法') {
sessionStorage.setItem('messageReturnTab', '1');
router.push({
@ -404,7 +429,7 @@ onMounted(() => {
/* ===== 消息列表项 ===== */
.message-item {
display: flex;
align-items: flex-start;
align-items: center;
background: #fff;
border-radius: 12px;
padding: 14px 16px;
@ -429,7 +454,10 @@ onMounted(() => {
color: #fff;
}
}
.item-right{
font-size: 22px;
color: #a6a6a6;
}
/* 图标背景色 */
.icon-blue {
background: url('@/assets/images/icon_pffw.jpg') center center no-repeat;
@ -473,7 +501,6 @@ onMounted(() => {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 6px;
}
.item-title {

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/nos/nosEvaluateList.vue

@ -6,7 +6,7 @@
<!-- 列表区域 -->
<div class="list-container">
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list v-model:loading="loading" :finished="finished" finished-text="已全部加载" @load="onLoad" :offset="50">
<van-list v-model:loading="loading" :finished="finished" finished-text="" @load="onLoad" :offset="50">
<van-empty v-if="finished && list.length === 0" description="暂无执法评价" />
<div class="evaluate-card" v-for="item in list" :key="item.id" @click="toDetail(item)">

Loading…
Cancel
Save