Commit 92fe5ddf706039c457ada8dc0c1b51525ab8fec8

Authored by 李宇
2 parents 6983478d 7f7044c5

Merge branch 'master' of http://39.98.150.180/antissoft/lvqianmeiye_ERP

Showing 31 changed files with 110 additions and 84 deletions
IMPLEMENTATION_PLAN.md deleted
1 -# 科技部驾驶舱接口实现计划  
2 -  
3 -## 当前状态  
4 -  
5 -✅ **已实现接口(2个)**:  
6 -1. GetStatistics - 核心指标  
7 -2. GetShareStatistics - 股份统计  
8 -  
9 -⏳ **待实现接口(11个)**:  
10 -1. GetPerformanceTrend - 业绩趋势  
11 -2. GetShareTrend - 股份趋势  
12 -3. GetStoreRanking - 门店排行  
13 -4. GetStoreDistribution - 门店分布  
14 -5. GetTeacherRanking - 老师排行  
15 -6. GetOperationStatistics - 运营分析  
16 -7. GetComparisonAnalysis - 对比分析  
17 -8. GetStoreDetailList - 门店明细列表  
18 -9. GetTeacherDetailList - 老师明细列表  
19 -10. GetBillingDetailList - 开单明细列表  
20 -11. GetConsumeDetailList - 消耗明细列表  
21 -  
22 -## 实现计划  
23 -  
24 -由于代码量巨大(约11个接口,估计总代码量约2000-3000行),采用分批实现策略:  
25 -  
26 -**第一批**:GetPerformanceTrend, GetShareTrend(趋势分析接口)  
27 -**第二批**:GetStoreRanking, GetStoreDistribution, GetTeacherRanking(排行和分布接口)  
28 -**第三批**:GetOperationStatistics, GetComparisonAnalysis(分析和对比接口)  
29 -**第四批**:GetStoreDetailList, GetTeacherDetailList, GetBillingDetailList, GetConsumeDetailList(明细列表接口)  
30 -  
31 -## 注意事项  
32 -  
33 -- 所有DTO类已创建完成  
34 -- 实体类命名空间:NCC.Extend.Entitys(已在使用)  
35 -- UserEntity通过NCC.System.Entitys.Permission使用  
36 -- 所有接口都需要遵循月份维度要求  
37 -- 所有接口都需要支持techDepartmentId或storeIds参数  
38 -  
antis-ncc-admin/src/views/wageManagement/detail-dialog.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - title="健康师工资详情"  
4 - :visible="visible"  
5 - width="1400px"  
6 - :close-on-click-modal="false"  
7 - @close="handleClose"  
8 - class="detail-dialog"  
9 - > 2 + <el-dialog title="健康师工资详情" :visible="visible" width="1400px" :close-on-click-modal="false" @close="handleClose"
  3 + class="detail-dialog">
