Browse Source

页面的接口调试

dev-V1.0.1
wangmingyong 5 months ago
parent
commit
316b265e12
  1. 16
      zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js
  2. 4
      zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue
  3. 161
      zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/RegisterPopups.vue
  4. 14
      zdxt-web-client/zdxt-efcode-enforcement-app/src/util/fileUpload.js
  5. 30
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementList.vue
  6. 18
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRegister.vue
  7. 80
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/statistics/statisticsAnalysis.vue
  8. 6
      zdxt-web-client/zdxt-efcode-enforcement-app/vite.config.js

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

@ -26,9 +26,9 @@ export const submitEvaluate = (params, success, error) => _post(baseUrl + "/ente
// region 执法登记模块
export const queryEnforcementRegistrationPageList = (params, success, error) => _get(baseUrl + "/enforcement_registration/queryEnforcementRegistrationPageList", params, success, error);
export const queryEnforcementRegistrationPageList = (params, success, error) => _get(baseUrl + "/enfRegistration/list", params, success, error);
export const getEnforcementRegistrationDetailById = (params, success, error) => _get(baseUrl + "/enforcement_registration/queryDetailById", params, success, error);
export const getEnforcementRegistrationDetailById = (params, success, error) => _get(baseUrl + "/enfRegistration/enfLawCasedetail", params, success, error);
export const getEducationServicesList = (params, success, error) => _get(baseUrl + "/enforcementcode/educationServices/list", params, success, error);
@ -45,7 +45,7 @@ export const queryXzcfList = (enterpriseNumber, success, error) => _get(baseUrl
export const queryXzqzList = (enterpriseNumber, success, error) => _get(baseUrl + "/caseInfo/queryXzqzList", { c301010: enterpriseNumber }, success, error);
// 执法依据列表
export const queryAccordingList = (params, success, error) => _get(baseUrl + "/according//list", params, success, error);
export const queryAccordingList = (params, success, error) => _get(baseUrl + "/according/list", params, success, error);
export const queryEnfRegistrationList = (params, success, error) => _get(baseUrl + "/enfRegistration/queryList", params, success, error);
@ -65,6 +65,9 @@ export const queryEnforcementNoticeList = (params, success, error) => _post(base
export const queryUsersByPage = (params, success, error) => _post(baseUrl + "/system/queryUsersByPage", params, success, error);
// 获取部门列表
export const queryDeptList = (params, success, error) => _post("/app-enf/system/dept", params, success, error);
// endregion
// region 首页模块
@ -75,6 +78,13 @@ export const getCarouselBannerList = (params, success, error) => _get(baseUrl +
// endregion
// region 统计分析模块
// 综合分析数据
export const getComprehensiveAnalysis = (params, success, error) => _get(baseUrl + "/appComprehensiveAnalysis/whole", params, success, error);
// endregion
// region 公共模块
// 查询字典数据(公共)

4
zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue

@ -19,11 +19,11 @@
</div>
<div v-for="(person, index) in additionalPersons" :key="index" class="person-item-add">
<span @click="$emit('openPersonPicker', index)" :class="{ placeholder: !person.name }">
{{ person.name || '请选择' }}
{{ person.name || '请选择' }}{{ person.id || '' }}
</span>
<van-icon name="close" class="remove-icon" @click="$emit('removePerson', index)" />
</div>
<div class="person-add">
<div class="person-add" v-if="additionalPersons.length < 2">
<span @click="$emit('openPersonPicker', -1)">请选择</span>
<van-icon name="add-o" class="add-circle-icon" @click="$emit('addPerson')" />
</div>

161
zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/RegisterPopups.vue

@ -30,7 +30,8 @@
<span class="popup-title">预告查询</span>
<van-icon name="cross" class="close-icon" @click="localNoticePopup = false" />
</div>
<van-list v-model:loading="loading" :finished="finished" :immediate-check="false" finished-text="没有更多了" @load="loadNotices" class="popup-content">
<van-list v-model:loading="loading" :finished="finished" :immediate-check="false" finished-text="没有更多了"
@load="loadNotices" class="popup-content">
<div v-for="(notice, index) in noticeList" :key="index" class="notice-item">
<div class="notice-info">
<div class="notice-matter">执法事项:{{ notice.checkItem }}</div>
@ -68,14 +69,14 @@
@clear="clearPersonSearch" />
<van-button class="search-btn" type="primary" @click="handlePersonSearch">搜索</van-button>
</div>
<div class="person-list">
<van-list v-model:loading="personLoading" :finished="personFinished" :immediate-check="false" finished-text="没有更多了" @load="loadPersonList" class="person-list">
<div v-for="(person, index) in personList" :key="index" class="person-list-item"
@click="$emit('selectPerson', person)">
@click="handleSelectPerson(person)">
<div class="person-name">{{ person.userName }}</div>
<div class="person-id">执法证件号:{{ person.isShowCardId }}</div>
</div>
<van-empty v-if="personList.length === 0" description="暂无数据" />
<div class="person-id">执法证件号:{{ person.phonenumber }}</div>
</div>
<van-empty v-if="personList.length === 0 && !personLoading" description="暂无数据" />
</van-list>
</div>
</van-popup>
@ -91,9 +92,10 @@
@clear="clearBasisSearch" />
<van-button class="search-btn" type="primary" @click="handleBasisSearch">搜索</van-button>
</div>
<van-list v-model:loading="basisLoading" :finished="basisFinished" :immediate-check="false" finished-text="没有更多了" @load="loadBasisList" class="enforcement-basis-list">
<van-list v-model:loading="basisLoading" :finished="basisFinished" :immediate-check="false"
finished-text="没有更多了" @load="loadBasisList" class="enforcement-basis-list">
<div v-for="(item, index) in enforcementBasisList" :key="index" class="basis-list-item"
@click="$emit('selectBasis', item)">
@click="handleSelectBasis(item)">
<div class="basis-name">{{ item.name || item.lawName }}</div>
</div>
<van-empty v-if="enforcementBasisList.length === 0 && !basisLoading" description="暂无数据" />
@ -109,12 +111,13 @@
<van-icon name="cross" class="close-icon" @click="localEntrustedAgencyPopup = false" />
</div>
<div class="search-bar">
<van-search v-model="agencySearchKeyword" placeholder="请输入单位名称"
@search="handleAgencySearch" @clear="clearAgencySearch" />
<van-search v-model="agencySearchKeyword" placeholder="请输入单位名称" @search="handleAgencySearch"
@clear="clearAgencySearch" />
<van-button class="search-btn" type="primary" @click="handleAgencySearch">搜索</van-button>
</div>
<div class="agency-list">
<div v-for="(item, index) in agencyList" :key="index" class="agency-list-item" @click="handleSelectAgency(item.name)">
<div v-for="(item, index) in agencyList" :key="index" class="agency-list-item"
@click="handleSelectAgency(item.name)">
<van-radio v-model="selectedAgency" :name="item.name" />
<span class="agency-name">{{ item.name }}</span>
</div>
@ -128,7 +131,7 @@
<script setup name="RegisterPopups">
import { ref, reactive, watch, computed, onMounted } from 'vue';
import { showToast } from 'vant';
import { queryEnforcementNoticeList, queryUsersByPage, queryAccordingList } from '@/api/enforcement/index';
import { queryEnforcementNoticeList, queryUsersByPage, queryAccordingList, queryDeptList } from '@/api/enforcement/index';
import { loadDict } from '@/util/dictUtil';
const props = defineProps({
@ -258,19 +261,19 @@ const personSearchKeyword = ref('');
const personList = ref([]);
const personPageNum = ref(1);
const personPageSize = ref(10);
const personHasMore = ref(true);
const personLoading = ref(false);
const personFinished = ref(false);
const initPersonList = () => {
personFinished.value = false;
personPageNum.value = 1;
personHasMore.value = true;
personList.value = [];
personLoading.value = false;
loadPersonList();
};
const loadPersonList = () => {
if (personLoading.value || !personHasMore.value) return;
if (personLoading.value || personFinished.value) return;
personLoading.value = true;
// 获取已选人员的 userId,用逗号拼接
@ -283,45 +286,54 @@ const loadPersonList = () => {
};
queryUsersByPage(params, (res) => {
if (res.code === 200 && res.rows) {
const data = res.rows;
if (Array.isArray(data)) {
// 转换数据格式,确保 id 和 name 字段存在
if (res.code === 200 || res.code === 0) {
const data = res.data || res.rows || [];
const total = res.total || res.count || 0;
if (personPageNum.value === 1) {
personList.value = data;
} else {
personList.value = [...personList.value, ...data];
}
// 判断是否还有更多数据
personHasMore.value = data.length >= personPageSize.value;
if (total <= personPageSize.value * personPageNum.value) {
personFinished.value = true;
} else {
personHasMore.value = false;
personPageNum.value++;
}
} else {
personHasMore.value = false;
personFinished.value = true;
}
personLoading.value = false;
}, () => {
personLoading.value = false;
personFinished.value = true;
});
};
const handlePersonSearch = () => {
personFinished.value = false;
personPageNum.value = 1;
personHasMore.value = true;
personList.value = [];
loadPersonList();
};
const clearPersonSearch = () => {
personSearchKeyword.value = '';
personFinished.value = false;
personPageNum.value = 1;
personHasMore.value = true;
personList.value = [];
loadPersonList();
};
const handleSelectPerson = (person) => {
// 转换字段名称,将接口返回的 userName 转换为 name,phonenumber 转换为 id
emit('selectPerson', {
name: person.userName || person.name || '',
id: person.phonenumber || person.id || ''
});
localPersonPopup.value = false;
};
watch(localPersonPopup, (val) => {
if (val) {
personSearchKeyword.value = '';
@ -332,8 +344,8 @@ watch(localPersonPopup, (val) => {
// 监听已选人员变化,重新加载列表
watch(() => props.selectedPersons, () => {
if (localPersonPopup.value) {
personFinished.value = false;
personPageNum.value = 1;
personHasMore.value = true;
personList.value = [];
loadPersonList();
}
@ -348,7 +360,7 @@ const basisPageNum = ref(1);
const basisPageSize = ref(10);
const loadBasisList = () => {
if (basisFinished.value) return;
basisLoading.value = true;
const params = {
pageNum: basisPageNum.value,
pageSize: basisPageSize.value,
@ -358,13 +370,15 @@ const loadBasisList = () => {
queryAccordingList(params, (res) => {
if (res.code === 200 || res.code === 0) {
const list = res.data || res.rows || [];
const total = res.total || res.count || 0;
if (basisPageNum.value === 1) {
enforcementBasisList.value = list;
} else {
enforcementBasisList.value = [...enforcementBasisList.value, ...list];
}
basisFinished.value = list.length < basisPageSize.value;
if (!basisFinished.value) {
if (total <= basisPageSize.value * basisPageNum.value) {
basisFinished.value = true;
} else {
basisPageNum.value++;
}
} else {
@ -372,6 +386,7 @@ const loadBasisList = () => {
showToast(res.msg || '获取执法依据失败');
basisFinished.value = true;
}
basisLoading.value = false;
}, (err) => {
basisLoading.value = false;
@ -382,14 +397,22 @@ const loadBasisList = () => {
};
const initBasisList = async () => {
basisLoading.value = false;
basisFinished.value = false;
basisPageNum.value = 1;
enforcementBasisList.value = [];
basisLoading.value = false;
await nextTick();
loadBasisList();
};
const handleSelectBasis = (basis) => {
// 转换字段名称,确保 name 字段存在
emit('selectBasis', {
name: basis.name || basis.lawName || ''
});
localBasisPopup.value = false;
};
const handleBasisSearch = () => {
initBasisList();
};
@ -412,31 +435,28 @@ const agencyList = ref([]);
const selectedAgency = ref('');
const initAgencyList = () => {
agencyList.value = [
{ name: '深圳市人民检察院' },
{ name: '深圳市发展和改革委员会' },
{ name: '深圳市人力资源和社会保障局' },
{ name: '深圳市文化广电旅游体育局' },
{ name: '深圳市宝安区发展和改革局' },
{ name: '深圳市宝安区教育局' },
{ name: '深圳市宝安区民政局' },
{ name: '深圳市宝安区西乡街道办事处' },
{ name: '深圳市宝安区福永街道办事处' },
{ name: '中共深圳市南山区委统一战线工作部' },
{ name: '深圳市龙岗区教育局' },
{ name: '深圳市南山区司法局' },
{ name: '深圳市南山区人力资源局' },
];
const params = {
deptName: agencySearchKeyword.value || undefined
};
queryDeptList(params, (res) => {
if (res.code === 200 || res.code === 0) {
const data = res.data || res.rows || [];
agencyList.value = data.map(item => ({
name: item.deptName || item.name || ''
}));
} else {
console.error('获取部门列表失败:', res.msg);
agencyList.value = [];
}
}, (err) => {
console.error('获取部门列表接口失败', err);
agencyList.value = [];
});
};
const handleAgencySearch = () => {
initAgencyList();
if (agencySearchKeyword.value.trim()) {
const keyword = agencySearchKeyword.value.toLowerCase();
agencyList.value = agencyList.value.filter(item =>
item.name.toLowerCase().includes(keyword)
);
}
};
const clearAgencySearch = () => {
@ -466,9 +486,7 @@ const loading = ref(false);
const finished = ref(false);
const loadNotices = () => {
if (finished.value) return;
// 从缓存中获取企业统一信用代码
loading.value = true;
let enterpriseNumber = '';
try {
const cached = sessionStorage.getItem('enterpriseScanData');
@ -489,20 +507,23 @@ const loadNotices = () => {
queryEnforcementNoticeList(params, (res) => {
if (res.code === 200) {
const data = res.rows || [];
const total = res.total || 0;
if (noticePage.value === 1) {
noticeList.value = data;
} else {
noticeList.value = [...noticeList.value, ...data];
}
console.log('获取预告列表成功:', data);
finished.value = data.length < noticePageSize.value;
if (!finished.value) {
if (total <= noticePage.value * noticePageSize.value) {
finished.value = true;
} else {
noticePage.value++;
}
} else {
console.error('获取预告列表失败:', res.msg);
finished.value = true;
}
loading.value = false;
}, (err) => {
loading.value = false;
finished.value = true;
@ -510,14 +531,17 @@ const loadNotices = () => {
});
};
watch(localNoticePopup, async (newVal) => {
if (newVal) {
const initNoticesList = async () => {
finished.value = false;
noticePage.value = 1;
noticeList.value = [];
loading.value = false;
finished.value = false;
await nextTick();
loadNotices();
};
watch(localNoticePopup, async (newVal) => {
if (newVal) {
initNoticesList();
}
});
</script>
@ -568,7 +592,7 @@ watch(localNoticePopup, async (newVal) => {
.person-search-popup,
.enforcement-basis-popup,
.entrusted-agency-popup {
height: 100%;
height: 99%;
display: flex;
flex-direction: column;
}
@ -580,6 +604,13 @@ watch(localNoticePopup, async (newVal) => {
flex: 1;
overflow-y: auto;
padding: 0 0.3rem;
min-height: 0;
}
.enforcement-basis-list {
:deep(.van-list) {
height: 100%;
}
}
@ -587,7 +618,7 @@ watch(localNoticePopup, async (newVal) => {
.enterprise-list-item,
.person-list-item,
.basis-list-item {
padding:20px 20px 14px 14px;
padding: 20px 20px 14px 14px;
border-bottom: 1px solid #f5f5f5;
&:active {

14
zdxt-web-client/zdxt-efcode-enforcement-app/src/util/fileUpload.js

@ -10,18 +10,22 @@ const uploadFile = (files,callback) => {
files.status = "uploading";
files.message = "上传中...";
files.status = "uploading";
// files.message = "上传中...";
// 需要使用 FormData 进行文件上传
let form = new FormData();
form.append("file", files.file);
// 获取 token(从 localStorage 或 sessionStorage 中获取)
const token = $globalStore.useCommon.token;
console.log(token);
axios({
method: "post",
url: baseUrl+ "/common/upload",
url: baseUrl+ "/app-enf/common/file/upload",
data: form,
// headers: {
// 'Content-Type': 'multipart/form-data'
// }
headers: {
'clientid': 'f0535c2a32ab4d0496ab9a699b2a7d36',
'Authorization': 'Bearer ' + token
}
})
.then((res) => {
files.status = "done";

30
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementList.vue

@ -131,6 +131,7 @@ const getEnforcerDisplay = (item) => {
// ========== 加载数据 ==========
const fetchList = () => {
loading.value = true;
const params = {
pageNum: pageNum.value,
pageSize: pageSize.value,
@ -149,26 +150,10 @@ const fetchList = () => {
}
queryEnforcementRegistrationPageList(params, (res) => {
// 兼容数组 / 包裹格式
let rows = [];
let total = 0;
let ok = true;
if (Array.isArray(res)) {
rows = res;
total = res.length;
} else if (res && Array.isArray(res.rows)) {
rows = res.rows;
total = res.total || rows.length;
ok = res.code ? res.code === 200 : true;
} else if (res && Array.isArray(res.data)) {
rows = res.data;
total = res.total || rows.length;
ok = res.code ? res.code === 200 : true;
} else if (res && res.code && res.code !== 200) {
ok = false;
}
if (res.code === 200 || res.code === 0) {
const rows = res.data || res.rows || [];
const total = res.total || res.count || 0;
if (ok) {
if (refreshing.value) {
list.value = rows;
refreshing.value = false;
@ -176,17 +161,16 @@ const fetchList = () => {
list.value = [...list.value, ...rows];
}
if (rows.length === 0 || list.value.length >= total) {
if (total <= pageSize.value * pageNum.value) {
finished.value = true;
} else {
pageNum.value++;
}
loading.value = false;
} else {
loading.value = false;
finished.value = true;
showToast(res.msg || '加载失败');
finished.value = true;
}
loading.value = false;
}, () => {
loading.value = false;
finished.value = true;

18
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRegister.vue

@ -146,7 +146,7 @@ const selectedPersonsList = computed(() => {
// 添加额外执法人员
additionalPersons.value.forEach(p => {
if (p.id || p.name) {
list.push({ id: p.id, name: p.name });
list.push({ id: p.id, name: p.name, });
}
});
return list;
@ -311,6 +311,14 @@ const buildSubmitPayload = () => {
.map(p => p.id)
.join(',');
// 任务来源:数字和中文名称
const lawEnforceCategory = categoryOptions.value.find(item => item.text === formData.category)?.value || '';
const lawEnforceCategoryText = formData.category || '';
// 执法类型:数字和中文名称
const checkCategory = taskSourceOptions.find(item => item.text === formData.taskSource)?.value || '';
const checkCategoryText = formData.taskSource || '';
return {
enterpriseName: enterpriseData.value.enterpriseName || '',
enterpriseNumber: enterpriseData.value.enterpriseNumber || '',
@ -319,7 +327,10 @@ const buildSubmitPayload = () => {
lawCertificateNumText: lawCertificateNumText,
lawEnforcerTwo: lawEnforcerTwo,
lawEnforcerIdTwo: lawEnforcerIdTwo,
lawEnforceCategory: formData.category || '',
lawEnforceCategory: lawEnforceCategory,
lawEnforceCategoryText: lawEnforceCategoryText,
checkCategory: checkCategory,
checkCategoryText: checkCategoryText,
hasUnion: formData.jointEnforcement || 0,
hasAuto: formData.entrustedEnforcement || 0,
lawEnforcement: useCommon.deptName || '',
@ -347,6 +358,7 @@ const handleSave = () => {
saveEnfRegistration(payload, (res) => {
if (res.code === 200 || res.code === 0) {
showSuccessToast('保存成功');
router.push('/enforcement/enforcementList');
} else {
showToast(res.msg || '保存失败');
}
@ -388,7 +400,7 @@ const onSubmit = () => {
submitEnfRegistration(payload, (res) => {
if (res.code === 200 || res.code === 0) {
showSuccessToast('提交成功');
router.back();
router.push('/enforcement/enforcementList');
} else {
showToast(res.msg || '提交失败');
}

80
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/statistics/statisticsAnalysis.vue

@ -121,6 +121,7 @@ import { ref, computed, shallowRef, watch } from 'vue';
import { useRouter } from 'vue-router';
import { showToast } from 'vant';
import 'vant/es/toast/style';
import { getComprehensiveAnalysis } from '@/api/enforcement/index';
const router = useRouter();
const maxDate = ref(new Date());
@ -330,16 +331,72 @@ const yearColumns = computed(() => {
// ========== 数据加载与动画 ==========
const loadStatistics = () => {
isLoading.value = true;
setTimeout(() => {
// 构建请求参数
const params = {
userType: userType.value, // 'personal' 或 'company'
period: period.value, // 'month', 'quarter', 'year', 'other'
};
// 根据周期类型添加具体参数
if (period.value === 'month') {
params.year = selectedMonth.value[0];
params.month = selectedMonth.value[1];
} else if (period.value === 'quarter') {
params.year = selectedQuarter.value[0];
params.quarter = selectedQuarter.value[1];
} else if (period.value === 'year') {
params.year = currentYear.value;
} else if (period.value === 'other' && selectedDateRange.value) {
const formatDate = (date) => {
const d = new Date(date);
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
};
params.startDate = formatDate(selectedDateRange.value[0]);
params.endDate = formatDate(selectedDateRange.value[1]);
}
getComprehensiveAnalysis(params, (res) => {
if (res.code === 200 || res.code === 0) {
const data = res.data || {};
statistics.value = {
totalCount: 11,
monthOverMonth: 266.67,
yearOverYear: 266.66,
jointLaw: { noticeCount: 8, entrustedCount: 0, evaluateCount: 8, complaintCount: 5 },
totalCount: data.totalCount || 0,
monthOverMonth: data.monthOverMonth || 0,
yearOverYear: data.yearOverYear || 0,
jointLaw: {
noticeCount: data.jointLaw?.noticeCount || 0,
entrustedCount: data.jointLaw?.entrustedCount || 0,
evaluateCount: data.jointLaw?.evaluateCount || 0,
complaintCount: data.jointLaw?.complaintCount || 0,
},
};
// 更新执法类别数据
if (data.lawCategoryList && Array.isArray(data.lawCategoryList)) {
lawCategoryList.value = data.lawCategoryList;
}
// 更新企业类别数据
if (data.enterpriseCategoryList && Array.isArray(data.enterpriseCategoryList)) {
enterpriseCategoryList.value = data.enterpriseCategoryList;
}
// 更新投诉类别数据
if (data.complaintCategoryList && Array.isArray(data.complaintCategoryList)) {
complaintCategoryList.value = data.complaintCategoryList;
}
startNumberAnimation();
} else {
showToast(res.msg || '加载失败');
}
isLoading.value = false;
}, (err) => {
console.error('获取综合分析数据失败', err);
showToast('网络请求失败');
isLoading.value = false;
}, 500);
});
};
const startNumberAnimation = () => {
@ -440,19 +497,19 @@ const onMonthConfirm = (value) => {
selectedMonth.value = value;
showToast(`已选择${periodDisplayText.value}`);
showMonthSelector.value = false;
loadStatistics();
};
const onQuarterConfirm = ({ selectedValues }) => {
// van-picker 多列模式下,confirm 回调参数是对象,包含 selectedValues 数组
if (Array.isArray(selectedValues)) {
selectedQuarter.value = selectedValues;
}
showToast(`已选择${periodDisplayText.value}`);
showQuarterSelector.value = false;
loadStatistics();
};
const onYearConfirm = (value) => {
// van-picker 单列模式下confirm回调参数是对象,包含selectedValues数组
const selectedValues = value.selectedValues || value;
if (typeof selectedValues === 'string') {
@ -464,6 +521,7 @@ const onYearConfirm = (value) => {
}
showToast(`已选择${periodDisplayText.value}`);
showYearSelector.value = false;
loadStatistics();
};
const onConfirm = (dates) => {
if (dates && dates.length === 2) {
@ -471,6 +529,7 @@ const onConfirm = (dates) => {
isFilterMode.value = true;
}
showFilterSelector.value = false;
loadStatistics();
};
// 筛选切换(使用通用函数)
const toggleFilterType = (type) => toggleFilter(selectedFilterType, type);
@ -486,6 +545,11 @@ import { onMounted } from 'vue';
onMounted(() => {
loadStatistics();
});
// 监听用户类型和周期变化,重新加载数据
watch([userType, period], () => {
loadStatistics();
});
</script>
<style lang="less" scoped>

6
zdxt-web-client/zdxt-efcode-enforcement-app/vite.config.js

@ -4,12 +4,12 @@ import { baseCfg, pluginCfg } from "./vite-config";
import basicSsl from '@vitejs/plugin-basic-ssl'
// ,basicSsl()
export default async ({ mode }) => {
const { VITE_BASE_URL, VITE_PORT } = loadEnv(mode, `${process.cwd()}/vite-env`);
const viteEnv = loadEnv(mode, `${process.cwd()}/vite-env`);
return defineConfig({
...baseCfg({ VITE_BASE_URL, VITE_PORT }),
...baseCfg(viteEnv),
plugins: [
vue(),
...await pluginCfg({ VITE_BASE_URL })],
...await pluginCfg(viteEnv)],
define: {'process.env':{}}
});
};

Loading…
Cancel
Save