All checks were successful
技能自动化发布 / release (push) Successful in 15s
基于 skill-template 脚手架开发,包含: - 5 张业务表(教职工、请假政策、考勤日历、请假记录、假期余额) - 请假核算引擎(扣薪计算、审批层级判定、年假抵扣) - CLI 入口(import-employees / calculate-leave / render-html) - HTML 审批与扣薪报告生成 - 示例数据与完整测试套件(295 tests passed)
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
"""企业微信成功案例的安全提炼:probe 和 dry-run,不默认发送邀请。"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from dataclasses import asdict
|
||
from typing import Any
|
||
|
||
from service.desktop_session import activate_window, resolve_unique_window
|
||
from service.uia_locator import locate_unique, root_from_window, type_text
|
||
from util.selectors import (
|
||
ADD_CUSTOMER_WINDOW,
|
||
CONTACTS_ENTRY,
|
||
MAIN_WINDOW,
|
||
NEW_CUSTOMER_ROW,
|
||
SEARCH_INPUT,
|
||
)
|
||
|
||
|
||
def probe() -> dict[str, Any]:
|
||
"""最小 probe:主窗 + 通讯录入口。
|
||
|
||
生产技能应对「新的客户 / 添加」等关键节点做更深探测;本函数不等于生产完整度。
|
||
调用前会 maximize 主窗,避免侧栏折叠导致 org_op_new 抖动。
|
||
"""
|
||
main = resolve_unique_window(MAIN_WINDOW)
|
||
activate_window(main, maximize=True)
|
||
root = root_from_window(main)
|
||
contacts = locate_unique(root, CONTACTS_ENTRY)
|
||
payload: dict[str, Any] = {
|
||
"success": True,
|
||
"minimized_probe": True,
|
||
"main_window": asdict(main),
|
||
"contacts_entry": {
|
||
"name": getattr(contacts, "Name", ""),
|
||
"control_type": getattr(contacts, "ControlTypeName", ""),
|
||
},
|
||
}
|
||
# 可选:若已在通讯录页,尝试按 Value 定位「新的客户」行(失败不视为 probe 失败)
|
||
try:
|
||
row = locate_unique(root, NEW_CUSTOMER_ROW)
|
||
payload["new_customer_row"] = {"name": getattr(row, "Name", "")}
|
||
except Exception:
|
||
payload["new_customer_row"] = None
|
||
return payload
|
||
|
||
|
||
def fill_search_dry_run(target: str) -> dict[str, Any]:
|
||
"""要求操作者已打开“添加客户”窗口;只填写搜索框,不提交。"""
|
||
search_window = resolve_unique_window(ADD_CUSTOMER_WINDOW)
|
||
activate_window(search_window, maximize=False)
|
||
root = root_from_window(search_window)
|
||
search_input = locate_unique(root, SEARCH_INPUT)
|
||
type_text(search_input, target, window=search_window)
|
||
return {
|
||
"success": True,
|
||
"mode": "dry-run",
|
||
"message": "已填写搜索条件,未发送邀请",
|
||
}
|