Commit 92fe5ddf706039c457ada8dc0c1b51525ab8fec8
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