zlwu 4 месяцев назад
Родитель
Сommit
8ff159c251
41 измененных файлов с 414 добавлено и 509 удалено
  1. 1 1
      backend/app.pid
  2. 2 0
      backend/app/api/clinical_payment.py
  3. 13 0
      backend/app/crud/clinical_payment.py
  4. 0 0
      backend/app/graphify-out/cache/ast/37aefafc74e098119f5da7941b561d8b04195df5ccc84786942b581526147fc0.json
  5. 0 0
      backend/app/graphify-out/cache/ast/e70c90f11f25cf111a21528647a12e18816c2cb102b2ec193ec1b2ee01e8d81a.json
  6. 114 114
      backend/graphify-out/.graphify_extract.json
  7. 1 1
      backend/graphify-out/GRAPH_REPORT.md
  8. 112 112
      backend/graphify-out/graph.json
  9. 4 4
      backend/graphify-out/manifest.json
  10. 28 28
      web-admin/graphify-out/.graphify_extract.json
  11. 1 1
      web-admin/graphify-out/GRAPH_REPORT.md
  12. 15 15
      web-admin/graphify-out/manifest.json
  13. 55 0
      web-admin/src/assets/styles/core/app.scss
  14. 6 9
      web-admin/src/components/business/clinical-payment-confirm-timeline/index.vue
  15. 1 0
      web-admin/src/graphify-out/cache/ast/0aa5ace55918f80308516b4afbc8c36c7577a93fa584df4785f8e43b6bb2efac.json
  16. 0 0
      web-admin/src/graphify-out/cache/ast/0c33a594e97cb049750ff2042c2fb1bbcd9ac71b62c921d3f43cab2659c0bfbf.json
  17. 0 0
      web-admin/src/graphify-out/cache/ast/33d30744d116862ef149e68dd7d4a04ce22dfb377ace9f082c052d76e61e4e1a.json
  18. 1 0
      web-admin/src/graphify-out/cache/ast/5548ac1c7f9a95d21c94ce3c7e36fa60fb578bae4ef07f2ac7ec10ce13ddb861.json
  19. 1 0
      web-admin/src/graphify-out/cache/ast/592f779c20624565d38aa5c67bf154a73cad9b1c0b1abb7c9e3954fcc6f8689e.json
  20. 0 0
      web-admin/src/graphify-out/cache/ast/665a18aae88e47bc8ee41519dad3132b194ee1aee40dc4ab2d1f170617cd2a4d.json
  21. 1 0
      web-admin/src/graphify-out/cache/ast/907befbca2f3233773646c34a6fb54d73e4f703729d035ad38c9914a3334651a.json
  22. 1 0
      web-admin/src/graphify-out/cache/ast/980bac66a6a4e2d15cce6ae4c42f67950480ab83b11bd394a2c71fef119506df.json
  23. 1 0
      web-admin/src/graphify-out/cache/ast/9e4e1ad98470194eb26568a22d38c7f4a2a9268e5f455d7d7f01e2b2e53394ae.json
  24. 0 0
      web-admin/src/graphify-out/cache/ast/aaa486c84d76c4e15a56304e0fc83460fb82e6a476f5e14ef7677820b84d54b8.json
  25. 1 0
      web-admin/src/graphify-out/cache/ast/ab4a1bfbc9eae6f818bcf8e1f5c9db84b57bcde8225f1ba5589b8a90ba5e8b53.json
  26. 0 0
      web-admin/src/graphify-out/cache/ast/ba82bb92af1773ed48493b018c130c6dc7f0f3264aa8f9de908284db302be349.json
  27. 1 0
      web-admin/src/graphify-out/cache/ast/d6dd98954d1520f38c15d4aa1790048dfe05da3312b00714e3ae523b88921df3.json
  28. 1 0
      web-admin/src/graphify-out/cache/ast/d80ef98d26bdb0ae21a88fa6ed55d76952e1164a7c43201e8d3faa4f91251252.json
  29. 0 0
      web-admin/src/graphify-out/cache/ast/e8d54d789a133135adfffacb64a43d2a01e35f7d58a5f46e8570ef2af2badc38.json
  30. 0 0
      web-admin/src/graphify-out/cache/ast/f23a89bdbb2f599de3b199821c423d5ced427f9c2944d671410b63c266d90f32.json
  31. 0 0
      web-admin/src/graphify-out/cache/ast/f5286e5d2c9a903d9e4b7633b46227dcdf252082995c6911a724a63ae02b4a0d.json
  32. 0 49
      web-admin/src/views/cell-storage/payment-confirm/RefundConfirmTab.vue
  33. 0 49
      web-admin/src/views/cell-storage/payment-confirm/index.vue
  34. 2 11
      web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue
  35. 2 3
      web-admin/src/views/pilot-service/cell-product-type/index.vue
  36. 6 0
      web-admin/src/views/pilot-service/channel-service-order-finance/index.vue
  37. 0 49
      web-admin/src/views/pilot-service/clinical-payment-confirm/RefundConfirmTab.vue
  38. 0 49
      web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue
  39. 31 3
      web-admin/src/views/pilot-service/pilot-application/ClinicalPaymentTab.vue
  40. 4 3
      web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue
  41. 8 8
      web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSampleGroup.vue

+ 1 - 1
backend/app.pid

@@ -1 +1 @@
-40943
+79568

+ 2 - 0
backend/app/api/clinical_payment.py

@@ -39,6 +39,7 @@ class SubmitReceiptBody(BaseModel):
     model_config = ConfigDict(populate_by_name=True)
 
     transfer_amount: Optional[float] = Field(None, alias="transferAmount")
