Browse Source

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

dev-V1.0.1
庄锐波 5 months ago
parent
commit
bccbdd200a
  1. 3
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCarouselBannerController.java
  2. 3
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnforcementCarouselBannerController.java
  3. 2
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEntEnforcementRegistrationController.java
  4. 4
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationQueryBo.java
  5. 4
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java
  6. 8
      zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js
  7. 37
      zdxt-web-client/zdxt-efcode-enforcement-app/src/router/enforcement-app/enf-main-router.js
  8. 43
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/common/pdfPngPreview.vue
  9. 52
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementEvaluateDetail.vue
  10. 187
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/bannerDetail.vue
  11. 16
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue
  12. 289
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementEvaluateList.vue
  13. 28
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/messageCenter.vue
  14. 297
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue
  15. 66
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/program/components/ProgramCreate.vue
  16. 333
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/program/components/ProgramQuery.vue
  17. 10
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue
  18. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-test
  19. 2
      zdxt-web-client/zdxt-efcode-enterprise-app/src/api/enterprise/index.js
  20. 4
      zdxt-web-client/zdxt-efcode-enterprise-app/vite-env/.env.enterprise-dev

3
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCarouselBannerController.java

@ -56,8 +56,7 @@ public class AppEnfCarouselBannerController extends BaseController {
* @param id 主键
*/
@GetMapping("/getInfo")
public R<EnforcementCarouselBannerVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable String id) {
public R<EnforcementCarouselBannerVo> getInfo(String id) {
return R.ok(enforcementCarouselBannerService.queryById(id));
}
}

3
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnforcementCarouselBannerController.java

