diff --git a/src/api/business/cost/firm-reports-api.js b/src/api/business/cost/firm-reports-api.js index 568f88b..03917b0 100644 --- a/src/api/business/cost/firm-reports-api.js +++ b/src/api/business/cost/firm-reports-api.js @@ -59,6 +59,13 @@ export const firmReportsApi = { return getRequest('/firmReports/query'); }, + queryByQuarter: (year, quarter) => { + return getRequest(`/firmReports/queryByQuarter?year=${year}&quarter=${quarter}`); + }, + firmHasCostPermission: () => { + return getRequest('/firmReports/firmHasCostPermission'); + }, + /** * 查询本年度已经提交的收入 @author wzh */ diff --git a/src/api/business/penalty-apply/penalty-apply-api.js b/src/api/business/penalty-apply/penalty-apply-api.js index 36488ad..9f9f0fa 100644 --- a/src/api/business/penalty-apply/penalty-apply-api.js +++ b/src/api/business/penalty-apply/penalty-apply-api.js @@ -1,5 +1,5 @@ /** - * 无处罚证明申请主表 api 封装 + * 无处分证明申请主表 api 封装 * * @Author: wzh * @Date: 2026-01-07 21:36:44 @@ -9,11 +9,10 @@ import axios from 'axios'; import { postRequest, getRequest, getDownload } from '/@/lib/axios'; export const penaltyApplyApi = { - /** * 分页查询 @author wzh */ - queryPage : (param) => { + queryPage: (param) => { return postRequest('/penaltyApply/queryPage', param); }, @@ -21,48 +20,45 @@ export const penaltyApplyApi = { * 增加 @author wzh */ add: (param) => { - return postRequest('/penaltyApply/add', param); + return postRequest('/penaltyApply/add', param); }, /** * 修改 @author wzh */ update: (param) => { - return postRequest('/penaltyApply/update', param); + return postRequest('/penaltyApply/update', param); }, - /** * 删除 @author wzh */ delete: (id) => { - return getRequest(`/penaltyApply/delete/${id}`); + return getRequest(`/penaltyApply/delete/${id}`); }, /** * 批量删除 @author wzh */ batchDelete: (idList) => { - return postRequest('/penaltyApply/batchDelete', idList); + return postRequest('/penaltyApply/batchDelete', idList); }, /** - * 无处罚证明下载 @author wzh + * 无处分证明下载 @author wzh */ exportWordCertificate: (id) => { - return getDownload(`/wordCertificate/export/${id}`); + return getDownload(`/wordCertificate/export/${id}`); }, /** - * 预览无处罚证明 @author wzh + * 预览无处分证明 @author wzh */ - /** * 审核 @author wzh */ review: (param) => { - return postRequest('/penaltyApply/review', param); + return postRequest('/penaltyApply/review', param); }, - }; diff --git a/src/api/business/service-applications/service-applications-api.js b/src/api/business/service-applications/service-applications-api.js index 88028ca..357c7b4 100644 --- a/src/api/business/service-applications/service-applications-api.js +++ b/src/api/business/service-applications/service-applications-api.js @@ -205,4 +205,11 @@ export const serviceApplicationsApi = { exportFirmActivityStatistics: (params) => { return postDownload('/serviceApplications/export/firmActivityCount', params); }, + + /** + * 获取同律所已签署承诺书的合格同行律师列表 + */ + querySameFirmLawyers: () => { + return getRequest('/serviceApplications/querySameFirmLawyers'); + }, }; diff --git a/src/api/system/login-api.js b/src/api/system/login-api.js index 7cb5909..0c64f0c 100644 --- a/src/api/system/login-api.js +++ b/src/api/system/login-api.js @@ -51,4 +51,11 @@ export const loginApi = { getTwoFactorLoginFlag: () => { return getRequest('/login/getTwoFactorLoginFlag'); }, + + /** + * 获取初始密码提示 + */ + getInitialPassword: () => { + return getRequest('/login/getInitialPassword'); + }, }; diff --git a/src/assets/images/login/login-min.gif b/src/assets/images/login/login-min.gif index 2a7608b..e416181 100644 Binary files a/src/assets/images/login/login-min.gif and b/src/assets/images/login/login-min.gif differ diff --git a/src/assets/images/login/login.gif b/src/assets/images/login/login.gif index 15cb607..e416181 100644 Binary files a/src/assets/images/login/login.gif and b/src/assets/images/login/login.gif differ diff --git a/src/assets/images/login/loginnew.jpeg b/src/assets/images/login/loginnew.jpeg new file mode 100644 index 0000000..6b3c3b0 Binary files /dev/null and b/src/assets/images/login/loginnew.jpeg differ diff --git a/src/assets/images/login/loginold.gif b/src/assets/images/login/loginold.gif new file mode 100644 index 0000000..15cb607 Binary files /dev/null and b/src/assets/images/login/loginold.gif differ diff --git a/src/assets/images/login/mi1n11.gif b/src/assets/images/login/mi1n11.gif new file mode 100644 index 0000000..2a7608b Binary files /dev/null and b/src/assets/images/login/mi1n11.gif differ diff --git a/src/components/support/file-upload/index.vue b/src/components/support/file-upload/index.vue index 4c7dcc6..c09459b 100644 --- a/src/components/support/file-upload/index.vue +++ b/src/components/support/file-upload/index.vue @@ -240,19 +240,6 @@ // 图片类型的后缀名 const imgFileType = ['jpg', 'jpeg', 'png', 'gif','.PNG','.GIF','.JPG']; - // 重新修改图片展示字段 - const files = computed(() => { - let res = []; - if (props.defaultFileList && props.defaultFileList.length > 0) { - props.defaultFileList.forEach((element) => { - element.url = element.fileUrl; - element.name = element.fileName; - res.push(element); - }); - return res; - } - return res; - }); // -------------------- 逻辑 -------------------- const previewVisible = ref(false); @@ -292,14 +279,19 @@ return ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(previewFileType.value.toLowerCase()); }); + // 弹窗复用、异步查询附件时都重新构造列表;不能直接修改 props 中的文件对象。 watch( - files, + () => props.defaultFileList, (value) => { - fileList.value = value; + fileList.value = (value || []).map((element) => ({ + ...element, + uid: element.uid || element.fileId, + url: element.url || element.fileUrl, + name: element.name || element.fileName, + status: element.status || 'done', + })); }, - { - immediate: true, - } + { immediate: true, deep: true } ); const emit = defineEmits(['update:value', 'change']); diff --git a/src/components/system/service-count/excel-statistics-detail.vue b/src/components/system/service-count/excel-statistics-detail.vue index b0ce389..ed04f58 100644 --- a/src/components/system/service-count/excel-statistics-detail.vue +++ b/src/components/system/service-count/excel-statistics-detail.vue @@ -114,6 +114,7 @@ import { ref, reactive, computed, onMounted } from 'vue'; import { ExportOutlined, SearchOutlined, ReloadOutlined } from '@ant-design/icons-vue'; import { message } from 'ant-design-vue'; import { serviceApplicationsApi } from '/@/api/business/service-applications/service-applications-api'; +import { getRoleInfo } from '/@/utils/role-util'; // 接收父组件传递的参数 const props = defineProps({ @@ -338,6 +339,35 @@ async function handleExport() { } } +// 律所汇总导出(仅律协角色可见) +async function handleExportDepartment() { + if (tableData.value.length === 0) { + message.warning('暂无数据可导出'); + return; + } + + exportDepartmentLoading.value = true; + try { + console.log('开始导出律所汇总统计...'); + const exportParams = { + quarter: localQueryForm.quarter, + year: localQueryForm.year, + lawyerName: localQueryForm.lawyerName, + firmName: localQueryForm.firmName + }; + + // 调用律所汇总导出接口 + await serviceApplicationsApi.exportLawyerByDepartment(exportParams); + message.success('导出成功'); + console.log('律所汇总统计导出成功'); + } catch (error) { + message.error('导出失败'); + console.error('导出律所汇总统计失败:', error); + } finally { + exportDepartmentLoading.value = false; + } +} + onMounted(() => { initYearOptions(); // 如果没有传入数据,则自动查询 diff --git a/src/layout/components/side-expand-menu/sub-menu.vue b/src/layout/components/side-expand-menu/sub-menu.vue index ff46877..5bc22b9 100644 --- a/src/layout/components/side-expand-menu/sub-menu.vue +++ b/src/layout/components/side-expand-menu/sub-menu.vue @@ -15,7 +15,7 @@