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 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 4 <div v-if="detailData" class="detail-content">
11 5 <!-- 基本信息 -->
12 6 <div class="detail-section">
... ... @@ -494,68 +488,136 @@ export default {
494 488  
495 489 <style lang="scss" scoped>
496 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 514 .detail-content {
498   - max-height: 70vh;
  515 + max-height: calc(80vh - 120px);
499 516 overflow-y: auto;
500   - padding-right: 10px;
  517 + padding-right: 8px;
  518 + margin-right: -8px;
501 519 }
502 520  
503 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 538 .section-title {
511 539 display: flex;
512 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 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 562 i {
522 563 color: #409EFF;
523 564 font-size: 18px;
  565 + width: 20px;
  566 + text-align: center;
524 567 }
525 568 }
526 569  
527 570 .section-content {
528 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 576 .info-item {
534 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 592 .label {
540   - color: #606266;
541   - font-size: 14px;
  593 + color: #718096;
  594 + font-size: 13px;
  595 + font-weight: 500;
542 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 602 .value {
547   - color: #303133;
  603 + color: #1a202c;
548 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 610 &.highlight {
552 611 color: #409EFF;
553   - font-weight: 600;
  612 + font-weight: 700;
  613 + font-size: 15px;
554 614 }
555 615  
556 616 &.large {
557   - font-size: 18px;
  617 + font-size: 24px;
  618 + font-weight: 700;
558 619 color: #67C23A;
  620 + letter-spacing: -0.02em;
559 621 }
560 622 }
561 623 }
... ... @@ -568,16 +630,18 @@ export default {
568 630 flex-direction: column;
569 631 align-items: center;
570 632 justify-content: center;
571   - padding: 60px 20px;
572   - color: #909399;
  633 + padding: 80px 20px;
  634 + color: #a0aec0;
573 635  
574 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 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 652  
589 653 // 滚动条样式
590 654 .detail-content::-webkit-scrollbar {
591   - width: 6px;
  655 + width: 8px;
592 656 }
593 657  
594 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 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 668 &:hover {
604   - background: #a8a8a8;
  669 + background: #a0aec0;
605 670 }
606 671 }
607 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