@ -66,8 +66,7 @@ public class AppEnforcementCarouselBannerController extends BaseController {
* @param id 主键
*/
@GetMapping("/getInfo")
public R<EnforcementCarouselBannerVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable String id) {
public R<EnforcementCarouselBannerVo> getInfo(String id) {
return R.ok(enforcementCarouselBannerService.queryById(id));
}

2
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEntEnforcementRegistrationController.java

@ -34,6 +34,7 @@ public class AppEntEnforcementRegistrationController extends BaseController {
*/
@GetMapping("/list")
public TableDataInfo<EnforcementRegistrationVo> list(EnforcementRegistrationBo bo, PageQuery pageQuery) {
return enforcementRegistrationService.queryPageList(bo, pageQuery);
}
@ -51,6 +52,7 @@ public class AppEntEnforcementRegistrationController extends BaseController {
*/
@GetMapping("/queryEnforcementRegistrationPageList")
public TableDataInfo<EnforcementRegistrationListVo> queryEnforcementRegistrationPageList( EnforcementRegistrationQueryBo bo, PageQuery pageQuery) {
bo.setIsSubmit(1L);
return enforcementRegistrationService.queryEnforcementRegistrationPageList(bo, pageQuery);
}

4
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationQueryBo.java

@ -77,4 +77,8 @@ public class EnforcementRegistrationQueryBo implements Serializable {
*/
private String enterpriseNumber;
/**
* 是否提交(0:未提交; 1:已提交)
*/
private Long IsSubmit;
}

4
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java

@ -767,8 +767,8 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat
LambdaQueryWrapper<EnforcementRegistration> lqw = Wrappers.lambdaQuery();
// 已提交的数据
// lqw.eq(EnforcementRegistration::getIsSubmit, 1L);
lqw.eq((bo.getIsSubmit() !=null),
EnforcementRegistration::getIsSubmit, bo.getIsSubmit());
// 企业ID
lqw.eq(StringUtils.isNotBlank(bo.getEnterpriseId()),
EnforcementRegistration::getEnterpriseId, bo.getEnterpriseId());

8
zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js

@ -72,6 +72,12 @@ export const queryEnforcementNoticeList = (params, success, error) => _post(base
// 执法预告列表
export const getLawNoticeList = (params, success, error) => _post(baseUrl + "/enforcement/queryList", params, success, error);
// 执法评价列表
export const queryEvaluateList = (params, success, error) => _get("/app-ent/evaluate/queryEvaluateList", params, success, error);
// 执法评价详情
export const queryEvaluateDetail = (params, success, error) => _get("/app-ent/evaluate/queryDetailById", params, success, error);
export const queryUsersByPage = (params, success, error) => _get(baseUrl + "/system/queryUsersByPage", params, success, error);
// 获取部门列表
@ -98,6 +104,8 @@ export const getNoticeInfoList = (params, success, error) => _get(baseUrl + "/no
export const getCarouselBannerList = (params, success, error) => _get(baseUrl + "/carouselBanner/list", params, success, error);
export const getCarouselBannerDetail = (params, success, error) => _get(baseUrl + "/carouselBanner/getInfo", params, success, error);
// endregion
// region 统计分析模块

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

@ -26,6 +26,15 @@ const routes = [
isKeepAlive: false,
},
},
// 执法端首页-banner详情
{
path: "/enforcement/bannerDetail",
name: "bannerDetail",
component: () => import("@/views/enforcement/home/bannerDetail.vue"),
meta: {
isKeepAlive: false,
},
},
// 执法端扫码入企
{
path: "/enforcement/scanEntQRCode",
@ -73,7 +82,7 @@ const routes = [
},
// 执法端-通知列表(tabbar)
{
path: "/enforcement/enforcementNoticeList",
path: "/enforcement/enforcementNoticeList",
name: "enforcementNoticeList",
component: () => import("@/views/enforcement/enforce/enforcementNoticeList.vue"),
meta: {
@ -89,6 +98,24 @@ const routes = [
isKeepAlive: false,
},
},
// 执法端-计划通知列表
{
path: "/enforcement/planNoticeList",
name: "planNoticeList",
component: () => import("@/views/enforcement/message/planNoticeList.vue"),
meta: {
isKeepAlive: false,
},
},
// 执法端-执法评价列表
{
path: "/enforcement/enforcementEvaluateList",
name: "enforcementEvaluateList",
component: () => import("@/views/enforcement/message/enforcementEvaluateList.vue"),
meta: {
isKeepAlive: false,
},
},
// 执法端-我的(tabbar)
{
path: "/enforcement/my",
@ -116,6 +143,12 @@ const routes = [
isKeepAlive: false,
},
},
// pdf预览
{
path: "/pdfPngPreview",
name: "pdfPngPreview",
component: () => import("@/views/common/pdfPngPreview.vue"),
},
// 执法端-计划编辑(新增/编辑)
{
path: "/enforcement/plan/edit",
@ -244,4 +277,4 @@ const routes = [
},
];
export {routes};
export { routes };

43
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/common/pdfPngPreview.vue

@ -0,0 +1,43 @@
<template>
<div id="div-container" style="height:100%;overflow: auto; ">
<img v-for="(item, index) in imgList" :key="index" class="img-box" :src="item" style="width: 100%" />
</div>
</template>
<script >
import {baseUrl} from "@/config/env";
import {transPdf} from "@/api/enforce.js";
export default {
name: 'PdfViewer',
data() {
return {
imgList:[],
// 可引入网络文件或者本地文件
pdfUrl: "http://192.168.110.36:85/profile/upload/2024/03/29/40eb1a97ca27c3369370e90632d92db0.pdf",
};
},
mounted() {
this.pdfUrl =baseUrl+ this.$route.query.url;
console.log("pdf地址", this.pdfUrl)
this.loadImage();
},
methods: {
loadImage() {
let searchParam = reactive({url: this.$route.query.url});
transPdf(searchParam, success => {
this.imgList = success.data;
if (success.data.length > 0) {
this.imgList.forEach((item, index) => {
this.imgList[index] = "data:image/png;base64,"+item;
});
}
}, error => {
})
}
},
};
</script>

52
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementEvaluateDetail.vue

@ -73,7 +73,7 @@
</van-radio-group>
</span>
</div>
<div class="info-row">
<div class="info-row" v-if="detail.hasAuto">
<span class="info-label">委托行政机关</span>
<span class="info-value">{{ detail.entrustDeptName }}</span>
</div>
@ -149,7 +149,7 @@
<div class="switch-section">
<span class="switch-label">其他问题</span>
<van-switch v-model="evaluateForm.hasOtherIssues" size="20" active-color="#2b7de9"
:disabled="readonly" />
:disabled="readonly" />
</div>
<!-- 问题列表 -->
@ -172,11 +172,6 @@
</div>
</div>
</div>
<!-- 底部提交按钮(仅待评价状态显示) -->
<div class="footer-bar" v-if="!readonly">
<van-button type="primary" block round @click="onSubmit">提交评价</van-button>
</div>
</div>
</template>
@ -200,6 +195,7 @@ import {
getEvaluateDetail,
getEnforcementRegistrationDetailById,
submitEvaluate,
queryEvaluateDetail,
} from '@/api/enforcement';
import { loadDict, getDictText } from '@/util/dictUtil';
import { baseUrl } from '@/config/env';
@ -209,8 +205,15 @@ const router = useRouter();
const route = useRoute();
const id = route.query.id;
// 只读标识:hasEvaluate=1 已评价只能查看,0/空 为待评价可提交
const readonly = computed(() => String(route.query.hasEvaluate) === '1');
// 只读标识:hasEvaluate=1 已评价只能查看,0 为待评价可提交,默认为已评价(只读)
const readonly = computed(() => {
const hasEvaluate = route.query.hasEvaluate;
// 如果没有 hasEvaluate 参数,默认为已评价(只读)
if (hasEvaluate === undefined || hasEvaluate === null || hasEvaluate === '') return true;
return String(hasEvaluate) === '1';
});
// 是否从执法评价列表跳转(通过 from 参数判断)
const fromEvaluateList = computed(() => route.query.from === 'evaluateList');
// 已评价返回的评价信息对象(后端 enterpriseEvaluateInfoVo)
const evaluateInfo = ref(null);
// 评价卡片是否显示:待评价始终显示;已评价仅当 enterpriseEvaluateInfoVo 有数据时显示
@ -295,8 +298,26 @@ const parseEnforcers = (data) => {
};
// 获取执法详情
// 从执法评价列表跳转时的详情加载
const fetchEvaluateDetail = () => {
queryEvaluateDetail({ id }, (res) => {
if (res.code === 200) {
const data = res.data;
detail.value = data.enforcementRegistrationVo || {};
// 保存企业评价信息
evaluateInfo.value = data.enterpriseEvaluateInfoVo || data.evaluateInfo || null;
// 已评价:将后端评价数据回填到表单供只读展示
if (evaluateInfo.value) fillEvaluateFormFromInfo(evaluateInfo.value);
} else {
showToast(res.msg || '评价详情加载失败');
}
}, () => {
showToast('评价详情加载失败');
});
};
// 从行政执法列表跳转时的详情加载
const fetchRegistrationDetail = () => {
if (!id) return;
getEnforcementRegistrationDetailById({ id }, (res) => {
const data = res.data;
detail.value = data.regResults[0]
@ -310,6 +331,15 @@ const fetchRegistrationDetail = () => {
});
};
// 根据来源选择加载方式
const fetchDetail = () => {
if (fromEvaluateList.value) {
fetchEvaluateDetail();
} else {
fetchRegistrationDetail();
}
};
// 将后端 enterpriseEvaluateInfoVo 回填到表单/问题列表
const fillEvaluateFormFromInfo = (info) => {
evaluateForm.value = {
@ -327,7 +357,7 @@ const fillEvaluateFormFromInfo = (info) => {
};
onMounted(() => {
fetchRegistrationDetail();
fetchDetail();
});
// ========== 评分文字映射 ==========

187
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/bannerDetail.vue

@ -0,0 +1,187 @@
<template>
<div class="banner-detail-page">
<!-- 顶部导航栏 -->
<!-- <van-nav-bar
title="-banner详情"
left-text="关闭"
left-arrow
@click-left="onClickLeft"
/> -->
<!-- 内容区域 -->
<div class="detail-content">
<!-- 标题 -->
<h1 class="detail-title">{{ detail.title }}</h1>
<!-- 来源和时间 -->
<div class="detail-meta">
<span class="detail-source">{{ detail.source }}</span>
<span class="detail-time">{{ detail.time }}</span>
</div>
<!-- 图片 -->
<div class="detail-images" v-if="detail.imageUrl">
<img
:src="baseUrl + detail.imageUrl"
alt=""
@click="previewImage"
/>
</div>
<!-- 正文内容 -->
<div class="detail-body" v-if="detail.content" v-html="detail.content">
</div>
</div>
</div>
</template>
<script setup name="bannerDetail">
import { ref, onMounted } from 'vue';
import { useRouter, useRoute } from 'vue-router';
import { showToast, showImagePreview } from 'vant';
import 'vant/es/toast/style';
import 'vant/es/image-preview/style';
import { baseUrl } from '@/config/env';
import { getCarouselBannerDetail } from '@/api/enforcement';
const router = useRouter();
const route = useRoute();
// ========== 详情数据 ==========
const detail = ref({
id: '',
title: '',
source: '',
time: '',
imageUrl: '',
content: '',
});
const loading = ref(false);
// ========== 获取详情数据 ==========
const fetchDetail = () => {
const id = route.query.id;
if (!id) {
showToast('缺少详情ID');
router.back();
return;
}
loading.value = true;
getCarouselBannerDetail(
{ id },
(res) => {
loading.value = false;
if (res.code === 200 && res.data) {
detail.value = {
id: res.data.id || '',
title: res.data.title || '',
source: res.data.source || '',
time: res.data.time || '',
imageUrl: res.data.imageUrl || '',
content: res.data.content || '',
};
} else {
showToast(res.message || '获取详情失败');
}
},
(err) => {
loading.value = false;
showToast(err.message || '获取详情失败');
}
);
};
// ========== 页面加载时获取数据 ==========
onMounted(() => {
fetchDetail();
});
// ========== 返回上一页 ==========
const onClickLeft = () => {
router.back();
};
// ========== 预览图片 ==========
const previewImage = () => {
showImagePreview({
images: [baseUrl + detail.value.imageUrl],
startPosition: 0,
});
};
</script>
<style lang="less" scoped>
.banner-detail-page {
display: flex;
flex-direction: column;
height: 100%;
background-color: #fff;
.detail-content {
flex: 1;
overflow-y: auto;
padding: 0.4rem 0.4rem 0.6rem;
}
}
:deep(.van-nav-bar) {
background-color: #fff;
}
:deep(.van-nav-bar__title) {
font-size: 0.45rem;
font-weight: 600;
color: #333;
}
:deep(.van-nav-bar__text) {
font-size: 0.35rem;
color: #333;
}
:deep(.van-nav-bar .van-icon) {
color: #333;
}
.detail-title {
font-size: 0.55rem;
font-weight: bold;
color: #1a1a1a;
line-height: 1.5;
margin-bottom: 0.25rem;
}
.detail-meta {
display: flex;
align-items: center;
margin-bottom: 0.4rem;
.detail-source {
font-size: 0.3rem;
color: #2d94fa;
margin-right: 0.3rem;
}
.detail-time {
font-size: 0.3rem;
color: #999;
}
}
.detail-images {
margin-bottom: 0.4rem;
img {
width: 100%;
border-radius: 0.2rem;
}
}
.detail-body {
font-size: 0.37rem;
color: #333;
line-height: 1.8;
}
</style>

16
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue

@ -23,7 +23,7 @@
<van-swipe :autoplay="3000" indicator-color="rgba(255,255,255,0.9)" :loop="true">
<van-swipe-item v-for="(item, index) in bannerList" :key="index">
<div class="banner-inner">
<img :src="item.imageUrl" class="banner-img" alt="" />
<img :src="baseUrl + item.imageUrl" class="banner-img" alt="" @click="toBannerDetail(item)" />
</div>
</van-swipe-item>
</van-swipe>
@ -90,6 +90,7 @@ import { ref, computed, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import FooterBar from '@/components/FooterBar.vue';
import { getNoticeInfoList, getCarouselBannerList } from '@/api/enforcement/index';
import { baseUrl } from '@/config/env';
const router = useRouter();
@ -161,6 +162,19 @@ const toStatisticsAnalysis = () => {
});
};
/**
* 跳转banner详情页面
* @param {Object} item banner项
*/
const toBannerDetail = (item) => {
router.push({
path: '/enforcement/bannerDetail',
query: {
id: item.id
},
});
};
// ========== 页面挂载 ==========
onMounted(() => {
fetchNoticeList();

289
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementEvaluateList.vue

@ -0,0 +1,289 @@
<template>
<div class="evaluate-list-page">
<!-- 顶部导航栏 -->
<van-nav-bar title="执法评价" left-text="返回" left-arrow @click-left="onClickLeft">
</van-nav-bar>
<!-- 列表区域 -->
<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-empty v-if="finished && list.length === 0" description="暂无执法评价" />
<div class="evaluate-card" v-for="item in list" :key="item.id" @click="toDetail(item)">
<!-- 执法时间 -->
<div class="card-time">
执法时间:{{ item.enforcementTime }}
</div>
<!-- 标题 -->
<div class="card-title">{{ item.title || item.checkItemText || '执法检查' }}</div>
<!-- 内容 -->
<div class="card-content">
<div class="info-row">
<span class="label">执法单位</span>
<span class="value">{{ item.lawEnforcement || item.bureauDeptName }}</span>
</div>
<div class="info-row">
<span class="label">执法人员:</span>
<div>
<div v-for="(enforcer, index) in formatEnforcer(item)" :key="index"
class="enforcer-item">
{{ enforcer }}
</div>
</div>
</div>
<div class="info-row">
<span class="label">企业名称</span>
<span class="value">{{ item.enterpriseName }}</span>
</div>
</div>
<!-- 底部状态 -->
<div class="card-footer">
<span class="status">状态:<span :class="getStatusClass(item.hasEvaluate)">{{
getStatusText(item.hasEvaluate) }}</span></span>
<span class="evaluate-time">评价时间:{{ item.evaluateTime }}</span>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</div>
</template>
<script setup name="enforcementEvaluateList">
import { ref, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import { showToast } from 'vant';
import 'vant/es/toast/style';
import { queryEvaluateList } from '@/api/enforcement/index';
import { formatEnforcer } from '@/util/util';
const router = useRouter();
// ========== 列表状态 ==========
const list = ref([]);
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const pageNum = ref(1);
const pageSize = ref(10);
// ========== 获取状态文本 ==========
const getStatusText = (status) => {
const statusMap = {
'0': '未评价',
'1': '已评价',
'2': '已退回',
};
return statusMap[status] || '未知';
};
// ========== 获取状态样式类 ==========
const getStatusClass = (status) => {
const classMap = {
'0': 'status-pending',
'1': 'status-evaluated',
'2': 'status-rejected',
};
return classMap[status] || 'status-default';
};
// ========== 加载数据 ==========
const fetchList = () => {
const params = {
pageNum: pageNum.value,
pageSize: pageSize.value,
hasEvaluate: 1,
};
queryEvaluateList(params, (res) => {
if (res.code === 200) {
const rows = res.rows || res.data?.rows || res.data?.list || res.data || [];
const total = res.total ?? res.data?.total ?? 0;
if (refreshing.value) {
list.value = Array.isArray(rows) ? rows : [];
refreshing.value = false;
} else {
list.value = [...list.value, ...(Array.isArray(rows) ? rows : [])];
}
if (!Array.isArray(rows) || rows.length === 0 || list.value.length >= total) {
finished.value = true;
} else {
pageNum.value++;
}
loading.value = false;
} else {
finished.value = true;
loading.value = false;
refreshing.value = false;
showToast(res.msg || '加载失败');
}
}, () => {
finished.value = true;
loading.value = false;
refreshing.value = false;
showToast('网络请求失败');
});
};
// ========== 触底加载 ==========
const onLoad = () => {
if (refreshing.value) return;
fetchList();
};
// ========== 下拉刷新 ==========
const onRefresh = () => {
pageNum.value = 1;
list.value = [];
finished.value = false;
loading.value = true;
fetchList();
};
// ========== 跳转详情页面 ==========
const toDetail = (item) => {
router.push({
path: '/enforcement/enforcementEvaluateDetail',
query: { id: item.id, hasEvaluate: 1, from: 'evaluateList' }
});
};
// ========== 返回上一页 ==========
const onClickLeft = () => {
router.back();
};
// ========== 组件挂载时加载数据 ==========
onMounted(() => {
fetchList();
});
</script>
<style lang="less" scoped>
.evaluate-list-page {
display: flex;
flex-direction: column;
height: 100%;
background-color: #f5f5f5;
}
/* ===== 导航栏样式 ===== */
:deep(.van-nav-bar) {
background-color: #fff;
}
:deep(.van-nav-bar__title) {
font-size: 17px;
font-weight: 600;
color: #333;
}
:deep(.van-nav-bar__text) {
font-size: 15px;
color: #333;
}
:deep(.van-nav-bar .van-icon) {
color: #333;
}
/* ===== 列表容器 ===== */
.list-container {
flex: 1;
overflow-y: auto;
padding: 15px;
}
/* ===== 卡片样式 ===== */
.evaluate-card {
background: #fff;
border-radius: 10px;
padding: 15px;
margin-bottom: 15px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.card-time {
font-size: 12px;
color: #999;
margin-bottom: 10px;
}
.card-title {
font-size: 16px;
font-weight: bold;
color: #333;
margin-bottom: 15px;
line-height: 1.4;
}
.card-content {
border-top: 1px dashed #e5e5e5;
padding-top: 15px;
}
.info-row {
display: flex;
margin-bottom: 10px;
font-size: 14px;
.label {
color: #999;
min-width: 80px;
}
.enforcer-item {
padding: 4px 0px;
}
.value {
flex: 1;
color: #333;
word-break: break-all;
}
}
.card-footer {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 15px;
padding-top: 15px;
border-top: 1px dashed #e5e5e5;
font-size: 13px;
color: #666;
.status {
.status-pending {
color: #faad14;
}
.status-evaluated {
color: #52c41a;
}
.status-rejected {
color: #f5222d;
}
.status-default {
color: #999;
}
}
.evaluate-time {
color: #999;
}
}
/* ===== 空状态样式 ===== */
:deep(.van-empty) {
padding: 60px 0;
}
</style>

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

@ -137,11 +137,27 @@ const initMessageList = () => {
{
id: 1,
title: '普法服务',
desc: '最新一条普法信息标题',
desc: '普法服务信息',
time: '2026-04-15 10:07',
icon: 'law',
iconBg: 'icon-blue',
unreadCount: messageStats.value.pffwCount,
},{
id: 2,
title: '计划通知',
desc: '计划通知信息',
time: '2026-04-15 10:07',
icon: 'law',
iconBg: 'icon-blue',
unreadCount: messageStats.value.jhtzcount,
},{
id: 3,
title: '执法评价',
desc: '执法评价信息',
time: '2026-04-15 10:07',
icon: 'law',
iconBg: 'icon-blue',
unreadCount: messageStats.value.zfpjcount,
},
];
};
@ -262,6 +278,16 @@ const onMessageClick = (item) => {
router.push({
path: '/enforcement/lawServiceList',
});
} else if (item.title === '计划通知') {
sessionStorage.setItem('messageReturnTab', '0');
router.push({
path: '/enforcement/planNoticeList',
});
} else if (item.title === '执法评价') {
sessionStorage.setItem('messageReturnTab', '0');
router.push({
path: '/enforcement/enforcementEvaluateList',
});
} else {
showToast(`点击了:${item.title}`);
}

297
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue

@ -0,0 +1,297 @@
<template>
<div class="plan-notice-page">
<!-- 顶部导航栏 -->
<van-nav-bar title="计划通知" left-text="返回" left-arrow @click-left="onClickLeft">
</van-nav-bar>
<!-- 搜索栏 -->
<div class="search-bar">
<van-search v-model="searchText" show-action placeholder="请输入计划名称/单位" clearable clear-icon="clear"
clear-trigger="always" @clear="onClear" @search="onSearch">
<template #action>
<div @click="onSearch">搜索</div>
</template>
</van-search>
</div>
<!-- 列表区域 -->
<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-empty v-if="finished && list.length === 0" description="暂无计划通知" />
<div class="plan-card" v-for="item in list" :key="item.id">
<div class="card-header">
<van-icon name="bell" class="bell-icon" />
<span class="plan-title">{{ item.checkItemText || item.checkItem }}</span>
</div>
<div class="card-content">
<div class="info-row">
<span class="label">执法单位:</span>
<span class="value">{{ item.bureauDeptName || item.lawEnforcement }}</span>
</div>
<div class="info-row">
<span class="label">执法区域:</span>
<span class="value">{{ item.unitCheck }}</span>
</div>
<div class="info-row">
<span class="label">发布时间:</span>
<span class="value">{{ item.checkTime }}</span>
</div>
<div class="info-row">
<span class="label">附件:</span>
<span class="value"></span>
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</div>
</template>
<script setup name="planNoticeList">
import { ref, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import { showToast } from 'vant';
import 'vant/es/toast/style';
import { getLawNoticeList } from '@/api/enforcement/index';
const router = useRouter();
// ========== 列表状态 ==========
const list = ref([]);
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const searchText = ref('');
const pageNum = ref(1);
const pageSize = ref(10);
// ========== 加载数据 ==========
const fetchList = () => {
const params = {
pageNum: pageNum.value,
pageSize: pageSize.value,
planName: searchText.value || undefined,
};
getLawNoticeList(params, (res) => {
if (res.code === 200) {
const rows = res.rows || [];
const total = res.total;
if (refreshing.value) {
list.value = Array.isArray(rows) ? rows : [];
refreshing.value = false;
} else {
list.value = [...list.value, ...(Array.isArray(rows) ? rows : [])];
}
if (!Array.isArray(rows) || rows.length === 0 || list.value.length >= total) {
finished.value = true;
} else {
pageNum.value++;
}
loading.value = false;
} else {
finished.value = true;
loading.value = false;
refreshing.value = false;
showToast(res.msg || '加载失败');
}
}, () => {
finished.value = true;
loading.value = false;
refreshing.value = false;
showToast('网络请求失败');
});
};
// ========== 触底加载 ==========
const onLoad = () => {
if (refreshing.value) return;
fetchList();
};
// ========== 下拉刷新 ==========
const onRefresh = () => {
pageNum.value = 1;
list.value = [];
finished.value = false;
loading.value = true;
fetchList();
};
// ========== 清除搜索 ==========
const onClear = () => {
searchText.value = '';
onSearch();
};
// ========== 搜索 ==========
const onSearch = () => {
pageNum.value = 1;
list.value = [];
finished.value = false;
loading.value = true;
fetchList();
};
// ========== 返回上一页 ==========
const onClickLeft = () => {
router.back();
};
// ========== 组件挂载时加载数据 ==========
onMounted(() => {
// fetchList();
});
</script>
<style lang="less" scoped>
.plan-notice-page {
height: 100%;
display: flex;
flex-direction: column;
background-color: #ebf3fb;
}
/* ===== 导航栏样式 ===== */
:deep(.van-nav-bar) {
background-color: #fff;
}
:deep(.van-nav-bar__title) {
font-size: 17px;
font-weight: 600;
color: #333;
}
:deep(.van-nav-bar__text) {
font-size: 15px;
color: #333;
}
:deep(.van-nav-bar .van-icon) {
color: #333;
}
/* ===== 搜索栏样式 ===== */
:deep(.van-search) {
background: #fff;
padding: 12px 16px;
margin-bottom: -1px;
}
:deep(.van-search__content) {
height: 0.9rem;
border: 1px solid #ececec;
border-radius: 0.15rem 0 0 0.15rem;
}
:deep(.van-search__action) {
margin: 0 3% 0 0;
width: 10%;
height: 0.9rem;
background: #1367fe;
border: 1px solid #1367fe;
border-radius: 0 0.15rem 0.15rem 0;
color: #fff;
text-align: center;
line-height: 0.9rem;
}
/* ===== 列表容器 ===== */
.list-container {
flex: 1;
overflow-y: auto;
position: relative;
padding-bottom: 60px;
margin: 10px;
}
/* ===== 卡片样式 ===== */
.plan-card {
background: #fff;
border-radius: 10px;
padding: 15px;
margin-bottom: 15px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.card-header {
display: flex;
align-items: center;
margin-bottom: 12px;
}
.bell-icon {
color: #2d94fa;
font-size: 18px;
margin-right: 8px;
}
.plan-title {
font-size: 16px;
font-weight: bold;
color: #333;
flex: 1;
line-height: 1.4;
}
.card-content {
padding-left: 28px;
}
.info-row {
display: flex;
margin-bottom: 8px;
font-size: 14px;
color: #666;
line-height: 1.6;
.label {
color: #000;
min-width: 80px;
}
.value {
flex: 1;
color: #999;
}
}
.attachments {
margin-top: 8px;
}
.attachment-item {
display: flex;
font-size: 14px;
color: #666;
line-height: 1.6;
.label {
color: #999;
min-width: 80px;
}
.attachment-link {
flex: 1;
color: #2d94fa;
text-decoration: underline;
word-break: break-all;
}
.no-attachment {
flex: 1;
color: #999;
}
}
/* ===== 空状态样式 ===== */
:deep(.van-empty) {
padding: 60px 0;
}
</style>

66
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/program/components/ProgramCreate.vue

@ -59,7 +59,8 @@
:rules="[{ required: true, message: '请输入执法区域' }]" />
<div class="file-upload">
<div class="file-upload-center">
<label>附&nbsp; &nbsp; &nbsp; &nbsp;件</label> <span>(仅限PDF文档,5MB以下)</span>
<label><span class="file-required">*</span> 附&nbsp; &nbsp; &nbsp; &nbsp;件</label>
<span>(仅限PDF文档,5MB以下)</span>
<span class="down-mod"><van-icon name="upgrade" /><a @click="downloadFile">模板下载</a></span>
</div>
<van-uploader v-model="data.fileListObj" max-count="1" :max-size="5 * 1024 * 1024" class="file"
@ -178,6 +179,11 @@ const submitData = reactive({
})
const submit = () => {
// 检查附件是否上传(必填)
if (!data.fileListObj || data.fileListObj.length === 0) {
showToast('请上传PDF格式附件(5MB以下)');
return;
}
data.showIsPublish = true;
}
@ -235,7 +241,44 @@ const onFailed = (errorInfo) => {
};
const downloadFile = () => {
showToast('模板下载功能开发中');
// var url = 'http://127.0.0.1:85/profile//EnforcementInspectionPlanTemplate.xlsx';
var url = 'http://jdm.szssfj.cn/jdmApi/profile//EnforcementInspectionPlanTemplate.xlsx';
// var url = 'http://10.132.108.3:85/profile//EnforcementInspectionPlanTemplate.xlsx';
// window.location.href = url;
window.open(url);
// console.log(url);
// szyptGetToken(param, success => {
// let resMsg = success.data;
// console.log(resMsg);
// wx.config({
// // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
// debug: false,
// // 必填,公众号的唯一标识
// appId: resMsg.corpid,
// // 必填,生成签名的时间戳
// timestamp: resMsg.timestamp,
// // 必填,生成签名的随机串
// nonceStr: resMsg.nonceStr,
// // 必填,签名,见附录1
// signature: resMsg.signature,
// // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
// jsApiList: ["scanQRCode"],
// });
// wx.ready(() => {
// //微信扫一扫请求操作
// wx.downloadImage({
// serverId: '', // 需要下载的图片的服务器端ID,由uploadImage接口获得
// isShowProgressTips: 1, // 默认为1,显示进度提示
// success: function (res) {
// var localId = res.localId; // 返回图片下载后的本地ID
// }
// });
// });
// wx.error((res) => {
// console.log("获取失败");
// });
// }, error => {
// });
}
const uploadFiles = (file) => {
@ -271,18 +314,18 @@ const onOversize = () => {
onMounted(() => {
submitData.planName = "行政执法计划";
nameObj.planName = '行政执法计划';
// 从缓存获取用户信息
submitData.userId = commonStore.userId || "";
submitData.deptId = commonStore.deptId || "";
// 从缓存获取执法单位信息
submitData.enforcementDepartment = commonStore.bureauUnitName || "";
submitData.enforcementDepartmentId = commonStore.bureauUnitId || "";
submitData.bureauDeptName = commonStore.bureauUnitName || "";
submitData.bureauDeptId = commonStore.bureauUnitId || "";
nameObj.bureauDept = commonStore.bureauUnitName || '';
currentDate();
});
@ -373,6 +416,10 @@ const dateQuarterOnConfirm = ({ selectedOptions }) => {
color: #323233;
position: relative;
.file-required {
color: red;
}
label {
font-weight: 500;
margin-right: 8px;
@ -473,15 +520,16 @@ const dateQuarterOnConfirm = ({ selectedOptions }) => {
.popcont {
width: 65%;
background: linear-gradient(180deg, #b0dff7 0%, #f2f7fa 40%, #f2f7fa 50%, #ffffff 100%);
background: linear-gradient(180deg, #b0dff7 0%, #f2f7fa 40%, #f2f7fa 50%, #ffffff 100%);
border-radius: 12px;
padding: 24px;
.van-cell-group-title {
display: flex;
justify-content: center;
padding-left: 10px;
:deep(.van-radio__label){
justify-content: center;
padding-left: 10px;
:deep(.van-radio__label) {
font-size: 14px;
font-weight: 500;
}

333
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/program/components/ProgramQuery.vue

@ -1,15 +1,8 @@
<template>
<div class="query-container">
<!-- 搜索栏 -->
<van-search
v-model="querySearchText"
show-action
placeholder="请输入计划名称/执法单位/区域查询"
clearable="true"
clear-icon="clear"
clear-trigger="always"
@clear="onQueryClear"
@search="onQuerySearch">
<van-search v-model="querySearchText" show-action placeholder="请输入计划名称/执法单位/区域查询" clearable="true"
clear-icon="clear" clear-trigger="always" @clear="onQueryClear" @search="onQuerySearch">
<template #action>
<div @click="onQuerySearch">搜索</div>
</template>
@ -54,17 +47,24 @@
<p>{{ item.planName }}</p>
</div>
<div class="card_box_span">
<p><label class="card_box_label">执法单位:</label> <span>{{ item.enforcementDepartment }}</span></p>
<p><label class="card_box_label">执法单位:</label> <span>{{ item.enforcementDepartment
}}</span>
</p>
</div>
<div class="card_box_span">
<p><label class="card_box_label">执法区域:</label> <span>{{ item.enforcementArea }}</span></p>
<p><label class="card_box_label">执法区域:</label> <span>{{ item.enforcementArea
}}</span></p>
</div>
<div class="card_box_span">
<p><label class="card_box_label">附&nbsp; &nbsp; &nbsp; &nbsp;件:</label> <a style="color: #2b75fd;" v-if="item.fileList && item.fileList.length > 0">{{ item.fileList[0].fileName }}</a><span v-else>无</span></p>
<p><label class="card_box_label">附&nbsp; &nbsp; &nbsp; &nbsp;件:</label> <a
style="color: #2b75fd;" @click="toPdfView(null==item.fileList?'':item.fileList[0].fileUrl)" v-if="item.fileList && item.fileList.length > 0">{{
item.fileList[0].fileName }}</a><span v-else>无</span></p>
</div>
<div class="btn-list">
<a v-if="item.isPublish == 0" @click.stop="updatePublish(item.id, 1)"><van-icon name="passed" />公开</a>
<a v-if="item.isPublish == 1" @click.stop="updatePublish(item.id, 0)"><van-icon name="close" />取消公开</a>
<a v-if="item.isPublish == 0" @click.stop="updatePublish(item.id, 1)"><van-icon
name="passed" />公开</a>
<a v-if="item.isPublish == 1" @click.stop="updatePublish(item.id, 0)"><van-icon
name="close" />取消公开</a>
</div>
</div>
</van-swipe-cell>
@ -82,172 +82,181 @@
</template>
<script setup name="ProgramQuery">
import {showToast, showSuccessToast, showFailToast} from 'vant';
import {ref, onMounted} from "vue";
import {selectInspectionProgramList, updateInspectionProgramPublish} from '@/api/enforcement/index';
// 时间类型映射
const getTimeTypeText = (type) => {
const map = {
'year': '年度',
'quarter': '季度',
'month': '月度'
};
return map[type] || '';
import { showToast, showSuccessToast, showFailToast } from 'vant';
import { ref, onMounted } from "vue";
import { selectInspectionProgramList, updateInspectionProgramPublish } from '@/api/enforcement/index';
// 时间类型映射
const getTimeTypeText = (type) => {
const map = {
'year': '年度',
'quarter': '季度',
'month': '月度'
};
return map[type] || '';
};
const querySearchText = ref('');
const queryDateType = ref(null);
const querySearchDate = ref('');
const queryRefreshing = ref(false);
const queryLoading = ref(false);
const queryFinished = ref(false);
const queryList = ref([]);
const queryShowDatePicker = ref(false);
const queryCurrentDate = ref(['2026', '05']);
const queryDateShow = ref(false);
const queryDateSearch = ref('');
const queryPageNum = ref(1);
const queryPageSize = ref(10);
const fetchQueryList = () => {
queryLoading.value = true;
const params = {
pageNum: queryPageNum.value,
pageSize: queryPageSize.value,
searchText: querySearchText.value || '',
searchType: 'plan'
};
const querySearchText = ref('');
const queryDateType = ref(null);
const querySearchDate = ref('');
const queryRefreshing = ref(false);
const queryLoading = ref(false);
const queryFinished = ref(false);
const queryList = ref([]);
const queryShowDatePicker = ref(false);
const queryCurrentDate = ref(['2026', '05']);
const queryDateShow = ref(false);
const queryDateSearch = ref('');
const queryPageNum = ref(1);
const queryPageSize = ref(10);
const fetchQueryList = () => {
queryLoading.value = true;
const params = {
pageNum: queryPageNum.value,
pageSize: queryPageSize.value,
searchText: querySearchText.value || '',
searchType:'plan'
};
// 根据筛选类型传递不同的时间参数
if (queryDateType.value === 'year' || queryDateType.value === 'quarter' || queryDateType.value === 'month') {
params.timeType = queryDateType.value;
} else if (queryDateType.value === 9) {
params.timeType = querySearchDate.value;
}
selectInspectionProgramList(params, (res) => {
queryLoading.value = false;
console.log('查询执法记录列表成功:', res);
if (res.code === 200) {
const data = res.rows;
if (data && data.length > 0) {
queryList.value = [...queryList.value, ...data];
// 判断是否还有更多数据
if (data.length === 0 || queryList.value.length >= data.total) {
queryFinished.value = true;
} else {
queryPageNum.value++;
}
} else {
// 根据筛选类型传递不同的时间参数
if (queryDateType.value === 'year' || queryDateType.value === 'quarter' || queryDateType.value === 'month') {
params.timeType = queryDateType.value;
} else if (queryDateType.value === 9) {
params.timeType = querySearchDate.value;
}
selectInspectionProgramList(params, (res) => {
queryLoading.value = false;
console.log('查询执法记录列表成功:', res);
if (res.code === 200) {
const data = res.rows;
if (data && data.length > 0) {
queryList.value = [...queryList.value, ...data];
// 判断是否还有更多数据
if (data.length === 0 || queryList.value.length >= data.total) {
queryFinished.value = true;
} else {
queryPageNum.value++;
}
} else {
queryFinished.value = true;
showToast(res.message || '查询失败');
}
}, (err) => {
queryLoading.value = false;
} else {
queryFinished.value = true;
showToast('查询失败');
});
}
showToast(res.message || '查询失败');
}
}, (err) => {
queryLoading.value = false;
queryFinished.value = true;
showToast('查询失败');
});
}
const onQueryRefresh = () => {
queryRefreshing.value = true;
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
setTimeout(() => {
queryRefreshing.value = false;
}, 1000);
}
const onQueryRefresh = () => {
queryRefreshing.value = true;
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
setTimeout(() => {
queryRefreshing.value = false;
}, 1000);
}
const onQueryLoad = () => {
if (queryRefreshing.value) return;
fetchQueryList();
}
const onQueryLoad = () => {
if (queryRefreshing.value) return;
fetchQueryList();
}
const onQuerySearch = () => {
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
}
const onQuerySearch = () => {
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
}
const onQueryClear = () => {
queryDateType.value = null;
querySearchDate.value = '';
queryDateShow.value = false;
queryDateSearch.value = '';
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
}
const onQueryClear = () => {
queryDateType.value = null;
querySearchDate.value = '';
queryDateShow.value = false;
queryDateSearch.value = '';
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
}
const querySearchDateType = (type) => {
queryDateType.value = type;
querySearchDate.value = '';
queryDateShow.value = false;
queryDateSearch.value = '';
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
}
const querySearchDateType = (type) => {
queryDateType.value = type;
querySearchDate.value = '';
queryDateShow.value = false;
queryDateSearch.value = '';
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
}
const openQueryDatePicker = () => {
queryDateType.value = 9;
queryShowDatePicker.value = true;
}
const openQueryDatePicker = () => {
queryDateType.value = 9;
queryShowDatePicker.value = true;
}
const onQueryDateConfirm = (value) => {
queryDateSearch.value = value.selectedValues[0] + "/" + value.selectedValues[1];
querySearchDate.value = value.selectedValues[0] + "-" + value.selectedValues[1];
queryDateShow.value = true;
queryShowDatePicker.value = false;
queryDateType.value = 9;
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
}
const onQueryDateConfirm = (value) => {
queryDateSearch.value = value.selectedValues[0] + "/" + value.selectedValues[1];
querySearchDate.value = value.selectedValues[0] + "-" + value.selectedValues[1];
queryDateShow.value = true;
queryShowDatePicker.value = false;
queryDateType.value = 9;
queryList.value = [];
queryFinished.value = false;
queryPageNum.value = 1;
fetchQueryList();
}
const updatePublish = (id, isPublish) => {
const params = {
id: id,
isPublish: isPublish
};
updateInspectionProgramPublish(params, (res) => {
if (res.code === 200) {
if (isPublish === 1) {
showSuccessToast('已公开');
} else {
showSuccessToast('已取消公开');
}
const item = queryList.value.find(item => item.id === id);
if (item) {
item.isPublish = isPublish;
}
const updatePublish = (id, isPublish) => {
const params = {
id: id,
isPublish: isPublish
};
updateInspectionProgramPublish(params, (res) => {
if (res.code === 200) {
if (isPublish === 1) {
showSuccessToast('已公开');
} else {
showFailToast(res.message || '操作失败');
showSuccessToast('已取消公开');
}
}, (err) => {
showFailToast('操作失败');
});
}
onMounted(() => {
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0');
queryDateSearch.value = `${year}/${month}`;
fetchQueryList();
const item = queryList.value.find(item => item.id === id);
if (item) {
item.isPublish = isPublish;
}
} else {
showFailToast(res.message || '操作失败');
}
}, (err) => {
showFailToast('操作失败');
});
}
const toPdfView = (url) => {
console.log(url)
router.push(
{
path: "/pdfPngPreview",
query: {
url: url
}
});
}
onMounted(() => {
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0');
queryDateSearch.value = `${year}/${month}`;
fetchQueryList();
});
</script>
<style lang="less" scoped>
@ -264,6 +273,7 @@
padding-left: 0.27rem;
margin-top: 0.27rem;
align-items: end;
.search-btn {
width: 15%;
height: 90%;
@ -286,6 +296,7 @@
flex-direction: row;
align-items: end;
position: relative;
.date-select {
margin: 3% 0 0 4%;
color: #c1bfbf;

10
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue

@ -276,15 +276,15 @@ const handleScanResult = (resultStr) => {
if (res.code === 200) {
const data = res.data;
console.log('企业信息查询成功:', data);
if (!data.qrCodeValid) {
showFailToast(data.qrCodeMessage || '二维码已过期');
}
// if (!data.qrCodeValid) {
// showFailToast(data.qrCodeMessage || '二维码已过期');
// }
// 将企业信息存入 sessionStorage,预览页直接使用,无需再调接口
sessionStorage.setItem('enterpriseScanData', JSON.stringify(data));
// 跳转企业详情预览页,携带执法类型参数
// 跳转企业详情预览页,携带执法类型参数和企业编号
router.push({
path: '/enforcement/enterpriseScanPreview',
query: { type: enforceType }
query: { type: enforceType, enterpriseNumber: data.enterpriseNumber }
});
} else {
showFailToast(res.msg || '查询企业信息失败');

2
zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-test

@ -3,4 +3,4 @@ VITE_PORT = 12002
VITE_BASE_URL = '/api'
VITE_PROXY_TARGET = 'http://139.186.148.21:8080'
VITE_DEFAULT_LOGIN = '/enforcement/login'
VITE_APP_ENV = 'test'
VITE_APP_ENV = 'dev'

2
zdxt-web-client/zdxt-efcode-enterprise-app/src/api/enterprise/index.js

@ -74,7 +74,7 @@ export const getComplaintDisposalProgress = (params, success, error) => _get(ent
export const addComplaint = (params, success, error) => _post(enterpriseAppBaseUrl+"/complaint/add",params,success,error)
//查询字典数据(公共)
export const queryDict = (params, success, error) => _get("/common/dict/queryDict",params,success,error)
export const queryDict = (params, success, error) => _get("/system/dict/data/dictType",params,success,error)
//执法单位(部门)列表
export const getDeptList = (params, success, error) => _get("/enforcementcode/virtualUnit/list",params,success,error)

4
zdxt-web-client/zdxt-efcode-enterprise-app/vite-env/.env.enterprise-dev

@ -2,8 +2,8 @@
VITE_PORT = 12001
VITE_PROXY_TARGET = 'http://139.186.148.21:8080'
# 直接访问后端端口,不通过代理
VITE_BASE_URL = 'http://localhost:8080'
VITE_BASE_URL = 'http://139.186.148.21:8080'
# 附件/图片等静态资源的后端地址(直接访问,不走 /api 代理)
VITE_FILE_URL = 'http://localhost:8080'
VITE_FILE_URL = 'http://139.186.148.21:8080'
VITE_DEFAULT_LOGIN = '/enterprise/login'
VITE_APP_ENV = 'dev'

Loading…
Cancel
Save