-
-
- 导出Excel
-
+
+
+
+
+
+ {{ year }}
+
+
+
+
+ {{ quarter.label }}
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+ 重置
+
+
+
+
+
+ 导出
+
+
+
@@ -14,7 +41,7 @@
@@ -98,10 +125,11 @@
\ No newline at end of file
diff --git a/src/components/system/service-count/law-firm.vue b/src/views/business/erp/service/law-firm.vue
similarity index 98%
rename from src/components/system/service-count/law-firm.vue
rename to src/views/business/erp/service/law-firm.vue
index 1ff0a9e..ffc7aaa 100644
--- a/src/components/system/service-count/law-firm.vue
+++ b/src/views/business/erp/service/law-firm.vue
@@ -74,7 +74,7 @@ import { SearchOutlined, ReloadOutlined, DownloadOutlined, ArrowLeftOutlined } f
import { message } from 'ant-design-vue';
import { serviceApplicationsApi } from '/@/api/business/service-applications/service-applications-api';
import DepartmentTreeSelect from '/@/components/system/department-tree-select/index.vue';
-import FirmStatisticsDetail from './firm-statistics-detail.vue'; // 导入detail组件
+import FirmStatisticsDetail from '/@/views/business/erp/service/firm-statistics-detail.vue'; // 导入detail组件
// 响应式数据
const loading = ref(false);
diff --git a/src/views/business/erp/service/lawyer-service-report-statistics.vue b/src/views/business/erp/service/lawyer-service-report-statistics.vue
new file mode 100644
index 0000000..a87fb12
--- /dev/null
+++ b/src/views/business/erp/service/lawyer-service-report-statistics.vue
@@ -0,0 +1,549 @@
+
+
+
+
+
+
+
+
+
+ {{ year }}年
+
+
+
+
+
+
+ {{ quarter.label }}
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+ 律师活动统计报表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/business/erp/service/lawyer-statistics-detail.vue b/src/views/business/erp/service/lawyer-statistics-detail.vue
new file mode 100644
index 0000000..bef3ceb
--- /dev/null
+++ b/src/views/business/erp/service/lawyer-statistics-detail.vue
@@ -0,0 +1,378 @@
+
+
+
+
+
+
+
+
+ {{ year }}
+
+
+
+
+ {{ quarter.label }}
+
+
+
+
+
+ 查询
+
+
+
+ 重置
+
+
+
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ index + 1 }}
+
{{ item.lawyerName || '-' }}
+
{{ item.certificateNumber || '-' }}
+
{{ formatNumber(item.quarterlyServiceDuration) }}
+
{{ formatCurrency(item.quarterlyServiceCost) }}
+
{{ formatNumber(item.annualServiceDuration) }}
+
{{ formatCurrency(item.annualServiceCost) }}
+
+
+
+
+
+
汇总
+
-
+
-
+
{{ formatNumber(summaryData.totalQuarterlyDuration) }}
+
{{ formatCurrency(summaryData.totalQuarterlyCost) }}
+
{{ formatNumber(summaryData.totalAnnualDuration) }}
+
{{ formatCurrency(summaryData.totalAnnualCost) }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/business/erp/service/service-applications-count.vue b/src/views/business/erp/service/service-applications-count.vue
index 67544bc..212c7c1 100644
--- a/src/views/business/erp/service/service-applications-count.vue
+++ b/src/views/business/erp/service/service-applications-count.vue
@@ -44,7 +44,7 @@ import { ref, onMounted, reactive, watch } from 'vue';
import { ExportOutlined, SearchOutlined, ReloadOutlined, ArrowLeftOutlined } from '@ant-design/icons-vue';
import { message } from 'ant-design-vue';
import QuarterStatistics from '/@/components/system/service-count/quarter-statistics.vue';
-import LawFirmStatistics from '/@/components/system/service-count/law-firm.vue';
+import LawFirmStatistics from '/@/views/business/erp/service/law-firm.vue';
import ExcelStatisticsDetail from '/@/components/system/service-count/excel-statistics-detail.vue';
import DepartmentTreeSelect from '/@/components/system/department-tree-select/index.vue';
import { loginApi } from '/@/api/system/login-api';
diff --git a/src/views/business/erp/service/service-applications-form.vue b/src/views/business/erp/service/service-applications-form.vue
index 0a7acee..b31f7a7 100644
--- a/src/views/business/erp/service/service-applications-form.vue
+++ b/src/views/business/erp/service/service-applications-form.vue
@@ -43,8 +43,8 @@
-
-
+
+
@@ -559,7 +559,7 @@
certificateNumber: undefined,
firmId: undefined, //执业机构ID
departmentName: undefined, //部门名称
- positionId: undefined, //职务ID
+ positionId: undefined, //所属服务团ID
serviceStart: undefined, //服务开始时间
serviceEnd: undefined, //服务结束时间
serviceDuration: undefined, //服务时长(小时)
diff --git a/src/views/business/erp/service/service-applications-list.vue b/src/views/business/erp/service/service-applications-list.vue
index 4ab3d30..af139ae 100644
--- a/src/views/business/erp/service/service-applications-list.vue
+++ b/src/views/business/erp/service/service-applications-list.vue
@@ -32,10 +32,10 @@
-
+
@@ -111,6 +111,8 @@
批量审核
+
+
批量上报
-
+
+
+
+
+
+ 导出
+
@@ -332,7 +341,7 @@ import AgreementModal from '/@/views/system/home/components/agreement-modal.vue'
ellipsis: true,
},
{
- title: '职务名称',
+ title: '所属服务团',
dataIndex: 'positionName',
ellipsis: true,
width: 100,
@@ -665,6 +674,13 @@ import AgreementModal from '/@/views/system/home/components/agreement-modal.vue'
// 检查是否有成本查询权限
if (loginInfo.value.costVisibleFlag === true) {
try {
+ // 先检查是否有未审核的数据
+ const hasUnreviewedData = await checkUnreviewedData();
+ if (hasUnreviewedData) {
+ message.warning('有律师提交的数据尚未审核,请先完成审核后再进行批量上报。');
+ return;
+ }
+
const costPermissionResult = await firmReportsApi.query();
if (costPermissionResult.data === false) {
// 成本权限检查返回false,需要先填报成本报表
@@ -746,6 +762,21 @@ import AgreementModal from '/@/views/system/home/components/agreement-modal.vue'
return reportYear === lastMonthYear && reportMonth === lastMonth;
}
+ // 检查是否有未审核的数据
+ async function checkUnreviewedData() {
+ try {
+ // 调用后端提供的专门接口查询是否有未审核的数据
+ const result = await serviceApplicationsApi.queryNoReview();
+
+ // 如果返回的数据大于0,说明有未审核的记录
+ return result.data && result.data > 0;
+
+ } catch (error) {
+ console.error('检查未审核数据失败:', error);
+ return false; // 出错时默认返回false,避免阻塞用户操作
+ }
+ }
+
// 执行批量上报
async function handleBatchReport(validRecords) {
try {
@@ -1196,8 +1227,19 @@ function showAuditModal(record) {
}
}
- async function onExport() {
- await serviceApplicationsApi.exportServiceApplications();
+ // 导出功能
+ async function handleExport() {
+ try {
+ const params = processQueryParams({ ...queryForm });
+ // 导出时删除分页参数
+ delete params.pageNum;
+ delete params.pageSize;
+ await serviceApplicationsApi.exportServiceApplications(params);
+ message.success('导出成功');
+ } catch (error) {
+ smartSentry.captureError(error);
+ message.error('导出失败');
+ }
}
// ---------------------------- 批量提交 ----------------------------
diff --git a/src/views/business/erp/service/service-applications-report-list.vue b/src/views/business/erp/service/service-applications-report-list.vue
index 54f003d..022599a 100644
--- a/src/views/business/erp/service/service-applications-report-list.vue
+++ b/src/views/business/erp/service/service-applications-report-list.vue
@@ -73,6 +73,14 @@
批量删除
+
+
+