feat: restore source parity and harden agent runtime
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""报表水印配置解析(对齐 JNPF preview 行为)"""
|
||||
from __future__ import annotations
|
||||
|
||||
import copy
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
|
||||
DEFAULT_WATERMARK_CONFIG: Dict[str, Any] = {
|
||||
"content": "内部使用",
|
||||
"fontSize": 32,
|
||||
"color": "#B8B8B8",
|
||||
"bold": False,
|
||||
"italic": False,
|
||||
"direction": "ltr",
|
||||
"x": 80,
|
||||
"y": 200,
|
||||
"repeat": True,
|
||||
"spacingX": 200,
|
||||
"spacingY": 200,
|
||||
"rotate": -45,
|
||||
"opacity": 0.2,
|
||||
"showTime": False,
|
||||
"timeFormat": "yyyy-MM-dd",
|
||||
}
|
||||
|
||||
|
||||
def _format_watermark_time(fmt: str, now: Optional[datetime] = None) -> str:
|
||||
dt = now or datetime.now()
|
||||
mapping = {
|
||||
"yyyy": "%Y",
|
||||
"yyyy-MM": "%Y-%m",
|
||||
"yyyy-MM-dd": "%Y-%m-%d",
|
||||
"yyyy-MM-dd HH:mm": "%Y-%m-%d %H:%M",
|
||||
"yyyy-MM-dd HH:mm:ss": "%Y-%m-%d %H:%M:%S",
|
||||
}
|
||||
py_fmt = mapping.get(fmt or "yyyy-MM-dd", "%Y-%m-%d")
|
||||
return dt.strftime(py_fmt)
|
||||
|
||||
|
||||
def resolve_watermark_config(
|
||||
raw_config: Any,
|
||||
*,
|
||||
template_name: str = "",
|
||||
now: Optional[datetime] = None,
|
||||
) -> Dict[str, Any]:
|
||||
"""合并默认项、填充 content,并按 showTime 追加时间文本。"""
|
||||
base = copy.deepcopy(DEFAULT_WATERMARK_CONFIG)
|
||||
if isinstance(raw_config, dict):
|
||||
base.update({k: v for k, v in raw_config.items() if v is not None})
|
||||
if not str(base.get("content") or "").strip():
|
||||
base["content"] = template_name or DEFAULT_WATERMARK_CONFIG["content"]
|
||||
if base.get("showTime"):
|
||||
time_text = _format_watermark_time(str(base.get("timeFormat") or "yyyy-MM-dd"), now)
|
||||
content = str(base.get("content") or "").strip()
|
||||
base["content"] = f"{content} {time_text}".strip()
|
||||
return base
|
||||
|
||||
|
||||
def build_watermark_payload(
|
||||
allow_watermark: bool,
|
||||
raw_config: Any,
|
||||
*,
|
||||
template_name: str = "",
|
||||
now: Optional[datetime] = None,
|
||||
) -> Dict[str, Any]:
|
||||
"""返回前端 Univer / 打印共用的 { show, config }。"""
|
||||
if not allow_watermark:
|
||||
return {"show": False, "config": {}}
|
||||
return {
|
||||
"show": True,
|
||||
"config": resolve_watermark_config(
|
||||
raw_config,
|
||||
template_name=template_name,
|
||||
now=now,
|
||||
),
|
||||
}
|
||||
Reference in New Issue
Block a user