10 <div v-if="detailData" class="detail-content"> 4 <div v-if="detailData" class="detail-content">
11 <!-- 基本信息 --> 5 <!-- 基本信息 -->
12 <div class="detail-section"> 6 <div class="detail-section">
@@ -494,68 +488,136 @@ export default { @@ -494,68 +488,136 @@ export default {
494 488
495 <style lang="scss" scoped> 489 <style lang="scss" scoped>
496 .detail-dialog { 490 .detail-dialog {
  491 + ::v-deep .el-dialog {
  492 + border-radius: 12px;
  493 + overflow: hidden;
  494 + }
  495 +
  496 + ::v-deep .el-dialog__header {
  497 + padding: 24px 24px 20px;
  498 + border-bottom: 1px solid #f1f5f9;
  499 + background: linear-gradient(to bottom, #ffffff, #f8fafc);
  500 + }
  501 +
  502 + ::v-deep .el-dialog__title {
  503 + font-size: 20px;
  504 + font-weight: 600;
  505 + color: #1a202c;
  506 + letter-spacing: -0.01em;
  507 + }
  508 +
  509 + ::v-deep .el-dialog__body {
  510 + padding: 24px;
  511 + background: #f8fafc;
  512 + }
  513 +
497 .detail-content { 514 .detail-content {
498 - max-height: 70vh; 515 + max-height: calc(80vh - 120px);
499 overflow-y: auto; 516 overflow-y: auto;
500 - padding-right: 10px; 517 + padding-right: 8px;
  518 + margin-right: -8px;
501 } 519 }
502 520
503 .detail-section { 521 .detail-section {
504 - margin-bottom: 20px;  
505 - background: #fff;  
506 - border-radius: 8px;  
507 - padding: 20px;  
508 - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 522 + margin-bottom: 24px;
  523 + background: #ffffff;
  524 + border-radius: 12px;
  525 + padding: 24px;
  526 + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.06), 0 1px 2px 0 rgba(0, 0, 0, 0.04);
  527 + border: 1px solid rgba(0, 0, 0, 0.04);
  528 + transition: all 0.2s ease;
  529 +
  530 + &:hover {
  531 + box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.08), 0 2px 4px 0 rgba(0, 0, 0, 0.04);
  532 + }
  533 +
  534 + &:last-child {
  535 + margin-bottom: 0;
  536 + }
509 537
510 .section-title { 538 .section-title {
511 display: flex; 539 display: flex;
512 align-items: center; 540 align-items: center;
513 - gap: 8px;  
514 - margin-bottom: 16px;  
515 - padding-bottom: 12px;  
516 - border-bottom: 2px solid #409EFF;  
517 - font-size: 16px; 541 + gap: 10px;
  542 + margin-bottom: 20px;
  543 + padding-bottom: 16px;
  544 + border-bottom: 2px solid #e2e8f0;
  545 + font-size: 17px;
518 font-weight: 600; 546 font-weight: 600;
519 - color: #303133; 547 + color: #1a202c;
  548 + letter-spacing: -0.01em;
  549 + position: relative;
  550 +
  551 + &::after {
  552 + content: '';
  553 + position: absolute;
  554 + bottom: -2px;
  555 + left: 0;
  556 + width: 60px;
  557 + height: 2px;
  558 + background: linear-gradient(90deg, #409EFF, #67C23A);
  559 + border-radius: 1px;
  560 + }
520 561
521 i { 562 i {
522 color: #409EFF; 563 color: #409EFF;
523 font-size: 18px; 564 font-size: 18px;
  565 + width: 20px;
  566 + text-align: center;
524 } 567 }
525 } 568 }
526 569
527 .section-content { 570 .section-content {
528 .info-row { 571 .info-row {
529 - display: flex;  
530 - flex-wrap: wrap;  
531 - gap: 20px 40px; 572 + display: grid;
  573 + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  574 + gap: 16px 24px;
532 575
533 .info-item { 576 .info-item {
534 display: flex; 577 display: flex;
535 - align-items: center;  
536 - min-width: 200px;  
537 - flex: 0 0 calc(33.333% - 27px); 578 + align-items: flex-start;
  579 + padding: 14px 16px;
  580 + background: #f8fafc;
  581 + border-radius: 8px;
  582 + border: 1px solid rgba(0, 0, 0, 0.04);
  583 + transition: all 0.2s ease;
  584 + min-height: 48px;
  585 +
  586 + &:hover {
  587 + background: #f1f5f9;
  588 + border-color: rgba(64, 158, 255, 0.2);
  589 + transform: translateY(-1px);
  590 + }
538 591
539 .label { 592 .label {
540 - color: #606266;  
541 - font-size: 14px; 593 + color: #718096;
  594 + font-size: 13px;
  595 + font-weight: 500;
542 white-space: nowrap; 596 white-space: nowrap;
543 - margin-right: 8px; 597 + margin-right: 12px;
  598 + flex-shrink: 0;
  599 + min-width: fit-content;
544 } 600 }
545 601
546 .value { 602 .value {
547 - color: #303133; 603 + color: #1a202c;
548 font-size: 14px; 604 font-size: 14px;
549 - font-weight: 500; 605 + font-weight: 600;
  606 + word-break: break-word;
  607 + flex: 1;
  608 + text-align: right;
550 609
551 &.highlight { 610 &.highlight {
552 color: #409EFF; 611 color: #409EFF;
553 - font-weight: 600; 612 + font-weight: 700;
  613 + font-size: 15px;
554 } 614 }
555 615
556 &.large { 616 &.large {
557 - font-size: 18px; 617 + font-size: 24px;
  618 + font-weight: 700;
558 color: #67C23A; 619 color: #67C23A;
  620 + letter-spacing: -0.02em;
559 } 621 }
560 } 622 }
561 } 623 }
@@ -568,16 +630,18 @@ export default { @@ -568,16 +630,18 @@ export default {
568 flex-direction: column; 630 flex-direction: column;
569 align-items: center; 631 align-items: center;
570 justify-content: center; 632 justify-content: center;
571 - padding: 60px 20px;  
572 - color: #909399; 633 + padding: 80px 20px;
  634 + color: #a0aec0;
573 635
574 i { 636 i {
575 - font-size: 48px;  
576 - margin-bottom: 16px; 637 + font-size: 56px;
  638 + margin-bottom: 20px;
  639 + opacity: 0.6;
577 } 640 }
578 641
579 span { 642 span {
580 - font-size: 14px; 643 + font-size: 15px;
  644 + font-weight: 500;
581 } 645 }
582 } 646 }
583 647
@@ -588,21 +652,21 @@ export default { @@ -588,21 +652,21 @@ export default {
588 652
589 // 滚动条样式 653 // 滚动条样式
590 .detail-content::-webkit-scrollbar { 654 .detail-content::-webkit-scrollbar {
591 - width: 6px; 655 + width: 8px;
592 } 656 }
593 657
594 .detail-content::-webkit-scrollbar-track { 658 .detail-content::-webkit-scrollbar-track {
595 - background: #f1f1f1;  
596 - border-radius: 3px; 659 + background: #f8fafc;
  660 + border-radius: 4px;
597 } 661 }
598 662
599 .detail-content::-webkit-scrollbar-thumb { 663 .detail-content::-webkit-scrollbar-thumb {
600 - background: #c1c1c1;  
601 - border-radius: 3px; 664 + background: #cbd5e0;
  665 + border-radius: 4px;
  666 + transition: background 0.2s ease;
602 667
603 &:hover { 668 &:hover {
604 - background: #a8a8a8; 669 + background: #a0aec0;
605 } 670 }
606 } 671 }
607 </style> 672 </style>
608 -  
事业部驾驶舱接口测试总结.md renamed to docs/test-reports/事业部驾驶舱接口测试总结.md
事业部驾驶舱接口测试报告.md renamed to docs/test-reports/事业部驾驶舱接口测试报告.md
合作成本在店长工资计算中未统计问题分析.md renamed to docs/test-reports/合作成本在店长工资计算中未统计问题分析.md
工资服务接口检查报告.md renamed to docs/test-reports/工资服务接口检查报告.md
工资查询接口实现总结.md renamed to docs/test-reports/工资查询接口实现总结.md
工资查询接口测试结果_202511.md renamed to docs/test-reports/工资查询接口测试结果_202511.md
工资锁定解锁接口实现总结.md renamed to docs/test-reports/工资锁定解锁接口实现总结.md
工资锁定解锁接口测试报告.md renamed to docs/test-reports/工资锁定解锁接口测试报告.md
工资锁定解锁接口测试结果.md renamed to docs/test-reports/工资锁定解锁接口测试结果.md
工资锁定解锁接口测试结果_完整版.md renamed to docs/test-reports/工资锁定解锁接口测试结果_完整版.md
工资锁定解锁接口测试结果_最终版.md renamed to docs/test-reports/工资锁定解锁接口测试结果_最终版.md
店内支出接口测试报告.md renamed to docs/test-reports/店内支出接口测试报告.md
批量锁定当月工资接口测试报告.md renamed to docs/test-reports/批量锁定当月工资接口测试报告.md
接口测试准备说明.md renamed to docs/test-reports/接口测试准备说明.md
流程配置接口测试报告.md renamed to docs/test-reports/流程配置接口测试报告.md
测试流程配置接口说明.md renamed to docs/test-reports/测试流程配置接口说明.md
送洗记录作废接口实现总结.md renamed to docs/test-reports/送洗记录作废接口实现总结.md
送洗记录作废接口测试报告.md renamed to docs/test-reports/送洗记录作废接口测试报告.md
送洗记录金额为0问题分析.md renamed to docs/test-reports/送洗记录金额为0问题分析.md
送洗记录金额修复执行说明.md renamed to docs/test-reports/送洗记录金额修复执行说明.md
魏柯店长工资数据问题分析.md renamed to docs/test-reports/魏柯店长工资数据问题分析.md
test_business_unit_dashboard.sh renamed to scripts/test/test_business_unit_dashboard.sh
test_business_unit_dashboard_apis.py renamed to scripts/test/test_business_unit_dashboard_apis.py
test_business_unit_dashboard_comprehensive.py renamed to scripts/test/test_business_unit_dashboard_comprehensive.py
test_employee_salary_apis.py renamed to scripts/test/test_employee_salary_apis.py
test_lock_by_month_api.py renamed to scripts/test/test_lock_by_month_api.py
test_lock_by_month_api.sh renamed to scripts/test/test_lock_by_month_api.sh
test_reimbursement_workflow_config_api.py renamed to scripts/test/test_reimbursement_workflow_config_api.py
test_tech_dashboard_apis.py renamed to scripts/test/test_tech_dashboard_apis.py