+    transfer_type: Optional[str] = Field(None, alias="transferType")
     remark: Optional[str] = None
     transfer_attachments: Optional[str] = Field(None, alias="transferAttachments")
 
@@ -250,6 +251,7 @@ async def api_submit_receipt(
             remark=body.remark,
             transfer_attachments=body.transfer_attachments,
             transfer_amount=body.transfer_amount,
+            transfer_type=body.transfer_type,
         )
         return success_response(None, message="提交缴费确认成功")
     except ValueError as e:

+ 13 - 0
backend/app/crud/clinical_payment.py

@@ -249,6 +249,9 @@ def list_payments(
 # ─── submit receipt (dfj → jfqrz) ────────────────────────
 
 
+_VALID_TRANSFER_TYPES = frozenset({"wxzz", "zzbzz", "yhkzz", "xj"})
+
+
 def _apply_submit_receipt(
     row: BizPilotPayment,
     *,
@@ -256,12 +259,20 @@ def _apply_submit_receipt(
     remark: Optional[str] = None,
     transfer_attachments: Optional[str] = None,
     transfer_amount: Optional[Any] = None,
+    transfer_type: Optional[str] = None,
 ) -> None:
     if row.pay_status != "dfj":
         raise ValueError("仅待缴费状态可提交缴费确认")
     plan_amount = Decimal(str(row.amount or 0))
     if transfer_amount is not None and Decimal(str(transfer_amount)) != plan_amount:
         raise ValueError("实缴金额须与计划金额一致")
+    if transfer_type is not None:
+        normalized = transfer_type.strip()
+        if not normalized:
+            raise ValueError("请选择转账方式")
+        if normalized not in _VALID_TRANSFER_TYPES:
+            raise ValueError("转账方式无效")
+        row.transfer_type = normalized
     row.pay_status = "jfqrz"
     row.transfer_amount = plan_amount
     if remark is not None:
@@ -281,6 +292,7 @@ def submit_receipt(
     remark: Optional[str] = None,
     transfer_attachments: Optional[str] = None,
     transfer_amount: Optional[Any] = None,
+    transfer_type: Optional[str] = None,
 ) -> BizPilotPayment:
     row = _get_or_raise(db, payment_id=payment_id, tenant_no=tenant_no)
     _apply_submit_receipt(
@@ -289,6 +301,7 @@ def submit_receipt(
         remark=remark,
         transfer_attachments=transfer_attachments,
         transfer_amount=transfer_amount,
+        transfer_type=transfer_type,
     )
     db.add(row)
     db.commit()

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
backend/app/graphify-out/cache/ast/37aefafc74e098119f5da7941b561d8b04195df5ccc84786942b581526147fc0.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
backend/app/graphify-out/cache/ast/e70c90f11f25cf111a21528647a12e18816c2cb102b2ec193ec1b2ee01e8d81a.json


Разница между файлами не показана из-за своего большого размера
+ 114 - 114
backend/graphify-out/.graphify_extract.json


+ 1 - 1
backend/graphify-out/GRAPH_REPORT.md

@@ -1,7 +1,7 @@
 # Graph Report - app  (2026-06-16)
 
 ## Corpus Check
-- Large corpus: 208 files · ~242,154 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
+- Large corpus: 208 files · ~242,198 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
 
 ## Summary
 - 4157 nodes · 21763 edges · 43 communities detected

Разница между файлами не показана из-за своего большого размера
+ 112 - 112
backend/graphify-out/graph.json


+ 4 - 4
backend/graphify-out/manifest.json

@@ -141,7 +141,7 @@
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/env_detect_record.py": 1781145773.959546,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/outbound_release_material.py": 1781598316.369666,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/process.py": 1781524075.6578302,
-  "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pilot_service.py": 1781598987.4458413,
+  "/Users/wuzilong/work/00code/zkxw/backend/app/crud/pilot_service.py": 1781599314.0124536,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/customer.py": 1779686149.7508218,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/workflow.py": 1779265993.677624,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/sample_sms_notification.py": 1781063495.0317714,
@@ -164,7 +164,7 @@
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/leave.py": 1779265839.500242,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/output_type.py": 1779265703.7363207,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/exhibition_appointment.py": 1778801075.5211918,
-  "/Users/wuzilong/work/00code/zkxw/backend/app/crud/clinical_payment.py": 1781079908.473383,
+  "/Users/wuzilong/work/00code/zkxw/backend/app/crud/clinical_payment.py": 1781601424.4475384,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/storage_release_review.py": 1779526635.1455016,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/outbound_release_review.py": 1779968232.5759368,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py": 1781364255.0874767,
@@ -190,7 +190,7 @@
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/research_donation.py": 1781592190.878251,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/ethnic.py": 1779266243.9511197,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_checkup.py": 1779935751.2658868,
-  "/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_service.py": 1781598988.5409384,
+  "/Users/wuzilong/work/00code/zkxw/backend/app/api/pilot_service.py": 1781599314.0221174,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/workflow.py": 1779266232.4568832,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/sample_sms_notification.py": 1780325524.907156,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/sample_reception.py": 1781535825.750677,
@@ -198,7 +198,7 @@
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/production.py": 1781583185.3240008,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/protocol_sample_collection.py": 1780457788.2093296,
   "/Users/wuzilong/work/00code/zkxw/backend/app/api/leave.py": 1779266168.8693042,
-  "/Users/wuzilong/work/00code/zkxw/backend/app/api/clinical_payment.py": 1781079914.3908625,
+  "/Users/wuzilong/work/00code/zkxw/backend/app/api/clinical_payment.py": 1781601416.6412482,
   "/Users/wuzilong/work/00code/zkxw/backend/app/services/workflow_callback.py": 1778727966.7277644,
   "/Users/wuzilong/work/00code/zkxw/backend/app/services/qc_work_order_fee_summary.py": 1781337818.5442588,
   "/Users/wuzilong/work/00code/zkxw/backend/app/services/storage_facility_code.py": 1781348051.133351,

+ 28 - 28
web-admin/graphify-out/.graphify_extract.json

@@ -5031,21 +5031,21 @@
       "label": "showStepContent()",
       "file_type": "code",
       "source_file": "components/business/clinical-payment-confirm-timeline/index.vue",
-      "source_location": "L252"
+      "source_location": "L247"
     },
     {
       "id": "clinical_payment_confirm_timeline_index_protocolpaymodelabel",
       "label": "protocolPayModeLabel()",
       "file_type": "code",
       "source_file": "components/business/clinical-payment-confirm-timeline/index.vue",
-      "source_location": "L268"
+      "source_location": "L263"
     },
     {
       "id": "clinical_payment_confirm_timeline_index_formatprotocolamount",
       "label": "formatProtocolAmount()",
       "file_type": "code",
       "source_file": "components/business/clinical-payment-confirm-timeline/index.vue",
-      "source_location": "L273"
+      "source_location": "L268"
     },
     {
       "id": "components_business_dialog_form_body_index_vue",
@@ -10869,21 +10869,21 @@
       "label": "financeConfirmAttachmentFiles()",
       "file_type": "code",
       "source_file": "views/cell-storage/protocol/ProtocolViewDialog.vue",
-      "source_location": "L1734"
+      "source_location": "L1725"
     },
     {
       "id": "protocol_protocolviewdialog_refundattachmentfiles",
       "label": "refundAttachmentFiles()",
       "file_type": "code",
       "source_file": "views/cell-storage/protocol/ProtocolViewDialog.vue",
-      "source_location": "L1741"
+      "source_location": "L1732"
     },
     {
       "id": "protocol_protocolviewdialog_refundfinanceconfirmattachmentfiles",
       "label": "refundFinanceConfirmAttachmentFiles()",
       "file_type": "code",
       "source_file": "views/cell-storage/protocol/ProtocolViewDialog.vue",
-      "source_location": "L1748"
+      "source_location": "L1739"
     },
     {
       "id": "views_cell_storage_protocol_protocolattachmentreadonly_vue",
@@ -16896,35 +16896,35 @@
       "label": "loadData()",
       "file_type": "code",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L663"
+      "source_location": "L669"
     },
     {
       "id": "channel_service_order_finance_index_handlesearch",
       "label": "handleSearch()",
       "file_type": "code",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L690"
+      "source_location": "L696"
     },
     {
       "id": "channel_service_order_finance_index_handlereset",
       "label": "handleReset()",
       "file_type": "code",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L695"
+      "source_location": "L701"
     },
     {
       "id": "channel_service_order_finance_index_handletabchange",
       "label": "handleTabChange()",
       "file_type": "code",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L704"
+      "source_location": "L710"
     },
     {
       "id": "channel_service_order_finance_index_switchtab",
       "label": "switchTab()",
       "file_type": "code",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L713"
+      "source_location": "L719"
     },
     {
       "id": "views_pilot_service_project_price_system_index_vue",
@@ -27648,7 +27648,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "components/business/clinical-payment-confirm-timeline/index.vue",
-      "source_location": "L252",
+      "source_location": "L247",
       "weight": 1.0
     },
     {
@@ -27657,7 +27657,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "components/business/clinical-payment-confirm-timeline/index.vue",
-      "source_location": "L268",
+      "source_location": "L263",
       "weight": 1.0
     },
     {
@@ -27666,7 +27666,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "components/business/clinical-payment-confirm-timeline/index.vue",
-      "source_location": "L273",
+      "source_location": "L268",
       "weight": 1.0
     },
     {
@@ -35739,7 +35739,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/cell-storage/protocol/ProtocolViewDialog.vue",
-      "source_location": "L1734",
+      "source_location": "L1725",
       "weight": 1.0
     },
     {
@@ -35748,7 +35748,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/cell-storage/protocol/ProtocolViewDialog.vue",
-      "source_location": "L1741",
+      "source_location": "L1732",
       "weight": 1.0
     },
     {
@@ -35757,7 +35757,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/cell-storage/protocol/ProtocolViewDialog.vue",
-      "source_location": "L1748",
+      "source_location": "L1739",
       "weight": 1.0
     },
     {
@@ -47754,7 +47754,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L663",
+      "source_location": "L669",
       "weight": 1.0
     },
     {
@@ -47763,7 +47763,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L690",
+      "source_location": "L696",
       "weight": 1.0
     },
     {
@@ -47772,7 +47772,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L695",
+      "source_location": "L701",
       "weight": 1.0
     },
     {
@@ -47781,7 +47781,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L704",
+      "source_location": "L710",
       "weight": 1.0
     },
     {
@@ -47790,7 +47790,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L713",
+      "source_location": "L719",
       "weight": 1.0
     },
     {
@@ -47799,7 +47799,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L692",
+      "source_location": "L698",
       "weight": 1.0
     },
     {
@@ -47808,7 +47808,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L701",
+      "source_location": "L707",
       "weight": 1.0
     },
     {
@@ -47817,7 +47817,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L710",
+      "source_location": "L716",
       "weight": 1.0
     },
     {
@@ -47826,7 +47826,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L716",
+      "source_location": "L722",
       "weight": 1.0
     },
     {
@@ -51854,7 +51854,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "components/business/clinical-payment-confirm-timeline/index.vue",
-      "source_location": "L275",
+      "source_location": "L270",
       "weight": 1.0
     },
     {
@@ -57544,7 +57544,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "views/pilot-service/channel-service-order-finance/index.vue",
-      "source_location": "L680",
+      "source_location": "L686",
       "weight": 1.0
     },
     {

+ 1 - 1
web-admin/graphify-out/GRAPH_REPORT.md

@@ -1,7 +1,7 @@
 # Graph Report - src  (2026-06-16)
 
 ## Corpus Check
-- Large corpus: 781 files · ~515,927 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
+- Large corpus: 781 files · ~515,617 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
 
 ## Summary
 - 2560 nodes · 3538 edges · 54 communities detected

+ 15 - 15
web-admin/graphify-out/manifest.json

@@ -17,8 +17,8 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/common/index.ts": 1781272556.3597305,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/directive/directive.d.ts": 1781272556.3601494,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/api/api.d.ts": 1781272556.3606477,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1781600240.744298,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1781599999.934328,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1781602052.782289,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1781601612.8187408,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/store/index.ts": 1781272556.364766,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/router/index.ts": 1781272556.3652694,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/locales/index.ts": 1781272556.3657222,
@@ -195,7 +195,7 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/protocol-finance-confirm-fields/index.vue": 1781585388.6311953,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/protocol-finance-confirm-fields/finance-attachments.ts": 1781272556.6256514,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue": 1781590356.7882614,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/clinical-payment-confirm-timeline/index.vue": 1781585388.635286,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/clinical-payment-confirm-timeline/index.vue": 1781601573.628867,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/dialog-form-body/index.vue": 1781272556.6276903,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/clinical-payment-submit-readonly/index.vue": 1781566692.993364,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/sample-qc-info-cards/index.vue": 1781596037.4093332,
@@ -271,7 +271,7 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/my-material-usage/index.vue": 1781518736.690082,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/index.vue": 1781600343.1604354,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolStatusChangeDialog.vue": 1781440943.514069,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue": 1781599760.586079,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue": 1781601583.3978057,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolAttachmentReadonly.vue": 1781585388.6583154,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolFormDialog.vue": 1781599762.361165,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/protocol/ProtocolAuditDialog.vue": 1781440939.3081548,
@@ -293,8 +293,8 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material/MaterialStockCheckTab.vue": 1781578349.395239,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/fullmoon-todo/index.vue": 1781272556.719875,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/storage-entry-info/index.vue": 1781272556.7201529,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/index.vue": 1781600401.4995606,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/RefundConfirmTab.vue": 1781600413.8415418,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/index.vue": 1781602085.5786357,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/RefundConfirmTab.vue": 1781602089.561577,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/material-stock-log/index.vue": 1781346115.5701284,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/outside/Iframe.vue": 1781272556.7246568,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/demo/index.vue": 1781272556.7266567,
@@ -306,7 +306,7 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/sample-info/DonationSampleCollectionInfoTab.vue": 1781272556.7362974,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/index.vue": 1781600353.1619346,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationAuditDialog.vue": 1781563767.3746796,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue": 1781599799.1281025,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationViewDialog.vue": 1781600869.955432,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationFormDialog.vue": 1781599783.436885,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/list/DonationStatusChangeDialog.vue": 1781563767.3753123,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/dashboard/console/index.vue": 1781272556.7480726,
@@ -363,7 +363,7 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskPaperAttachmentsPanel.vue": 1781530960.805927,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue": 1781585388.7005522,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskOutputProductDialog.vue": 1781563767.357495,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue": 1781585388.7010958,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue": 1781601931.1752002,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ForwardTaskDialog.vue": 1781563767.3550124,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/OutboundPilotTab.vue": 1781583381.1088736,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/tabs/ProductionWorkOrderTabPanel.vue": 1781583376.390064,
@@ -406,7 +406,7 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderTaskResultPanel.vue": 1781589482.0890527,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSingleCard.vue": 1781595993.2583652,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderFeeSummaryBar.vue": 1781585388.7152023,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSampleGroup.vue": 1781599843.890257,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSampleGroup.vue": 1781601939.108729,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderTaskSubList.vue": 1781590356.5447705,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderCardList.vue": 1781595924.5325,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderProtocolPaymentPanel.vue": 1781588255.9076052,
@@ -455,7 +455,7 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/exception/500/index.vue": 1781272556.902236,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/exception/403/index.vue": 1781272556.9027894,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/exception/404/index.vue": 1781272556.9030628,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/index.vue": 1781585388.7465556,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/index.vue": 1781602131.352225,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/CellProductPriceTab.vue": 1781563767.3270054,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/ProjectPriceSystemTab.vue": 1781563767.3279424,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/CellProductSpecTab.vue": 1781563767.3274033,
@@ -473,8 +473,8 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel/ChannelViewDialog.vue": 1781599756.9191692,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel/ChannelServiceOrderTab.vue": 1781600424.9531324,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-refund-confirm/index.vue": 1781272556.946893,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue": 1781585388.7576923,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-confirm/RefundConfirmTab.vue": 1781585388.758139,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue": 1781602093.5398912,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-confirm/RefundConfirmTab.vue": 1781602099.6746335,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/outbound-release-review/index.vue": 1781600465.6143773,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/outbound-release-review/OutboundReleaseViewDialog.vue": 1781596823.2469816,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/outbound-release-review/OutboundReleaseReviewDialog.vue": 1781596862.0797033,
@@ -483,11 +483,11 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/index.vue": 1781600006.408287,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationDetailDialog.vue": 1781599768.7755723,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/PilotApplicationTab.vue": 1781272557.1928792,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue": 1781599765.8567426,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue": 1781600820.032039,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/InfusionScheduleTab.vue": 1781600431.8481567,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationFormDialog.vue": 1781599780.0277336,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/CheckupManagementTab.vue": 1781435201.7785301,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ClinicalPaymentTab.vue": 1781585388.765392,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ClinicalPaymentTab.vue": 1781601413.5946639,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-price/index.vue": 1781272557.4568446,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-management/index.vue": 1781272557.4618897,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-management/CheckupReserveItemsTable.vue": 1781272557.4705725,
@@ -498,7 +498,7 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-management/CheckupFillDialog.vue": 1781594573.8421357,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/checkup-management/CheckupMarkCheckedDialog.vue": 1781594629.8261228,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/clinical-payment-info/index.vue": 1781272558.0460358,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order-finance/index.vue": 1781600445.1879845,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/channel-service-order-finance/index.vue": 1781601718.4204743,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/project-price-system/index.vue": 1781272558.2950988,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-spec/index.vue": 1781272558.3464932,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/basic-info/sample-code/index.vue": 1781272558.356484,

+ 55 - 0
web-admin/src/assets/styles/core/app.scss

@@ -626,6 +626,61 @@ body {
   }
 }
 
+// 缴退费财务确认 — 待确认 / 已确认分区标题(背景与 panel-pill-tabs 轨道一致)
+.finance-section-head {
+  display: inline-flex;
+  align-items: center;
+  width: fit-content;
+  max-width: 100%;
+  margin: 4px 24px 0;
+  padding: 10px 14px;
+  background: linear-gradient(180deg, var(--primary-bg, #ecfdf5) 0%, #fff 100%);
+  border: 1px solid #d1fae5;
+  border-radius: 8px;
+}
+
+.finance-section-title {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+  margin: 0;
+  font-size: 14px;
+  font-weight: 600;
+  color: var(--text, #1e293b);
+  line-height: 1.4;
+
+  &::before {
+    content: '';
+    width: 4px;
+    height: 12px;
+    border-radius: 999px;
+    background: var(--primary-dark, #059669);
+  }
+}
+
+.finance-section-head--pending .finance-section-title::before {
+  background: #d97706;
+}
+
+.finance-section-count {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  min-width: 22px;
+  height: 22px;
+  padding: 0 6px;
+  border-radius: 999px;
+  background: #f1f5f9;
+  font-size: 12px;
+  font-weight: 600;
+  color: var(--mint-text-muted, #64748b);
+}
+
+.finance-section-head--pending .finance-section-count {
+  background: #fffbeb;
+  color: #d97706;
+}
+
 // 弹窗内 Sticky 胶囊 Tab(detail-tabs / detail-tab,与 panel-pill-tabs 视觉一致)
 .detail-tabs {
   display: flex;

+ 6 - 9
web-admin/src/components/business/clinical-payment-confirm-timeline/index.vue

@@ -110,8 +110,7 @@
         <div class="v-timeline-item__rail">
           <div class="v-timeline-item__dot">
             <span v-if="step.state === 'done'">✓</span>
-            <span v-else-if="step.state === 'current'">●</span>
-            <span v-else>○</span>
+            <span v-else>●</span>
           </div>
           <div
             v-if="index < displaySteps.length - 1"
@@ -123,8 +122,7 @@
           <div class="v-timeline-item__head">
             <h4 class="v-timeline-item__title">{{ step.title }}</h4>
             <el-tag v-if="step.state === 'current'" type="warning" size="small">进行中</el-tag>
-            <el-tag v-else-if="step.state === 'done'" type="success" size="small">已完成</el-tag>
-            <span v-else class="v-timeline-item__pending">待处理</span>
+            <el-tag v-else type="success" size="small">已完成</el-tag>
           </div>
           <div
             v-if="step.state !== 'pending' && step.time && step.time !== '—'"
@@ -160,9 +158,6 @@
               </div>
             </dl>
           </div>
-          <p v-else-if="step.state === 'pending'" class="v-timeline-item__placeholder">
-            尚未到达此环节
-          </p>
           <p
             v-else-if="step.state === 'current' && hasActionPanel"
             class="v-timeline-item__placeholder v-timeline-item__placeholder--hint"
@@ -281,8 +276,10 @@
       : buildPaymentFlowSteps(props.detail, props.activeStepKey)
   )
 
-  /** 倒序:最新环节在上,最早环节在下 */
-  const displaySteps = computed(() => [...steps.value].reverse())
+  /** 倒序:最新环节在上,最早环节在下;隐藏尚未到达的环节 */
+  const displaySteps = computed(() =>
+    [...steps.value].filter((step) => step.state !== 'pending').reverse()
+  )
 </script>
 
 <style scoped lang="scss">

+ 1 - 0
web-admin/src/graphify-out/cache/ast/0aa5ace55918f80308516b4afbc8c36c7577a93fa584df4785f8e43b6bb2efac.json

@@ -0,0 +1 @@
+{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_clinicalpaymenttab_vue", "label": "ClinicalPaymentTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ClinicalPaymentTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web-admin/src/graphify-out/cache/ast/0c33a594e97cb049750ff2042c2fb1bbcd9ac71b62c921d3f43cab2659c0bfbf.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web-admin/src/graphify-out/cache/ast/33d30744d116862ef149e68dd7d4a04ce22dfb377ace9f082c052d76e61e4e1a.json


+ 1 - 0
web-admin/src/graphify-out/cache/ast/5548ac1c7f9a95d21c94ce3c7e36fa60fb578bae4ef07f2ac7ec10ce13ddb861.json

@@ -0,0 +1 @@
+{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_payment_confirm_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}

+ 1 - 0
web-admin/src/graphify-out/cache/ast/592f779c20624565d38aa5c67bf154a73cad9b1c0b1abb7c9e3954fcc6f8689e.json

@@ -0,0 +1 @@
+{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web-admin/src/graphify-out/cache/ast/665a18aae88e47bc8ee41519dad3132b194ee1aee40dc4ab2d1f170617cd2a4d.json


+ 1 - 0
web-admin/src/graphify-out/cache/ast/907befbca2f3233773646c34a6fb54d73e4f703729d035ad38c9914a3334651a.json

@@ -0,0 +1 @@
+{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_applicationviewdialog_vue", "label": "ApplicationViewDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue", "source_location": "L1"}, {"id": "pilot_application_applicationviewdialog_for", "label": "for()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue", "source_location": "L1082"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_pilot_application_applicationviewdialog_vue", "target": "pilot_application_applicationviewdialog_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue", "source_location": "L1082", "weight": 1.0}], "raw_calls": [{"caller_nid": "pilot_application_applicationviewdialog_for", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue", "source_location": "L1083"}, {"caller_nid": "pilot_application_applicationviewdialog_for", "callee": "Number", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue", "source_location": "L1086"}, {"caller_nid": "pilot_application_applicationviewdialog_for", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue", "source_location": "L1087"}, {"caller_nid": "pilot_application_applicationviewdialog_for", "callee": "set", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/pilot-application/ApplicationViewDialog.vue", "source_location": "L1089"}]}

+ 1 - 0
web-admin/src/graphify-out/cache/ast/980bac66a6a4e2d15cce6ae4c42f67950480ab83b11bd394a2c71fef119506df.json

@@ -0,0 +1 @@
+{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_qcworkordersamplegroup_vue", "label": "QcWorkOrderSampleGroup.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSampleGroup.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}

+ 1 - 0
web-admin/src/graphify-out/cache/ast/9e4e1ad98470194eb26568a22d38c7f4a2a9268e5f455d7d7f01e2b2e53394ae.json

@@ -0,0 +1 @@
+{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_cell_storage_payment_confirm_refundconfirmtab_vue", "label": "RefundConfirmTab.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/cell-storage/payment-confirm/RefundConfirmTab.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web-admin/src/graphify-out/cache/ast/aaa486c84d76c4e15a56304e0fc83460fb82e6a476f5e14ef7677820b84d54b8.json


+ 1 - 0
web-admin/src/graphify-out/cache/ast/ab4a1bfbc9eae6f818bcf8e1f5c9db84b57bcde8225f1ba5589b8a90ba5e8b53.json

@@ -0,0 +1 @@
+{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web-admin/src/graphify-out/cache/ast/ba82bb92af1773ed48493b018c130c6dc7f0f3264aa8f9de908284db302be349.json


+ 1 - 0
web-admin/src/graphify-out/cache/ast/d6dd98954d1520f38c15d4aa1790048dfe05da3312b00714e3ae523b88921df3.json

@@ -0,0 +1 @@
+{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}

+ 1 - 0
web-admin/src/graphify-out/cache/ast/d80ef98d26bdb0ae21a88fa6ed55d76952e1164a7c43201e8d3faa4f91251252.json

@@ -0,0 +1 @@
+{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_pilot_service_cell_product_type_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/pilot-service/cell-product-type/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web-admin/src/graphify-out/cache/ast/e8d54d789a133135adfffacb64a43d2a01e35f7d58a5f46e8570ef2af2badc38.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web-admin/src/graphify-out/cache/ast/f23a89bdbb2f599de3b199821c423d5ced427f9c2944d671410b63c266d90f32.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web-admin/src/graphify-out/cache/ast/f5286e5d2c9a903d9e4b7633b46227dcdf252082995c6911a724a63ae02b4a0d.json


+ 0 - 49
web-admin/src/views/cell-storage/payment-confirm/RefundConfirmTab.vue

@@ -660,55 +660,6 @@
 </script>
 
 <style scoped lang="scss">
-  .finance-section-head {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    padding: 12px 24px 0;
-  }
-
-  .finance-section-title {
-    display: flex;
-    align-items: center;
-    gap: 8px;
-    margin: 0;
-    font-size: 14px;
-    font-weight: 600;
-    color: var(--text, #1e293b);
-    line-height: 1.4;
-
-    &::before {
-      content: '';
-      width: 4px;
-      height: 12px;
-      border-radius: 999px;
-      background: var(--primary-dark, #059669);
-    }
-  }
-
-  .finance-section-head--pending .finance-section-title::before {
-    background: #d97706;
-  }
-
-  .finance-section-count {
-    display: inline-flex;
-    align-items: center;
-    justify-content: center;
-    min-width: 22px;
-    height: 22px;
-    padding: 0 6px;
-    border-radius: 999px;
-    background: #f1f5f9;
-    font-size: 12px;
-    font-weight: 600;
-    color: var(--mint-text-muted, #64748b);
-  }
-
-  .finance-section-head--pending .finance-section-count {
-    background: #fffbeb;
-    color: #d97706;
-  }
-
   .finance-section-divider {
     height: 8px;
     margin: 8px 0 0;

+ 0 - 49
web-admin/src/views/cell-storage/payment-confirm/index.vue

@@ -728,55 +728,6 @@
     min-width: 0;
   }
 
-  .finance-section-head {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    padding: 12px 24px 0;
-  }
-
-  .finance-section-title {
-    display: flex;
-    align-items: center;
-    gap: 8px;
-    margin: 0;
-    font-size: 14px;
-    font-weight: 600;
-    color: var(--text, #1e293b);
-    line-height: 1.4;
-
-    &::before {
-      content: '';
-      width: 4px;
-      height: 12px;
-      border-radius: 999px;
-      background: var(--primary-dark, #059669);
-    }
-  }
-
-  .finance-section-head--pending .finance-section-title::before {
-    background: #d97706;
-  }
-
-  .finance-section-count {
-    display: inline-flex;
-    align-items: center;
-    justify-content: center;
-    min-width: 22px;
-    height: 22px;
-    padding: 0 6px;
-    border-radius: 999px;
-    background: #f1f5f9;
-    font-size: 12px;
-    font-weight: 600;
-    color: var(--mint-text-muted, #64748b);
-  }
-
-  .finance-section-head--pending .finance-section-count {
-    background: #fffbeb;
-    color: #d97706;
-  }
-
   .finance-section-divider {
     height: 8px;
     margin: 8px 0 0;

+ 2 - 11
web-admin/src/views/cell-storage/protocol/ProtocolViewDialog.vue

@@ -1514,21 +1514,12 @@
         dotClass: s === 'tfqrz' ? 'current-amber' : 'done',
         dotIcon: s === 'tfqrz' ? '●' : '✓',
         labelClass: s === 'tfqrz' ? 'current-amber' : 'done',
-        connectorToNext: s === 'tfqrz' ? 'pending-gray' : 'done-red',
+        connectorToNext: s === 'ytf' ? 'done-red' : undefined,
         hasDetailCard: true
       })
     }
 
-    if (s === 'tfqrz') {
-      steps.push({
-        key: 'refund-finance',
-        label: '退费财务确认信息',
-        dotClass: 'pending-gray',
-        dotIcon: '○',
-        labelClass: 'pending-gray',
-        hasDetailCard: false
-      })
-    } else if (s === 'ytf') {
+    if (s === 'ytf') {
       steps.push({
         key: 'refund-finance',
         label: '退费财务确认信息',

+ 2 - 3
web-admin/src/views/pilot-service/cell-product-type/index.vue

@@ -384,10 +384,9 @@
     gap: 12px;
     min-height: 72px;
     padding: 12px 16px;
-    border: 1px solid var(--mint-border, #d9e8e2);
+    border: 1px solid #d1fae5;
     border-radius: 10px;
-    background: var(--surface, #fff);
-    box-shadow: 0 1px 3px rgb(0 0 0 / 5%);
+    background: linear-gradient(180deg, var(--primary-bg, #ecfdf5) 0%, #fff 100%);
   }
 
   .stat-icon {

+ 6 - 0
web-admin/src/views/pilot-service/channel-service-order-finance/index.vue

@@ -644,6 +644,12 @@
     done: []
   }
 
+  const FINANCE_TABS = [
+    { name: 'pending', label: '待处理' },
+    { name: 'done', label: '已处理' }
+  ] as const
+
+  const activeTab = ref('pending')
   const createTimeRange = ref<[string, string] | null>(null)
   const searchForm = reactive({
     txnType: '' as string,

+ 0 - 49
web-admin/src/views/pilot-service/clinical-payment-confirm/RefundConfirmTab.vue

@@ -831,55 +831,6 @@
 </script>
 
 <style scoped lang="scss">
-  .finance-section-head {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    padding: 12px 24px 0;
-  }
-
-  .finance-section-title {
-    display: flex;
-    align-items: center;
-    gap: 8px;
-    margin: 0;
-    font-size: 14px;
-    font-weight: 600;
-    color: var(--text, #1e293b);
-    line-height: 1.4;
-
-    &::before {
-      content: '';
-      width: 4px;
-      height: 12px;
-      border-radius: 999px;
-      background: var(--primary-dark, #059669);
-    }
-  }
-
-  .finance-section-head--pending .finance-section-title::before {
-    background: #d97706;
-  }
-
-  .finance-section-count {
-    display: inline-flex;
-    align-items: center;
-    justify-content: center;
-    min-width: 22px;
-    height: 22px;
-    padding: 0 6px;
-    border-radius: 999px;
-    background: #f1f5f9;
-    font-size: 12px;
-    font-weight: 600;
-    color: var(--mint-text-muted, #64748b);
-  }
-
-  .finance-section-head--pending .finance-section-count {
-    background: #fffbeb;
-    color: #d97706;
-  }
-
   .finance-section-divider {
     height: 8px;
     margin: 8px 0 0;

+ 0 - 49
web-admin/src/views/pilot-service/clinical-payment-confirm/index.vue

@@ -910,55 +910,6 @@
     min-width: 0;
   }
 
-  .finance-section-head {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    padding: 12px 24px 0;
-  }
-
-  .finance-section-title {
-    display: flex;
-    align-items: center;
-    gap: 8px;
-    margin: 0;
-    font-size: 14px;
-    font-weight: 600;
-    color: var(--text, #1e293b);
-    line-height: 1.4;
-
-    &::before {
-      content: '';
-      width: 4px;
-      height: 12px;
-      border-radius: 999px;
-      background: var(--primary-dark, #059669);
-    }
-  }
-
-  .finance-section-head--pending .finance-section-title::before {
-    background: #d97706;
-  }
-
-  .finance-section-count {
-    display: inline-flex;
-    align-items: center;
-    justify-content: center;
-    min-width: 22px;
-    height: 22px;
-    padding: 0 6px;
-    border-radius: 999px;
-    background: #f1f5f9;
-    font-size: 12px;
-    font-weight: 600;
-    color: var(--mint-text-muted, #64748b);
-  }
-
-  .finance-section-head--pending .finance-section-count {
-    background: #fffbeb;
-    color: #d97706;
-  }
-
   .finance-section-divider {
     height: 8px;
     margin: 8px 0 0;

+ 31 - 3
web-admin/src/views/pilot-service/pilot-application/ClinicalPaymentTab.vue

@@ -199,7 +199,13 @@
       destroy-on-close
       :close-on-click-modal="false"
     >
-      <el-form label-position="top" class="biz-dialog-form">
+      <el-form
+        ref="receiptFormRef"
+        :model="receiptForm"
+        :rules="receiptFormRules"
+        label-position="top"
+        class="biz-dialog-form"
+      >
         <div class="form-grid-2">
           <el-form-item label="申请单号">
             <span class="view-field-text">{{ receiptPreviewRow?.applicationNo || '—' }}</span>
@@ -216,6 +222,18 @@
               formatAmount(receiptPreviewRow?.paymentAmount ?? receiptPreviewRow?.amount)
             }}</span>
           </el-form-item>
+          <el-form-item label="转账方式" prop="transferType">
+            <el-select
+              v-model="receiptForm.transferType"
+              placeholder="请选择转账方式"
+              style="width: 100%"
+            >
+              <el-option label="微信转账" value="wxzz" />
+              <el-option label="支付宝转账" value="zzbzz" />
+              <el-option label="银行卡转账" value="yhkzz" />
+              <el-option label="现金" value="xj" />
+            </el-select>
+          </el-form-item>
           <el-form-item label="备注" class="form-col-span-2">
             <el-input
               v-model="receiptForm.remark"
@@ -558,7 +576,9 @@
   const receiptSubmitLoading = ref(false)
   const receiptTargetIds = ref<string[]>([])
   const receiptPreviewRow = ref<Record<string, unknown> | null>(null)
+  const receiptFormRef = ref<FormInstance>()
   const receiptForm = reactive({
+    transferType: '',
     remark: '',
     attachments: [] as Array<{
       id: string
@@ -567,6 +587,9 @@
       _uploading?: boolean
     }>
   })
+  const receiptFormRules: FormRules = {
+    transferType: [{ required: true, message: '请选择转账方式', trigger: 'change' }]
+  }
 
   const refundDialogVisible = ref(false)
   const refundSubmitLoading = ref(false)
@@ -733,9 +756,11 @@
     loadColumn(key)
   }
 
-  function resetReceiptForm() {
+  function resetReceiptForm(transferType = '') {
+    receiptForm.transferType = transferType
     receiptForm.remark = ''
     receiptForm.attachments = []
+    receiptFormRef.value?.clearValidate()
   }
 
   function openReceiptDialog(row: Record<string, unknown>) {
@@ -743,7 +768,7 @@
     if (!id) return
     receiptTargetIds.value = [id]
     receiptPreviewRow.value = row
-    resetReceiptForm()
+    resetReceiptForm(String(row.transferType || ''))
     receiptDialogVisible.value = true
   }
 
@@ -788,11 +813,14 @@
 
   async function submitReceipt() {
     if (!receiptTargetIds.value.length) return
+    const valid = await receiptFormRef.value?.validate().catch(() => false)
+    if (!valid) return
     if (receiptForm.attachments.some((f) => f._uploading)) {
       ElMessage.warning('附件上传中,请稍候')
       return
     }
     const payload = {
+      transferType: receiptForm.transferType,
       remark: receiptForm.remark.trim() || undefined,
       transferAttachments: receiptAttachmentsToUrls() || undefined
     }

+ 4 - 3
web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue

@@ -345,7 +345,8 @@
 
   .production-work-order-card__title-band {
     padding: 12px 16px;
-    background: linear-gradient(135deg, #10b981 0%, #059669 100%);
+    background: linear-gradient(180deg, var(--primary-bg, #ecfdf5) 0%, #fff 100%);
+    border-bottom: 1px solid #d1fae5;
   }
 
   .production-work-order-card__head-body {
@@ -377,14 +378,14 @@
   .production-work-order-card__index {
     flex-shrink: 0;
     font-size: 12px;
-    color: rgba(255, 255, 255, 0.72);
+    color: var(--mint-text-muted, #64748b);
     min-width: 20px;
   }
 
   .production-work-order-card__no {
     font-size: 15px;
     font-weight: 600;
-    color: #fff;
+    color: #1e293b;
     font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
     word-break: break-all;
   }

+ 8 - 8
web-admin/src/views/quality-inspection/qc-work-order/QcWorkOrderSampleGroup.vue

@@ -190,21 +190,21 @@
     align-items: center;
     gap: 8px 12px;
     padding: 12px 16px;
-    background: linear-gradient(135deg, #10b981 0%, #059669 100%);
-    border-bottom: none;
+    background: linear-gradient(180deg, var(--primary-bg, #ecfdf5) 0%, #fff 100%);
+    border-bottom: 1px solid #d1fae5;
   }
 
   .qc-sample-row__idx {
     flex-shrink: 0;
     font-size: 12px;
-    color: rgba(255, 255, 255, 0.72);
+    color: var(--mint-text-muted, #64748b);
     min-width: 20px;
   }
 
   .qc-sample-row__code {
     font-size: 14px;
     font-weight: 600;
-    color: #fff;
+    color: #1e293b;
     font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
   }
 
@@ -212,7 +212,7 @@
     flex: 1;
     min-width: 0;
     font-size: 12px;
-    color: rgba(255, 255, 255, 0.88);
+    color: var(--mint-text-muted, #64748b);
     line-height: 1.4;
   }
 
@@ -222,9 +222,9 @@
     font-weight: 600;
     padding: 2px 10px;
     border-radius: 999px;
-    background: rgba(255, 255, 255, 0.18);
-    color: #fff;
-    border: 1px solid rgba(255, 255, 255, 0.35);
+    background: var(--primary-bg, #ecfdf5);
+    color: #047857;
+    border: 1px solid #d1fae5;
   }
 
   .qc-wo-tabs {

Некоторые файлы не были показаны из-за большого количества измененных файлов