|
|
|
@ -3,6 +3,12 @@ |
|
|
|
<SearchFilterBar :search-value="searchText" :date-type="dateType" :date-search="dateSearch" @search="onSearch" |
|
|
|
@clear="onClear" @date-change="onDateChange" /> |
|
|
|
|
|
|
|
<!-- Tab 切换:行政执法 / 非行政执法 --> |
|
|
|
<van-tabs v-model:active="activeTab" @change="onTabChange" sticky line-width="0.5rem" class="list-tabs"> |
|
|
|
<van-tab title="行政执法" name="enforcement"></van-tab> |
|
|
|
<van-tab title="非行政执法" name="non-enforcement"></van-tab> |
|
|
|
</van-tabs> |
|
|
|
|
|
|
|
<!-- 可滚动列表区域 --> |
|
|
|
<div class="list-container"> |
|
|
|
<van-pull-refresh v-model="refreshing" @refresh="onRefresh"> |
|
|
|
@ -13,24 +19,24 @@ |
|
|
|
<!-- 列表项 --> |
|
|
|
<div class="card-item" v-for="item in list" :key="item.id"> |
|
|
|
<div class="card-header"> |
|
|
|
<span class="card-time">执法时间:{{ formatTime(item.enforcementTime) }}</span> |
|
|
|
<span class="card-time">{{ activeTab === 'enforcement' ? '执法时间:' : '入企时间:' }}{{ formatTime(item.enforcementTime) }}</span> |
|
|
|
<span class="card-status" v-if="item.hasUnion === 1">联</span> |
|
|
|
</div> |
|
|
|
<div class="card-divider"></div> |
|
|
|
<div class="card-body" @click="toDetailView(item)"> |
|
|
|
<div class="card-title">{{ item.lawEnforcementItemText || '-' }}</div> |
|
|
|
<div class="card-row"> |
|
|
|
<span class="card-label">执法单位:</span> |
|
|
|
<span class="card-label">{{ activeTab === 'enforcement' ? '执法单位:' : '入企单位:' }}</span> |
|
|
|
<span>{{ item.bureauDeptName || '-' }}</span> |
|
|
|
</div> |
|
|
|
<div class="card-row"> |
|
|
|
<div class="card-label">执法人员:</div> |
|
|
|
<div class="card-label">{{ activeTab === 'enforcement' ? '执法人员:' : '入企人员:' }}</div> |
|
|
|
<div class="enforcer-list"> |
|
|
|
<div class="enforcer-line"> |
|
|
|
<span class="enforcer-name">{{ parseEnforcer(item.lawEnforcer).name }}</span> |
|
|
|
<span v-if="parseEnforcer(item.lawEnforcer).phone" class="enforcer-id">{{ parseEnforcer(item.lawEnforcer).phone }}</span> |
|
|
|
</div> |
|
|
|
<div v-for="(value, index) in item.lawEnforcer2List || []" :key="index" class="enforcer-line"> |
|
|
|
<div v-for="(value, index) in item.lawEnforcer2List || item.lawEnforcerOtherList || []" :key="index" class="enforcer-line"> |
|
|
|
<span class="enforcer-name">{{ parseEnforcer(value).name }}</span> |
|
|
|
<span v-if="parseEnforcer(value).phone" class="enforcer-id">{{ parseEnforcer(value).phone }}</span> |
|
|
|
</div> |
|
|
|
@ -41,9 +47,8 @@ |
|
|
|
<span>{{ item.enterpriseName || '-' }}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- 操作按钮区域 --> |
|
|
|
<div class="card-actions"> |
|
|
|
<!-- 编辑按钮:未提交时显示 --> |
|
|
|
<!-- 操作按钮区域:仅行政执法显示编辑按钮 --> |
|
|
|
<div class="card-actions" v-if="activeTab === 'enforcement'"> |
|
|
|
<div v-if="item.isSubmit === 0" @click.stop="toEdit(item.id)"> |
|
|
|
<van-icon name="edit" /> 编辑 |
|
|
|
</div> |
|
|
|
@ -60,12 +65,16 @@ import { ref, onMounted } from 'vue'; |
|
|
|
import { useRouter } from 'vue-router'; |
|
|
|
import { showToast } from 'vant'; |
|
|
|
import 'vant/es/toast/style'; |
|
|
|
import { queryEnforcementRegistrationPageList } from '@/api/enforcement'; |
|
|
|
import { queryEnforcementRegistrationPageList, queryNonRegistrationPageList } from '@/api/enforcement'; |
|
|
|
import { formatEnforcer, parseEnforcer, formatTime } from '@/util/util'; |
|
|
|
import SearchFilterBar from '@/components/common/SearchFilterBar.vue'; |
|
|
|
|
|
|
|
const router = useRouter(); |
|
|
|
|
|
|
|
// ========== Tab 状态 ========== |
|
|
|
// 'enforcement':行政执法;'non-enforcement':非行政执法 |
|
|
|
const activeTab = ref('enforcement'); |
|
|
|
|
|
|
|
// ========== 列表状态 ========== |
|
|
|
const list = ref([]); |
|
|
|
const loading = ref(false); |
|
|
|
@ -81,15 +90,11 @@ const pageSize = ref(10); |
|
|
|
const dateType = ref(null); |
|
|
|
const dateSearch = ref(null); |
|
|
|
|
|
|
|
// ========== 格式化日期 ========== |
|
|
|
const formatDate = (dateStr) => { |
|
|
|
if (!dateStr) return '-'; |
|
|
|
const d = new Date(dateStr.replace ? dateStr.replace(/-/g, '/') : dateStr); |
|
|
|
if (isNaN(d.getTime())) return dateStr; |
|
|
|
const y = d.getFullYear(); |
|
|
|
const m = String(d.getMonth() + 1).padStart(2, '0'); |
|
|
|
const day = String(d.getDate()).padStart(2, '0'); |
|
|
|
return `${y}-${m}-${day}`; |
|
|
|
// ========== 根据当前 Tab 选择接口 ========== |
|
|
|
const getFetchApi = () => { |
|
|
|
return activeTab.value === 'enforcement' |
|
|
|
? queryEnforcementRegistrationPageList |
|
|
|
: queryNonRegistrationPageList; |
|
|
|
}; |
|
|
|
|
|
|
|
// ========== 加载数据 ========== |
|
|
|
@ -111,8 +116,10 @@ const fetchList = () => { |
|
|
|
if (dateSearch.value) { |
|
|
|
params.dateSearch = dateSearch.value; |
|
|
|
} |
|
|
|
queryEnforcementRegistrationPageList(params, (res) => { |
|
|
|
const api = getFetchApi(); |
|
|
|
api(params, (res) => { |
|
|
|
if (res.code === 200 || res.code === 0) { |
|
|
|
// 行政执法接口返回 res.data,非行政执法接口返回 res.rows |
|
|
|
const rows = res.data || res.rows || []; |
|
|
|
const total = res.total || res.count || 0; |
|
|
|
|
|
|
|
@ -181,16 +188,35 @@ const onDateChange = ({ dateType: type, dateSearch: search, dateShow }) => { |
|
|
|
onSearch(); |
|
|
|
}; |
|
|
|
|
|
|
|
// ========== 跳转详情(只读查看,始终不显示提交按钮)========== |
|
|
|
// ========== Tab 切换 ========== |
|
|
|
const onTabChange = (name) => { |
|
|
|
activeTab.value = name; |
|
|
|
// 重置列表并加载新 Tab 数据 |
|
|
|
pageNum.value = 1; |
|
|
|
list.value = []; |
|
|
|
finished.value = false; |
|
|
|
loading.value = true; |
|
|
|
fetchList(); |
|
|
|
}; |
|
|
|
|
|
|
|
// ========== 跳转详情(只读查看)========== |
|
|
|
const toDetailView = (item) => { |
|
|
|
router.push({ |
|
|
|
path: '/enforcement/enforcementEvaluateDetail', |
|
|
|
query: { id: item.id, hasEvaluate: 1 } |
|
|
|
}); |
|
|
|
if (activeTab.value === 'enforcement') { |
|
|
|
router.push({ |
|
|
|
path: '/enforcement/enforcementEvaluateDetail', |
|
|
|
query: { id: item.id, hasEvaluate: 1 } |
|
|
|
}); |
|
|
|
} else { |
|
|
|
// 非行政执法跳转到历史活动详情 |
|
|
|
router.push({ |
|
|
|
path: '/enforcement/historyActivityDetail', |
|
|
|
query: { id: item.id } |
|
|
|
}); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// ========== 跳转反馈(可编辑,与反馈页面的待反馈逻辑打通)========== |
|
|
|
const toEvaluate = (id, checkItem) => { |
|
|
|
// ========== 跳转反馈 ========== |
|
|
|
const toEvaluate = (id) => { |
|
|
|
router.push({ |
|
|
|
path: '/enforcement/enforcementEvaluateDetail', |
|
|
|
query: { |
|
|
|
@ -202,9 +228,14 @@ const toEvaluate = (id, checkItem) => { |
|
|
|
|
|
|
|
// ========== 跳转编辑页面 ========== |
|
|
|
const toEdit = (id) => { |
|
|
|
const query = { id }; |
|
|
|
// 非行政执法模式需要带上 type 参数 |
|
|
|
if (activeTab.value === 'non-enforcement') { |
|
|
|
query.type = 'non-enforcement'; |
|
|
|
} |
|
|
|
router.push({ |
|
|
|
path: '/enforcement/enforcementRegister', |
|
|
|
query: { id } |
|
|
|
query |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
@ -220,6 +251,11 @@ onMounted(() => { |
|
|
|
height: 100%; |
|
|
|
background-color: #fbfdff; |
|
|
|
|
|
|
|
.list-tabs { |
|
|
|
background: #fff; |
|
|
|
flex-shrink: 0; |
|
|
|
} |
|
|
|
|
|
|
|
.list-container { |
|
|
|
flex: 1; |
|
|
|
overflow-y: auto; |
|
|
|
|