feat: 初始化静态镜像站点仓库

This commit is contained in:
2026-04-08 21:44:32 +08:00
commit 9f9dba6289
2514 changed files with 727963 additions and 0 deletions

View File

@@ -0,0 +1,163 @@
#!/usr/bin/env python3
"""通过 Chrome DevTools Protocol 抓取页面接口响应。"""
from __future__ import annotations
import argparse
import asyncio
import base64
import json
import re
import urllib.request
from pathlib import Path
from typing import Any
import websockets
def load_pages() -> list[dict[str, Any]]:
with urllib.request.urlopen("http://127.0.0.1:9222/json/list") as response:
return json.loads(response.read().decode("utf-8"))
def select_page(pages: list[dict[str, Any]], page_prefix: str) -> dict[str, Any]:
for page in pages:
if page.get("type") != "page":
continue
if page.get("url", "").startswith(page_prefix):
return page
raise RuntimeError(f"未找到匹配页面前缀的标签页: {page_prefix}")
def sanitize_filename(value: str) -> str:
value = re.sub(r"[^a-zA-Z0-9._-]+", "_", value)
return value.strip("._") or "capture"
async def capture_page_apis(
ws_url: str,
navigate_url: str,
api_host_filter: str,
duration: int,
reload_page: bool,
) -> list[dict[str, Any]]:
pending: dict[str, dict[str, Any]] = {}
finished: dict[str, dict[str, Any]] = {}
next_id = 1
async with websockets.connect(ws_url, max_size=50_000_000) as ws:
async def send(method: str, params: dict[str, Any] | None = None) -> dict[str, Any]:
nonlocal next_id
msg_id = next_id
next_id += 1
await ws.send(json.dumps({"id": msg_id, "method": method, "params": params or {}}))
while True:
msg = json.loads(await ws.recv())
if msg.get("id") == msg_id:
return msg
handle_event(msg)
def handle_event(msg: dict[str, Any]) -> None:
method = msg.get("method")
params = msg.get("params", {})
if method == "Network.responseReceived":
response = params.get("response", {})
url = response.get("url", "")
if api_host_filter not in url:
return
resource_type = params.get("type")
if resource_type not in ("XHR", "Fetch", "Preflight"):
return
pending[params["requestId"]] = {
"url": url,
"status": response.get("status"),
"mime_type": response.get("mimeType"),
"resource_type": resource_type,
}
elif method == "Network.loadingFinished":
request_id = params.get("requestId")
if request_id in pending:
finished[request_id] = pending[request_id]
elif method == "Network.loadingFailed":
request_id = params.get("requestId")
pending.pop(request_id, None)
await send("Network.enable", {"maxTotalBufferSize": 100000000, "maxResourceBufferSize": 50000000})
await send("Page.enable")
await send("Runtime.enable")
if reload_page:
await send("Page.reload", {"ignoreCache": True})
else:
await send("Page.navigate", {"url": navigate_url})
end_time = asyncio.get_event_loop().time() + duration
while asyncio.get_event_loop().time() < end_time:
try:
msg = json.loads(await asyncio.wait_for(ws.recv(), timeout=1))
except asyncio.TimeoutError:
continue
handle_event(msg)
results: list[dict[str, Any]] = []
for request_id, meta in finished.items():
body = ""
if meta["resource_type"] in ("XHR", "Fetch"):
reply = await send("Network.getResponseBody", {"requestId": request_id})
payload = reply.get("result", {})
body = payload.get("body", "")
if payload.get("base64Encoded"):
try:
body = base64.b64decode(body).decode("utf-8", errors="ignore")
except Exception: # noqa: BLE001
body = ""
results.append(
{
**meta,
"body_length": len(body),
"body_preview": body[:1000],
"body": body,
}
)
return results
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(description="抓取页面接口响应")
parser.add_argument("--page-prefix", required=True, help="已打开标签页 URL 前缀")
parser.add_argument("--navigate-url", required=True, help="要导航到的真实页面 URL")
parser.add_argument("--api-host-filter", required=True, help="接口域名关键字,例如 app-project-be.sqygj.cn")
parser.add_argument("--duration", type=int, default=10, help="导航后监听秒数")
parser.add_argument("--output", required=True, help="输出 JSON 文件路径")
parser.add_argument("--reload", action="store_true", help="不导航,直接对当前标签页执行 reload")
return parser
def main() -> int:
args = build_parser().parse_args()
try:
pages = load_pages()
page = select_page(pages, args.page_prefix)
results = asyncio.run(
capture_page_apis(
ws_url=page["webSocketDebuggerUrl"],
navigate_url=args.navigate_url,
api_host_filter=args.api_host_filter,
duration=args.duration,
reload_page=args.reload,
)
)
output_path = Path(args.output)
output_path.parent.mkdir(parents=True, exist_ok=True)
output_path.write_text(json.dumps(results, ensure_ascii=False, indent=2), encoding="utf-8")
print(f"已捕获 {len(results)} 条接口响应")
for item in results[:20]:
print(f"{item['status']} {item['resource_type']} {item['url']}")
return 0
except Exception as exc: # noqa: BLE001
print(f"抓取失败: {exc}")
return 1
if __name__ == "__main__":
raise SystemExit(main())

View File

@@ -0,0 +1,20 @@
[
{
"url": "https://app-project-be.sqygj.cn/appproject/project/findByCode",
"status": 200,
"mime_type": "",
"resource_type": "Preflight",
"body_length": 0,
"body_preview": "",
"body": ""
},
{
"url": "https://app-project-be.sqygj.cn/appproject/project/findByCode",
"status": 200,
"mime_type": "application/json",
"resource_type": "XHR",
"body_length": 2408,
"body_preview": "{\"data\":{\"id\":231,\"code\":\"e021fd7d-8365-41cc-a50f-1877c47c4e16\",\"name\":\"循环花园一期\",\"developer\":\"腾龙开发商\",\"floorage\":41980.48,\"carChargeImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20241201/1733065864105_e473b036.jpg\",\"lawFirmSeal\":null,\"greeningArea\":78000.00,\"address\":\"下陆区团城山街道龙湾一品小区\",\"isCommittee\":null,\"needApprove\":1,\"matching\":null,\"planImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/project/community_info_202503059026.jpg\",\"firePassageImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/project/community_info_202503059120.jpg\",\"areaImages\":null,\"spaceGridImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20230915/1694790916671_a974c795.jpg\",\"updateTime\":\"2026-04-01 21:03:58\",\"createTime\":\"2021-07-07 17:17:26\",\"isDelete\":0,\"codeNumber\":\"X39839\",\"nickname\":\"箭楼下社区\",\"province\":\"湖北省\",\"city\":\"黄石市\",\"area\":\"下陆区\",\"street\":\"团城山街道\",\"streetCode\":\"420204004\",\"deliverDate\":\"2010-07-01\",\"architectureDate\":\"2008-07-01\",\"architectureType\":\"高层\",\"houseCount\":38,",
"body": "{\"data\":{\"id\":231,\"code\":\"e021fd7d-8365-41cc-a50f-1877c47c4e16\",\"name\":\"循环花园一期\",\"developer\":\"腾龙开发商\",\"floorage\":41980.48,\"carChargeImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20241201/1733065864105_e473b036.jpg\",\"lawFirmSeal\":null,\"greeningArea\":78000.00,\"address\":\"下陆区团城山街道龙湾一品小区\",\"isCommittee\":null,\"needApprove\":1,\"matching\":null,\"planImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/project/community_info_202503059026.jpg\",\"firePassageImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/project/community_info_202503059120.jpg\",\"areaImages\":null,\"spaceGridImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20230915/1694790916671_a974c795.jpg\",\"updateTime\":\"2026-04-01 21:03:58\",\"createTime\":\"2021-07-07 17:17:26\",\"isDelete\":0,\"codeNumber\":\"X39839\",\"nickname\":\"箭楼下社区\",\"province\":\"湖北省\",\"city\":\"黄石市\",\"area\":\"下陆区\",\"street\":\"团城山街道\",\"streetCode\":\"420204004\",\"deliverDate\":\"2010-07-01\",\"architectureDate\":\"2008-07-01\",\"architectureType\":\"高层\",\"houseCount\":38,\"buildingCount\":38,\"houseMemberCount\":173,\"companyId\":null,\"companyName\":null,\"manageArea\":13848.00,\"manageType\":7,\"programmeImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/project/community_info_202503059044.jpg\",\"dbName\":\"MHXHKJ\",\"longitude\":\"119.919847\",\"latitude\":\"31.016537\",\"payArea\":3440.51,\"presentation\":\"明珠佳园小区东至明珠路、南至城北路、西至金宇花园、北至小路,周边交通便利,配套完善,环境优美。\",\"image\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20220320/1647777882795_f65e03a8.jpg\",\"distance\":null,\"star\":5,\"type\":2,\"miniCode\":null,\"orderPrice\":20.00,\"layout\":\"一室一厅\",\"payMethod\":2,\"userNum\":null,\"unUserNum\":null,\"manageUnit\":\"测试\",\"signature\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20230414/1681480367954_5c56e2c5.png\",\"equipmentGridImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20230915/1694790826067_3823d4b3.jpg\",\"insideGridImages\":null,\"cleanGridImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20230915/1694790891460_cf000477.jpg\",\"safetyGridImages\":null,\"afforestationGridImages\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20230915/1694790916671_a974c795.jpg\",\"fireprotectionGridImages\":null,\"elevatorGridImages\":null,\"caryardGridImages\":null,\"energyGridImages\":null,\"fiveaGridImages\":null,\"typhoonGridImages\":null,\"incrementGmt\":\"2026-04-01 06:06:12\",\"lawFirmName\":null,\"lawFirmContractSummary\":null,\"lawFirmReminder\":null},\"code\":0,\"message\":\"success.\",\"ok\":true}"
}
]

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
[]

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

View File

@@ -0,0 +1,3 @@
{
"language": "zh"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

View File

@@ -0,0 +1,44 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>企业服务平台 - 运行态镜像</title>
<style>
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", sans-serif;
background: #0c1424;
color: #eef4ff;
}
#mirror-loading {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 12px;
letter-spacing: 0.02em;
}
#mirror-loading small {
color: #9aabc7;
}
</style>
</head>
<body>
<div id="mirror-loading">
<div>正在启动企业服务平台运行态镜像…</div>
<small>会预置本地存储、会话和接口 mock</small>
</div>
<div id="app"></div>
<script>
(function () {
var script = document.createElement("script");
script.src = "./runtime-bootstrap.js" + (location.search || "");
document.body.appendChild(script);
})();
</script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 KiB

View File

@@ -0,0 +1,812 @@
[
{
"id": 2,
"menuName": "点击进入【项目运营平台】",
"menuType": 3,
"menuUrl": "/404",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 4,
"menuName": "运营指数",
"menuType": 3,
"menuUrl": "/404",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 5,
"menuName": "人事看板",
"menuType": 3,
"menuUrl": "/404",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 6,
"menuName": "财务看板",
"menuType": 3,
"menuUrl": "/r2cockpit/microbrain/finance",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 7,
"menuName": "设备看板",
"menuType": 3,
"menuUrl": "/r2cockpit/microbrain/equipment",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 8,
"menuName": "车场看板",
"menuType": 3,
"menuUrl": "/r2cockpit/microbrain/parkingLot",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 9,
"menuName": "物业费报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/propertyFeeReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 10,
"menuName": "车场报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/parkingLotReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 11,
"menuName": "全年收入报表",
"menuType": 3,
"menuUrl": "/404",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 12,
"menuName": "全员收费报表",
"menuType": 3,
"menuUrl": "/404",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 13,
"menuName": "收入考核报表",
"menuType": 3,
"menuUrl": "/404",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 14,
"menuName": "计划工单报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/planTaskReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 15,
"menuName": "非计划工单报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/workOrderReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 16,
"menuName": "工单耗时统计",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/dataReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 17,
"menuName": "耗能报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/consumeReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 18,
"menuName": "作业网格台账报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/jobGridReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 19,
"menuName": "合同保障报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/contractGuaranteeReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 20,
"menuName": "合同保障明细报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/detailedContractGuaranteeReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 21,
"menuName": "合同计划执行报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/contractPlanReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 22,
"menuName": "体检统计报表",
"menuType": 3,
"menuUrl": "/404",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 23,
"menuName": "公众号拉新报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/officialAccount",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 24,
"menuName": "催收跟踪报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/collectionTracking",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 25,
"menuName": "企业收费项报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/collectionRate",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 26,
"menuName": "拜访工作报表",
"menuType": 3,
"menuUrl": "/r2cockpit/cloudData/visitWorkReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 27,
"menuName": "月收入考核",
"menuType": 3,
"menuUrl": "/r2cockpit/assessment/monthly",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 28,
"menuName": "企业信息",
"menuType": 3,
"menuUrl": "/companyMetadata/companyInfo",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 29,
"menuName": "成员",
"menuType": 3,
"menuUrl": "/companyMetadata/member",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 30,
"menuName": "组织架构",
"menuType": 3,
"menuUrl": "/companyMetadata/institution",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 31,
"menuName": "企微通讯录",
"menuType": 3,
"menuUrl": "/companyMetadata/organizational",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 32,
"menuName": "分公司管理",
"menuType": 3,
"menuUrl": "/companyMetadata/branchOfficeManage",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 33,
"menuName": "物料规范",
"menuType": 3,
"menuUrl": "/companyMetadata/materialStandard",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 34,
"menuName": "社区动力方程",
"menuType": 3,
"menuUrl": "/companyMetadata/communityDynamic",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 35,
"menuName": "财务规范",
"menuType": 3,
"menuUrl": "/companyMetadata/financeStandard",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 36,
"menuName": "审批模板",
"menuType": 3,
"menuUrl": "/companyMetadata/approveMan",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 37,
"menuName": "商户配置",
"menuType": 3,
"menuUrl": "/companyMetadata/merchant",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 38,
"menuName": "资质管理",
"menuType": 3,
"menuUrl": "/companyMetadata/qualificationMan",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 39,
"menuName": "企业收费项",
"menuType": 3,
"menuUrl": "/companyMetadata/feeItem",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 40,
"menuName": "满意度权重配置",
"menuType": 3,
"menuUrl": "/companyMetadata/satisfactionWeight",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 41,
"menuName": "财务数据",
"menuType": 3,
"menuUrl": "/companyMetadata/financeData",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 42,
"menuName": "人才测评",
"menuType": 3,
"menuUrl": "/personnelMerits/assessment",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 43,
"menuName": "招聘管理",
"menuType": 3,
"menuUrl": "/personnelMerits/recruitManage",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 44,
"menuName": "人事档案",
"menuType": 3,
"menuUrl": "/personnelMerits/personnelFiles",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 45,
"menuName": "资质匹配",
"menuType": 3,
"menuUrl": "/personnelMerits/qualification",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 46,
"menuName": "培训管理",
"menuType": 3,
"menuUrl": "/personnelMerits/trainingManage",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 47,
"menuName": "考勤管理",
"menuType": 3,
"menuUrl": "/personnelMerits/checkWorkManage",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 48,
"menuName": "薪酬管理",
"menuType": 3,
"menuUrl": "/personnelMerits/payManage",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 49,
"menuName": "工资发放",
"menuType": 3,
"menuUrl": "/personnelMerits/salaryPayment",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 50,
"menuName": "员工离任报告",
"menuType": 3,
"menuUrl": "/personnelMerits/employeeQuitReport",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 51,
"menuName": "人事绩效管理",
"menuType": 3,
"menuUrl": "/personnelMerits/humanEffectManage",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 52,
"menuName": "价值换算",
"menuType": 3,
"menuUrl": "/personnelMerits/laborValue",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 53,
"menuName": "离职管控",
"menuType": 3,
"menuUrl": "/personnelMerits/leaveControl",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 54,
"menuName": "法务纠纷",
"menuType": 3,
"menuUrl": "/personnelMerits/legalDispute",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 55,
"menuName": "工伤人员",
"menuType": 3,
"menuUrl": "/personnelMerits/injuredPersonnel",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 56,
"menuName": "供应商库",
"menuType": 3,
"menuUrl": "/supplierManage/supplierStock",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 57,
"menuName": "合同管理",
"menuType": 3,
"menuUrl": "/supplierManage/contractManage",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 58,
"menuName": "供应商微脑",
"menuType": 3,
"menuUrl": "/supplierManage/supplierMicrobrain",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 59,
"menuName": "调查题库",
"menuType": 3,
"menuUrl": "/satisfaction/questionBank",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 60,
"menuName": "调查问卷",
"menuType": 3,
"menuUrl": "/satisfaction/questionnaire",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 61,
"menuName": "调查报告",
"menuType": 3,
"menuUrl": "/satisfaction/report",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 62,
"menuName": "整改跟踪",
"menuType": 3,
"menuUrl": "/satisfaction/tracking",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 63,
"menuName": "应用列表",
"menuType": 3,
"menuUrl": "/appStore/applicationList",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 64,
"menuName": "我的权益",
"menuType": 3,
"menuUrl": "/appStore/myRights",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 65,
"menuName": "短信通道",
"menuType": 3,
"menuUrl": "/appStore/shortMessage",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 66,
"menuName": "运营活动",
"menuType": 3,
"menuUrl": "/appStore/operational",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 67,
"menuName": "合同管理",
"menuType": 3,
"menuUrl": "/appStore/saasContract",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 68,
"menuName": "首页配置",
"menuType": 3,
"menuUrl": "/Miniprogram/homeSet",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 69,
"menuName": "邻里配置",
"menuType": 3,
"menuUrl": "/Miniprogram/NBHConfig",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 70,
"menuName": "服务配置",
"menuType": 3,
"menuUrl": "/Miniprogram/serviceConfig",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 71,
"menuName": "小程序用户",
"menuType": 3,
"menuUrl": "/operateMan/miniprogramUser",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 72,
"menuName": "活跃运营",
"menuType": 3,
"menuUrl": "/operateMan/activeStatistics",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 73,
"menuName": "智能催收",
"menuType": 3,
"menuUrl": "/operateMan/intelligentCollection",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 74,
"menuName": "安全生产",
"menuType": 3,
"menuUrl": "/operateMan/safeProduction",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 75,
"menuName": "作业工单",
"menuType": 3,
"menuUrl": "/operateMan/workOrder",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 76,
"menuName": "项目拜访配置",
"menuType": 3,
"menuUrl": "/operateMan/smsVisitConfig",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 77,
"menuName": "催收委案",
"menuType": 3,
"menuUrl": "/operateMan/collectionCaseAssignment",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 78,
"menuName": "微信客户",
"menuType": 3,
"menuUrl": "/customerOperations/WeChatList",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 79,
"menuName": "标签管理",
"menuType": 3,
"menuUrl": "/customerOperations/tagList",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 80,
"menuName": "通知公告",
"menuType": 3,
"menuUrl": "/contentOperations/noticeAnnouncement",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 81,
"menuName": "知识图谱应用",
"menuType": 3,
"menuUrl": "/trainingPush/knowledge",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 82,
"menuName": "品质抽样",
"menuType": 3,
"menuUrl": "/trainingPush/sampling",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 83,
"menuName": "人事设置",
"menuType": 3,
"menuUrl": "/systemManage/personnelSetting",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 84,
"menuName": "角色权限管理",
"menuType": 3,
"menuUrl": "/systemManage/permissions",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 85,
"menuName": "操作日志",
"menuType": 3,
"menuUrl": "/systemManage/operationLog",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 86,
"menuName": "高级设置",
"menuType": 3,
"menuUrl": "/systemManage/advancedSetting",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 87,
"menuName": "驾驶舱设置",
"menuType": 3,
"menuUrl": "/systemManage/cockpitConfig",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 88,
"menuName": "指数设置",
"menuType": 3,
"menuUrl": "/systemManage/indexConfig",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 89,
"menuName": "审核记录",
"menuType": 3,
"menuUrl": "/government/auditRecords",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 90,
"menuName": "企业档案",
"menuType": 3,
"menuUrl": "/government/information/enterpriseArchives",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 91,
"menuName": "从业人员",
"menuType": 3,
"menuUrl": "/government/information/practitioner",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
},
{
"id": 92,
"menuName": "项目档案",
"menuType": 3,
"menuUrl": "/government/projectArchive",
"disableds": "Y",
"lastLeaf": 0,
"menuChildren": []
}
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 KiB

View File

@@ -0,0 +1,682 @@
{
"/404": {
"src": "/hc-etms.sqygj.cn/404/",
"title": "体检统计报表"
},
"/r2cockpit/microbrain/finance": {
"src": "/hc-etms.sqygj.cn/r2cockpit/microbrain/finance/",
"title": "财务看板"
},
"/r2cockpit/microbrain/equipment": {
"src": "/hc-etms.sqygj.cn/r2cockpit/microbrain/equipment/",
"title": "设备看板"
},
"/r2cockpit/microbrain/parkingLot": {
"src": "/hc-etms.sqygj.cn/r2cockpit/microbrain/parkingLot/",
"title": "车场看板"
},
"/r2cockpit/cloudData/propertyFeeReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/propertyFeeReport/",
"title": "物业费报表"
},
"/r2cockpit/cloudData/parkingLotReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/parkingLotReport/",
"title": "车场报表"
},
"/r2cockpit/cloudData/planTaskReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/planTaskReport/",
"title": "计划工单报表"
},
"/r2cockpit/cloudData/workOrderReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/workOrderReport/",
"title": "非计划工单报表"
},
"/r2cockpit/cloudData/dataReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/dataReport/",
"title": "工单耗时统计"
},
"/r2cockpit/cloudData/consumeReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/consumeReport/",
"title": "耗能报表"
},
"/r2cockpit/cloudData/jobGridReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/jobGridReport/",
"title": "作业网格台账报表"
},
"/r2cockpit/cloudData/contractGuaranteeReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/contractGuaranteeReport/",
"title": "合同保障报表"
},
"/r2cockpit/cloudData/detailedContractGuaranteeReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/detailedContractGuaranteeReport/",
"title": "合同保障明细报表"
},
"/r2cockpit/cloudData/contractPlanReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/contractPlanReport/",
"title": "合同计划执行报表"
},
"/r2cockpit/cloudData/officialAccount": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/officialAccount/",
"title": "公众号拉新报表"
},
"/r2cockpit/cloudData/collectionTracking": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/collectionTracking/",
"title": "催收跟踪报表"
},
"/r2cockpit/cloudData/collectionRate": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/collectionRate/",
"title": "企业收费项报表"
},
"/r2cockpit/cloudData/visitWorkReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/visitWorkReport/",
"title": "拜访工作报表"
},
"/r2cockpit/assessment/monthly": {
"src": "/hc-etms.sqygj.cn/r2cockpit/assessment/monthly/",
"title": "月收入考核"
},
"/companyMetadata/companyInfo": {
"src": "/hc-etms.sqygj.cn/companyMetadata/companyInfo/",
"title": "企业信息"
},
"/companyMetadata/member": {
"src": "/hc-etms.sqygj.cn/companyMetadata/member/",
"title": "成员"
},
"/companyMetadata/institution": {
"src": "/hc-etms.sqygj.cn/companyMetadata/institution/",
"title": "组织架构"
},
"/companyMetadata/organizational": {
"src": "/hc-etms.sqygj.cn/companyMetadata/organizational/",
"title": "企微通讯录"
},
"/companyMetadata/branchOfficeManage": {
"src": "/hc-etms.sqygj.cn/companyMetadata/branchOfficeManage/",
"title": "分公司管理"
},
"/companyMetadata/materialStandard": {
"src": "/hc-etms.sqygj.cn/companyMetadata/materialStandard/",
"title": "物料规范"
},
"/companyMetadata/communityDynamic": {
"src": "/hc-etms.sqygj.cn/companyMetadata/communityDynamic/",
"title": "社区动力方程"
},
"/companyMetadata/financeStandard": {
"src": "/hc-etms.sqygj.cn/companyMetadata/financeStandard/",
"title": "财务规范"
},
"/companyMetadata/approveMan": {
"src": "/hc-etms.sqygj.cn/companyMetadata/approveMan/",
"title": "审批模板"
},
"/companyMetadata/merchant": {
"src": "/hc-etms.sqygj.cn/companyMetadata/merchant/",
"title": "商户配置"
},
"/companyMetadata/qualificationMan": {
"src": "/hc-etms.sqygj.cn/companyMetadata/qualificationMan/",
"title": "资质管理"
},
"/companyMetadata/feeItem": {
"src": "/hc-etms.sqygj.cn/companyMetadata/feeItem/",
"title": "企业收费项"
},
"/companyMetadata/satisfactionWeight": {
"src": "/hc-etms.sqygj.cn/companyMetadata/satisfactionWeight/",
"title": "满意度权重配置"
},
"/companyMetadata/financeData": {
"src": "/hc-etms.sqygj.cn/companyMetadata/financeData/",
"title": "财务数据"
},
"/personnelMerits/assessment": {
"src": "/hc-etms.sqygj.cn/personnelMerits/assessment/",
"title": "人才测评"
},
"/personnelMerits/recruitManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/recruitManage/",
"title": "招聘管理"
},
"/personnelMerits/personnelFiles": {
"src": "/hc-etms.sqygj.cn/personnelMerits/personnelFiles/",
"title": "人事档案"
},
"/personnelMerits/qualification": {
"src": "/hc-etms.sqygj.cn/personnelMerits/qualification/",
"title": "资质匹配"
},
"/personnelMerits/trainingManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/trainingManage/",
"title": "培训管理"
},
"/personnelMerits/checkWorkManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/checkWorkManage/",
"title": "考勤管理"
},
"/personnelMerits/payManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/payManage/",
"title": "薪酬管理"
},
"/personnelMerits/salaryPayment": {
"src": "/hc-etms.sqygj.cn/personnelMerits/salaryPayment/",
"title": "工资发放"
},
"/personnelMerits/employeeQuitReport": {
"src": "/hc-etms.sqygj.cn/personnelMerits/employeeQuitReport/",
"title": "员工离任报告"
},
"/personnelMerits/humanEffectManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/humanEffectManage/",
"title": "人事绩效管理"
},
"/personnelMerits/laborValue": {
"src": "/hc-etms.sqygj.cn/personnelMerits/laborValue/",
"title": "价值换算"
},
"/personnelMerits/leaveControl": {
"src": "/hc-etms.sqygj.cn/personnelMerits/leaveControl/",
"title": "离职管控"
},
"/personnelMerits/legalDispute": {
"src": "/hc-etms.sqygj.cn/personnelMerits/legalDispute/",
"title": "法务纠纷"
},
"/personnelMerits/injuredPersonnel": {
"src": "/hc-etms.sqygj.cn/personnelMerits/injuredPersonnel/",
"title": "工伤人员"
},
"/supplierManage/supplierStock": {
"src": "/hc-etms.sqygj.cn/supplierManage/supplierStock/",
"title": "供应商库"
},
"/supplierManage/contractManage": {
"src": "/hc-etms.sqygj.cn/supplierManage/contractManage/",
"title": "合同管理"
},
"/supplierManage/supplierMicrobrain": {
"src": "/hc-etms.sqygj.cn/supplierManage/supplierMicrobrain/",
"title": "供应商微脑"
},
"/satisfaction/questionBank": {
"src": "/hc-etms.sqygj.cn/satisfaction/questionBank/",
"title": "调查题库"
},
"/satisfaction/questionnaire": {
"src": "/hc-etms.sqygj.cn/satisfaction/questionnaire/",
"title": "调查问卷"
},
"/satisfaction/report": {
"src": "/hc-etms.sqygj.cn/satisfaction/report/",
"title": "调查报告"
},
"/satisfaction/tracking": {
"src": "/hc-etms.sqygj.cn/satisfaction/tracking/",
"title": "整改跟踪"
},
"/appStore/applicationList": {
"src": "/hc-etms.sqygj.cn/appStore/applicationList/",
"title": "应用列表"
},
"/appStore/myRights": {
"src": "/hc-etms.sqygj.cn/appStore/myRights/",
"title": "我的权益"
},
"/appStore/shortMessage": {
"src": "/hc-etms.sqygj.cn/appStore/shortMessage/",
"title": "短信通道"
},
"/appStore/operational": {
"src": "/hc-etms.sqygj.cn/appStore/operational/",
"title": "运营活动"
},
"/appStore/saasContract": {
"src": "/hc-etms.sqygj.cn/appStore/saasContract/",
"title": "合同管理"
},
"/Miniprogram/homeSet": {
"src": "/hc-etms.sqygj.cn/Miniprogram/homeSet/",
"title": "首页配置"
},
"/Miniprogram/NBHConfig": {
"src": "/hc-etms.sqygj.cn/Miniprogram/NBHConfig/",
"title": "邻里配置"
},
"/Miniprogram/serviceConfig": {
"src": "/hc-etms.sqygj.cn/Miniprogram/serviceConfig/",
"title": "服务配置"
},
"/operateMan/miniprogramUser": {
"src": "/hc-etms.sqygj.cn/operateMan/miniprogramUser/",
"title": "小程序用户"
},
"/operateMan/activeStatistics": {
"src": "/hc-etms.sqygj.cn/operateMan/activeStatistics/",
"title": "活跃运营"
},
"/operateMan/intelligentCollection": {
"src": "/hc-etms.sqygj.cn/operateMan/intelligentCollection/",
"title": "智能催收"
},
"/operateMan/safeProduction": {
"src": "/hc-etms.sqygj.cn/operateMan/safeProduction/",
"title": "安全生产"
},
"/operateMan/workOrder": {
"src": "/hc-etms.sqygj.cn/operateMan/workOrder/",
"title": "作业工单"
},
"/operateMan/smsVisitConfig": {
"src": "/hc-etms.sqygj.cn/operateMan/smsVisitConfig/",
"title": "项目拜访配置"
},
"/operateMan/collectionCaseAssignment": {
"src": "/hc-etms.sqygj.cn/operateMan/collectionCaseAssignment/",
"title": "催收委案"
},
"/customerOperations/WeChatList": {
"src": "/hc-etms.sqygj.cn/customerOperations/WeChatList/",
"title": "微信客户"
},
"/customerOperations/tagList": {
"src": "/hc-etms.sqygj.cn/customerOperations/tagList/",
"title": "标签管理"
},
"/contentOperations/noticeAnnouncement": {
"src": "/hc-etms.sqygj.cn/contentOperations/noticeAnnouncement/",
"title": "通知公告"
},
"/trainingPush/knowledge": {
"src": "/hc-etms.sqygj.cn/trainingPush/knowledge/",
"title": "知识图谱应用"
},
"/trainingPush/sampling": {
"src": "/hc-etms.sqygj.cn/trainingPush/sampling/",
"title": "品质抽样"
},
"/systemManage/personnelSetting": {
"src": "/hc-etms.sqygj.cn/systemManage/personnelSetting/",
"title": "人事设置"
},
"/systemManage/permissions": {
"src": "/hc-etms.sqygj.cn/systemManage/permissions/",
"title": "角色权限管理"
},
"/systemManage/operationLog": {
"src": "/hc-etms.sqygj.cn/systemManage/operationLog/",
"title": "操作日志"
},
"/systemManage/advancedSetting": {
"src": "/hc-etms.sqygj.cn/systemManage/advancedSetting/",
"title": "高级设置"
},
"/systemManage/cockpitConfig": {
"src": "/hc-etms.sqygj.cn/systemManage/cockpitConfig/",
"title": "驾驶舱设置"
},
"/systemManage/indexConfig": {
"src": "/hc-etms.sqygj.cn/systemManage/indexConfig/",
"title": "指数设置"
},
"/government/auditRecords": {
"src": "/hc-etms.sqygj.cn/government/auditRecords/",
"title": "审核记录"
},
"/government/information/enterpriseArchives": {
"src": "/hc-etms.sqygj.cn/government/information/enterpriseArchives/",
"title": "企业档案"
},
"/government/information/practitioner": {
"src": "/hc-etms.sqygj.cn/government/information/practitioner/",
"title": "从业人员"
},
"/government/projectArchive": {
"src": "/hc-etms.sqygj.cn/government/projectArchive/",
"title": "项目档案"
},
"/dashboard": {
"src": "/hc-etms.sqygj.cn/dashboard/__query_3cc8885b97/",
"title": "首页"
},
"/": {
"src": "/hc-etms.sqygj.cn/dashboard/__query_3cc8885b97/",
"title": "首页"
},
"/goToProject": {
"src": "/__mirror/runtime/hc-pos-dashboard/#/dashboard",
"title": "点击进入【项目运营平台】"
},
"/finance": {
"src": "/hc-etms.sqygj.cn/r2cockpit/microbrain/finance/",
"title": "财务看板"
},
"/equipment": {
"src": "/hc-etms.sqygj.cn/r2cockpit/microbrain/equipment/",
"title": "设备看板"
},
"/parkingLot": {
"src": "/hc-etms.sqygj.cn/r2cockpit/microbrain/parkingLot/",
"title": "车场看板"
},
"/propertyFeeReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/propertyFeeReport/",
"title": "物业费报表"
},
"/parkingLotReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/parkingLotReport/",
"title": "车场报表"
},
"/planTaskReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/planTaskReport/",
"title": "计划工单报表"
},
"/workOrderReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/workOrderReport/",
"title": "非计划工单报表"
},
"/dataReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/dataReport/",
"title": "工单耗时统计"
},
"/consumeReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/consumeReport/",
"title": "耗能报表"
},
"/jobGridReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/jobGridReport/",
"title": "作业网格台账报表"
},
"/contractGuaranteeReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/contractGuaranteeReport/",
"title": "合同保障报表"
},
"/detailedContractGuaranteeReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/detailedContractGuaranteeReport/",
"title": "合同保障明细报表"
},
"/contractPlanReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/contractPlanReport/",
"title": "合同计划执行报表"
},
"/officialAccount": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/officialAccount/",
"title": "公众号拉新报表"
},
"/collectionTracking": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/collectionTracking/",
"title": "催收跟踪报表"
},
"/collectionRate": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/collectionRate/",
"title": "企业收费项报表"
},
"/visitWorkReport": {
"src": "/hc-etms.sqygj.cn/r2cockpit/cloudData/visitWorkReport/",
"title": "拜访工作报表"
},
"/monthly": {
"src": "/hc-etms.sqygj.cn/r2cockpit/assessment/monthly/",
"title": "月收入考核"
},
"/companyInfo": {
"src": "/hc-etms.sqygj.cn/companyMetadata/companyInfo/",
"title": "企业信息"
},
"/member": {
"src": "/hc-etms.sqygj.cn/companyMetadata/member/",
"title": "成员"
},
"/institution": {
"src": "/hc-etms.sqygj.cn/companyMetadata/institution/",
"title": "组织架构"
},
"/organizational": {
"src": "/hc-etms.sqygj.cn/companyMetadata/organizational/",
"title": "企微通讯录"
},
"/branchOfficeManage": {
"src": "/hc-etms.sqygj.cn/companyMetadata/branchOfficeManage/",
"title": "分公司管理"
},
"/materialStandard": {
"src": "/hc-etms.sqygj.cn/companyMetadata/materialStandard/",
"title": "物料规范"
},
"/communityDynamic": {
"src": "/hc-etms.sqygj.cn/companyMetadata/communityDynamic/",
"title": "社区动力方程"
},
"/financeStandard": {
"src": "/hc-etms.sqygj.cn/companyMetadata/financeStandard/",
"title": "财务规范"
},
"/approveMan": {
"src": "/hc-etms.sqygj.cn/companyMetadata/approveMan/",
"title": "审批模板"
},
"/merchant": {
"src": "/hc-etms.sqygj.cn/companyMetadata/merchant/",
"title": "商户配置"
},
"/qualificationMan": {
"src": "/hc-etms.sqygj.cn/companyMetadata/qualificationMan/",
"title": "资质管理"
},
"/feeItem": {
"src": "/hc-etms.sqygj.cn/companyMetadata/feeItem/",
"title": "企业收费项"
},
"/satisfactionWeight": {
"src": "/hc-etms.sqygj.cn/companyMetadata/satisfactionWeight/",
"title": "满意度权重配置"
},
"/financeData": {
"src": "/hc-etms.sqygj.cn/companyMetadata/financeData/",
"title": "财务数据"
},
"/assessment": {
"src": "/hc-etms.sqygj.cn/personnelMerits/assessment/",
"title": "人才测评"
},
"/recruitManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/recruitManage/",
"title": "招聘管理"
},
"/personnelFiles": {
"src": "/hc-etms.sqygj.cn/personnelMerits/personnelFiles/",
"title": "人事档案"
},
"/qualification": {
"src": "/hc-etms.sqygj.cn/personnelMerits/qualification/",
"title": "资质匹配"
},
"/trainingManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/trainingManage/",
"title": "培训管理"
},
"/checkWorkManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/checkWorkManage/",
"title": "考勤管理"
},
"/payManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/payManage/",
"title": "薪酬管理"
},
"/salaryPayment": {
"src": "/hc-etms.sqygj.cn/personnelMerits/salaryPayment/",
"title": "工资发放"
},
"/employeeQuitReport": {
"src": "/hc-etms.sqygj.cn/personnelMerits/employeeQuitReport/",
"title": "员工离任报告"
},
"/humanEffectManage": {
"src": "/hc-etms.sqygj.cn/personnelMerits/humanEffectManage/",
"title": "人事绩效管理"
},
"/laborValue": {
"src": "/hc-etms.sqygj.cn/personnelMerits/laborValue/",
"title": "价值换算"
},
"/leaveControl": {
"src": "/hc-etms.sqygj.cn/personnelMerits/leaveControl/",
"title": "离职管控"
},
"/legalDispute": {
"src": "/hc-etms.sqygj.cn/personnelMerits/legalDispute/",
"title": "法务纠纷"
},
"/injuredPersonnel": {
"src": "/hc-etms.sqygj.cn/personnelMerits/injuredPersonnel/",
"title": "工伤人员"
},
"/supplierStock": {
"src": "/hc-etms.sqygj.cn/supplierManage/supplierStock/",
"title": "供应商库"
},
"/contractManage": {
"src": "/hc-etms.sqygj.cn/supplierManage/contractManage/",
"title": "合同管理"
},
"/supplierMicrobrain": {
"src": "/hc-etms.sqygj.cn/supplierManage/supplierMicrobrain/",
"title": "供应商微脑"
},
"/questionBank": {
"src": "/hc-etms.sqygj.cn/satisfaction/questionBank/",
"title": "调查题库"
},
"/questionnaire": {
"src": "/hc-etms.sqygj.cn/satisfaction/questionnaire/",
"title": "调查问卷"
},
"/report": {
"src": "/hc-etms.sqygj.cn/satisfaction/report/",
"title": "调查报告"
},
"/tracking": {
"src": "/hc-etms.sqygj.cn/satisfaction/tracking/",
"title": "整改跟踪"
},
"/applicationList": {
"src": "/hc-etms.sqygj.cn/appStore/applicationList/",
"title": "应用列表"
},
"/myRights": {
"src": "/hc-etms.sqygj.cn/appStore/myRights/",
"title": "我的权益"
},
"/shortMessage": {
"src": "/hc-etms.sqygj.cn/appStore/shortMessage/",
"title": "短信通道"
},
"/operational": {
"src": "/hc-etms.sqygj.cn/appStore/operational/",
"title": "运营活动"
},
"/saasContract": {
"src": "/hc-etms.sqygj.cn/supplierManage/contractManage/",
"title": "合同管理"
},
"/homeSet": {
"src": "/hc-etms.sqygj.cn/Miniprogram/homeSet/",
"title": "首页配置"
},
"/NBHConfig": {
"src": "/hc-etms.sqygj.cn/Miniprogram/NBHConfig/",
"title": "邻里配置"
},
"/serviceConfig": {
"src": "/hc-etms.sqygj.cn/Miniprogram/serviceConfig/",
"title": "服务配置"
},
"/miniprogramUser": {
"src": "/hc-etms.sqygj.cn/operateMan/miniprogramUser/",
"title": "小程序用户"
},
"/activeStatistics": {
"src": "/hc-etms.sqygj.cn/operateMan/activeStatistics/",
"title": "活跃运营"
},
"/intelligentCollection": {
"src": "/hc-etms.sqygj.cn/operateMan/intelligentCollection/",
"title": "智能催收"
},
"/safeProduction": {
"src": "/hc-etms.sqygj.cn/operateMan/safeProduction/",
"title": "安全生产"
},
"/workOrder": {
"src": "/hc-etms.sqygj.cn/operateMan/workOrder/",
"title": "作业工单"
},
"/smsVisitConfig": {
"src": "/hc-etms.sqygj.cn/operateMan/smsVisitConfig/",
"title": "项目拜访配置"
},
"/collectionCaseAssignment": {
"src": "/hc-etms.sqygj.cn/operateMan/collectionCaseAssignment/",
"title": "催收委案"
},
"/WeChatList": {
"src": "/hc-etms.sqygj.cn/customerOperations/WeChatList/",
"title": "微信客户"
},
"/tagList": {
"src": "/hc-etms.sqygj.cn/customerOperations/tagList/",
"title": "标签管理"
},
"/noticeAnnouncement": {
"src": "/hc-etms.sqygj.cn/contentOperations/noticeAnnouncement/",
"title": "通知公告"
},
"/knowledge": {
"src": "/hc-etms.sqygj.cn/trainingPush/knowledge/",
"title": "知识图谱应用"
},
"/sampling": {
"src": "/hc-etms.sqygj.cn/trainingPush/sampling/",
"title": "品质抽样"
},
"/personnelSetting": {
"src": "/hc-etms.sqygj.cn/systemManage/personnelSetting/",
"title": "人事设置"
},
"/permissions": {
"src": "/hc-etms.sqygj.cn/systemManage/permissions/",
"title": "角色权限管理"
},
"/operationLog": {
"src": "/hc-etms.sqygj.cn/systemManage/operationLog/",
"title": "操作日志"
},
"/advancedSetting": {
"src": "/hc-etms.sqygj.cn/systemManage/advancedSetting/",
"title": "高级设置"
},
"/cockpitConfig": {
"src": "/hc-etms.sqygj.cn/systemManage/cockpitConfig/",
"title": "驾驶舱设置"
},
"/indexConfig": {
"src": "/hc-etms.sqygj.cn/systemManage/indexConfig/",
"title": "指数设置"
},
"/auditRecords": {
"src": "/hc-etms.sqygj.cn/government/auditRecords/",
"title": "审核记录"
},
"/enterpriseArchives": {
"src": "/hc-etms.sqygj.cn/government/information/enterpriseArchives/",
"title": "企业档案"
},
"/practitioner": {
"src": "/hc-etms.sqygj.cn/government/information/practitioner/",
"title": "从业人员"
},
"/projectArchive": {
"src": "/hc-etms.sqygj.cn/government/projectArchive/",
"title": "项目档案"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
{
"language": "zh",
"Account": "13686801296",
"CToken": "mock-ctoken-hc-etms"
}

View File

@@ -0,0 +1,9 @@
{
"boardInfo": "{\"login\":1,\"org\":1,\"company\":1,\"activation\":1,\"cockpit\":1,\"projectCount\":94,\"houseCount\":4686,\"floorageCount\":2888556.18}",
"companyInfo": "{\"id\":74,\"corpUuid\":\"bfe41d86-d2ad-40a8-b2e4-539a7344314c\",\"fullName\":\"深圳市美好循环科技有限公司\",\"abbreviation\":\"循环科技企业管理后台\",\"contactPeople\":\"社区云\",\"jobName\":\"经理\",\"phoneNumber\":\"13686801296\",\"createDate\":null,\"createBy\":1894,\"updateDate\":\"2026-03-19 16:40:08\",\"updateBy\":12455,\"updateName\":\"万雅颂\",\"status\":1,\"updateSource\":2,\"openAnAccountPerson\":null,\"openAnAccountBank\":null,\"bankAccount\":null,\"osId\":421,\"osUuid\":\"92115dc9-09a2-42da-b9bb-60352c900a53\",\"level\":1,\"logo\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/company/2053_1634872802864.jpg\",\"creditCode\":\"123456789\",\"corporationIdCard\":\"\",\"businessLicence\":null,\"referrer\":\"\",\"legalPerson\":\"社区云 \",\"mobile\":\"13712345678\",\"weixinCorpId\":\"wpr5LtCwAA-l9KHwrl7vReK55ExYqKGg\",\"weixinCorpName\":null,\"weixinSecret\":\"DiXokh95U5Rx_tT-G1fcqyBcn4PtvWaAMGJiONYK_8M\",\"miniCode\":\"https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/company/20220305_1646480923898.jpg\",\"sealImages\":null,\"hrQrcode\":null,\"hrUrl\":null,\"useCockpit\":1,\"postalCode\":12,\"payer\":\"丁思雨\",\"payerMobile\":\"19912341233\",\"publicBank\":\"测试\",\"publicBankNo\":\"125544411111\",\"address\":\"2222222222222222222222222222222222222222222\",\"wxAppid\":null,\"invoiceStatus\":1,\"invoiceKey\":\"456\",\"invoiceSecret\":\"123\",\"discountScope\":\"POINT\",\"pointCopartnerIds\":\"27,34,99\",\"pointCopartnerNames\":null}",
"fromPhone": "13686801296",
"memberId": "12547",
"memberInfor": "{\"id\":12547,\"uuid\":\"f1aee78c-8f95-4985-a67d-3e163db856c2\",\"codeNumber\":\"q7fsx5d0\",\"name\":\"郭晓\",\"phoneNumber\":\"15972712560\",\"accountUuid\":\"f212ba36-2910-4b8d-87e7-57a2bf5f6534\",\"postUuid\":152,\"postName\":\"环境管家-外围\",\"hrPostName\":null,\"sex\":1,\"province\":\"\",\"city\":\"\",\"area\":\"\",\"detailAddress\":\"\",\"idNumber\":\"430121200412272816\",\"birthday\":\"2004-12-27\",\"createDate\":\"2026-03-27 15:40:45\",\"createBy\":null,\"updateDate\":\"2026-03-27 15:40:45\",\"updateBy\":null,\"isStop\":1,\"companyId\":421,\"englishName\":\"\",\"country\":\"\",\"nation\":\"\",\"nativePlace\":\"\",\"maritalStatus\":null,\"height\":\"\",\"weight\":\"\",\"constellation\":null,\"zodiacSign\":null,\"healthCondition\":\"\",\"politicCountenance\":null,\"email\":\"\",\"expertise\":\"\",\"hobby\":\"\",\"urgentPerson\":\"\",\"urgentPhone\":\"\",\"archivesSource\":3,\"blacklist\":0,\"osId\":598,\"osName\":\"博万物\",\"certificateType\":1,\"certificateAddress\":null,\"education\":5,\"school\":null,\"major\":null,\"remark\":null,\"creatorName\":null,\"updaterName\":null,\"fileUrl\":null,\"accountNumber\":null,\"bankName\":null,\"branch\":null,\"source\":null,\"accountName\":null,\"appId\":null,\"operatorId\":null,\"operatorUuid\":null,\"operatorName\":null,\"operatingTime\":null}",
"roleId": "97",
"userInfo": "{\"id\":1893,\"uuid\":\"f4183b10-db0a-41fa-bb54-5a35659c0ee2\",\"accountName\":\"13686801296\",\"accountPassword\":\"d2fe469654fe4722a3c185edded3d75d\",\"passwordUpdateTime\":null,\"openid\":null,\"token\":null,\"retoken\":null,\"isDelete\":0,\"createDate\":null,\"createBy\":null,\"updateDate\":null,\"updateBy\":null}"
}

View File

@@ -0,0 +1,236 @@
const MENU_FILE = "./menu-seed.json";
const STORAGE_FILE = "./storage-seed.json";
let menuPromise = null;
let storagePromise = null;
self.addEventListener("install", (event) => {
self.skipWaiting();
event.waitUntil(Promise.all([loadMenu(), loadStorage()]));
});
self.addEventListener("activate", (event) => {
event.waitUntil(self.clients.claim());
});
self.addEventListener("fetch", (event) => {
const url = new URL(event.request.url);
if (!(url.pathname.startsWith("/hakocompany/") || url.pathname.startsWith("/company/") || url.hostname.includes("app-company-be.sqygj.cn"))) {
return;
}
event.respondWith(handleApiRequest(event.request));
});
async function loadMenu() {
if (menuPromise) {
return menuPromise;
}
menuPromise = fetch(MENU_FILE, { cache: "no-store" })
.then((response) => (response.ok ? response.json() : []))
.catch(() => []);
return menuPromise;
}
async function loadStorage() {
if (storagePromise) {
return storagePromise;
}
storagePromise = fetch(STORAGE_FILE, { cache: "no-store" })
.then((response) => (response.ok ? response.json() : {}))
.catch(() => ({}));
return storagePromise;
}
function ok(data) {
return {
data,
code: 0,
message: "mock success.",
ok: true
};
}
function paged(records = []) {
return ok({
rowsCount: records.length,
pageNumber: 1,
pageSize: 10,
pageCount: records.length ? 1 : 0,
records
});
}
function parseJsonMaybe(value, fallback = {}) {
try {
return JSON.parse(value || "{}");
} catch (_error) {
return fallback;
}
}
async function handleApiRequest(request) {
if (request.method === "OPTIONS") {
return new Response("", {
status: 200,
headers: corsHeaders("text/plain;charset=utf-8")
});
}
const storage = await loadStorage();
const menu = await loadMenu();
const companyInfo = parseJsonMaybe(storage.companyInfo);
const userInfo = parseJsonMaybe(storage.userInfo);
const boardInfo = parseJsonMaybe(storage.boardInfo);
const memberInfo = parseJsonMaybe(storage.memberInfor);
const url = new URL(request.url);
const path = url.pathname;
if (path.includes("/hakocompany/account/")) {
return json(ok({
companyAuthApplyOrderRespDTOS: [companyInfo],
menuSelectAllResponseDTOS: menu,
companyAuthApplyOrderRespDTO: companyInfo
}));
}
if (path.includes("/company/member/findById")) {
return json(ok(memberInfo));
}
if (path.includes("/company/organizationalStructure/statusBoard")) {
return json(ok({
login: boardInfo.login || 1,
org: boardInfo.org || 1,
company: boardInfo.company || 1,
activation: boardInfo.activation || 1,
cockpit: boardInfo.cockpit || 1,
projectCount: boardInfo.projectCount || 94,
houseCount: boardInfo.houseCount || 4686,
floorageCount: boardInfo.floorageCount || 2888556.18
}));
}
if (path.includes("/company/organizationalStructure/dueNum")) {
return json(ok({
projectGoodsDueNum: 3,
smsSurplusNum: 11042,
contractDueNum: 1,
memberCertificateDueNum: 0
}));
}
if (path.includes("/hakocompany/RightsProject/expireSchemeDetail")) {
return json(ok({
projectGoodsDueNum: 3,
smsSurplusNum: 11042,
contractDueNum: 1,
memberCertificateDueNum: 0
}));
}
if (path.includes("/hakocompany/PlatformMessage/noticePageList")) {
return json(paged([
{ id: 1, title: "企业平台通知", createTime: "2026-04-01 22:00:00", content: "这是企业服务平台的本地 mock 通知。" }
]));
}
if (path.includes("/hakocompany/PlatformMessage/checkMessage")) {
return json(ok(false));
}
if (path.includes("/hakocompany/AgentConfig/getAgentUrl")) {
return json(ok("https://example.com/mock-etms-agent"));
}
if (path.includes("/hakocompany/SatisfactionEvaluate/checkEvaluateTime")) {
return json(ok(false));
}
if (path.includes("/hakocompany/OperationalGuidance/pageList")) {
return json(paged([
{ id: 1, title: "合同管理", tag: "操作指引" },
{ id: 2, title: "事务报表", tag: "操作指引" },
{ id: 3, title: "财务—常规配置", tag: "操作指引" }
]));
}
if (path.includes("/hakocompany/TrainingInfo/pageList")) {
return json(paged([]));
}
if (path.includes("/hakocompany/Company/") || path.includes("/company/Company/")) {
return json(ok(companyInfo));
}
if (path.includes("/hakocompany/FsSubject/")) {
return json(ok([]));
}
if (path.includes("/hakocompany/OrderContract/pageList")) {
return json(paged([]));
}
if (path.includes("/hakocompany/WeightConfig") || path.includes("/hakocompany/Satisfaction")) {
return json(paged([]));
}
if (path.includes("/hakocompany/Board") || path.includes("/hakocompany/Cockpit")) {
return json(ok(boardInfo));
}
if (path.includes("/pageList")) {
return json(paged([]));
}
if (path.includes("/listBy") || path.includes("/selectAll") || path.endsWith("/list")) {
return json(ok([]));
}
if (
path.includes("/create") ||
path.includes("/update") ||
path.includes("/delete") ||
path.includes("/save") ||
path.includes("/edit") ||
path.includes("/sync") ||
path.includes("/batch")
) {
return json(ok(true));
}
if (path.includes("/findBy") || path.includes("/detail")) {
return json(ok({
companyInfo,
userInfo,
memberInfo,
boardInfo
}));
}
if (path.includes("/report") || path.includes("/statistics") || path.includes("/count") || path.includes("/total")) {
return json(ok({
projectCount: boardInfo.projectCount || 0,
houseCount: boardInfo.houseCount || 0,
floorageCount: boardInfo.floorageCount || 0
}));
}
return json(ok({}));
}
function json(payload) {
return new Response(JSON.stringify(payload), {
status: 200,
headers: corsHeaders("application/json;charset=utf-8")
});
}
function corsHeaders(contentType) {
return {
"Content-Type": contentType,
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,POST,PUT,PATCH,DELETE,OPTIONS",
"Access-Control-Allow-Headers": "*"
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,4 @@
{
"language": "zh",
"PToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjQ0IiwiaWF0IjoxNzc1MDQ4NjM4LCJleHAiOjE3NzU2NTM0Mzh9.VPrOYhyqsNwSi7kU34lB4_SWG74PXaFIt4Wk_0hqTMU"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

View File

@@ -0,0 +1,44 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>项目运营平台 - 运行态镜像</title>
<style>
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", sans-serif;
background: #0b1220;
color: #eef4ff;
}
#mirror-loading {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 12px;
letter-spacing: 0.02em;
}
#mirror-loading small {
color: #98a7c2;
}
</style>
</head>
<body>
<div id="mirror-loading">
<div>正在启动项目运营平台运行态镜像…</div>
<small>会预置本地存储并接管接口请求</small>
</div>
<div id="app"></div>
<script>
(function () {
var script = document.createElement("script");
script.src = "./runtime-bootstrap.js" + (location.search || "");
document.body.appendChild(script);
})();
</script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,308 @@
const CAPTURE_FILES = [
"/__mirror/captures/hc-pos-dashboard-apis.json",
"/__mirror/captures/hc-pos-basicsInfo-apis.json"
];
let fixturesPromise = null;
let storageSeedPromise = null;
self.addEventListener("install", (event) => {
self.skipWaiting();
event.waitUntil(loadFixtures());
});
self.addEventListener("activate", (event) => {
event.waitUntil(self.clients.claim());
});
self.addEventListener("fetch", (event) => {
const requestUrl = new URL(event.request.url);
if (!requestUrl.hostname.includes("app-project-be.sqygj.cn")) {
return;
}
event.respondWith(handleApiRequest(event.request));
});
async function loadFixtures() {
if (fixturesPromise) {
return fixturesPromise;
}
fixturesPromise = (async () => {
const fixtureMap = new Map();
for (const file of CAPTURE_FILES) {
const response = await fetch(file, { cache: "no-store" });
if (!response.ok) {
continue;
}
const items = await response.json();
items
.filter((item) => item.resource_type === "XHR")
.forEach((item) => {
fixtureMap.set(item.url, item);
});
}
return fixtureMap;
})();
return fixturesPromise;
}
async function loadStorageSeed() {
if (storageSeedPromise) {
return storageSeedPromise;
}
storageSeedPromise = (async () => {
const response = await fetch("./storage-seed.json", { cache: "no-store" });
if (!response.ok) {
return {};
}
return response.json();
})();
return storageSeedPromise;
}
async function handleApiRequest(request) {
const fixtures = await loadFixtures();
if (request.method === "OPTIONS") {
return new Response("", {
status: 200,
headers: corsHeaders("text/plain;charset=utf-8")
});
}
const fixture = fixtures.get(request.url);
if (fixture) {
return new Response(fixture.body || "", {
status: fixture.status || 200,
headers: corsHeaders(fixture.mime_type || "application/json;charset=utf-8")
});
}
const mockResponse = await buildMockResponse(request);
return new Response(JSON.stringify(mockResponse), {
status: 200,
headers: corsHeaders("application/json;charset=utf-8")
});
}
function corsHeaders(contentType) {
return {
"Content-Type": contentType,
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,POST,PUT,PATCH,DELETE,OPTIONS",
"Access-Control-Allow-Headers": "*"
};
}
function ok(data) {
return {
data,
code: 0,
message: "mock success.",
ok: true
};
}
function paged(records = []) {
return ok({
rowsCount: records.length,
pageNumber: 1,
pageSize: 10,
pageCount: records.length ? 1 : 0,
records
});
}
function basicStats() {
return ok({
total: 0,
num: 0,
count: 0,
value: 0,
amount: 0,
ratio: 0,
rate: 0
});
}
async function buildMockResponse(request) {
const url = new URL(request.url);
const path = url.pathname;
const seed = await loadStorageSeed();
const targetInfo = parseTargetInfo(seed);
const currentProject = parseCurrentProject(seed);
if (path.endsWith("/appproject/account/findProjectByRoleId")) {
return ok(targetInfo.projectList || []);
}
if (path.endsWith("/appproject/account/findByAccount")) {
return ok(targetInfo.accountProfile || {});
}
if (path.endsWith("/appproject/project/findByCode")) {
return ok(mockProjectDetail(currentProject));
}
if (path.endsWith("/appproject/account/findByCompanyId")) {
return ok((targetInfo.projectList || []).filter((item) => item.companyId === currentProject.companyId));
}
if (path.endsWith("/appproject/data/project/serviceCount")) {
return ok({
countryCount: null,
provinceCount: 1,
cityCount: 1,
areaCount: 1,
streetCount: 1,
companyCount: 1,
projectCount: 1,
manageArea: 13848,
contractArea: 41980.48,
serviceArea: 78000,
payArea: 3440.51,
totalHouse: 38,
totalHouseMember: 65,
totalUser: 120,
ownerUser: 25,
status0Count: 0,
status1Count: 0,
status2Count: 0,
status3Count: 1,
status4Count: 10,
status5Count: 0
});
}
if (path.endsWith("/appproject/PlatformMessage/noticePageList")) {
return paged([
{
id: 1,
title: "本地镜像通知",
content: "这是本地 mock 数据,用于运行态镜像演示。",
createTime: "2026-04-01 22:00:00"
}
]);
}
if (path.endsWith("/appproject/OperationalGuidance/pageList")) {
return paged([
{ id: 1, title: "系统配置(项目平台)合集", tag: "项目平台" },
{ id: 2, title: "满意度(公告+问卷+周检)", tag: "满意度" },
{ id: 3, title: "工程管理—计划工单", tag: "工单" }
]);
}
if (path.endsWith("/appproject/AgentConfig/getAgentUrl")) {
return ok("https://example.com/mock-agent");
}
if (path.endsWith("/appproject/WorkOrder/findByProjectUuidAndAccountUuid")) {
return ok([
{ id: 1, status: 1, title: "巡检工单", createTime: "2026-04-01 10:00:00" },
{ id: 2, status: 2, title: "报修工单", createTime: "2026-04-01 11:30:00" }
]);
}
if (/\/check[A-Z]/.test(path) || /\/check[a-zA-Z]/.test(path) || path.includes("/checkTips")) {
return ok(false);
}
if (path.includes("/pageList")) {
return paged([]);
}
if (path.includes("/treeList") || path.includes("/getList") || path.endsWith("/list")) {
return ok([]);
}
if (
path.includes("/create") ||
path.includes("/update") ||
path.includes("/delete") ||
path.includes("/save") ||
path.includes("/edit") ||
path.includes("/bind") ||
path.includes("/sync")
) {
return ok(true);
}
if (
path.includes("/total") ||
path.includes("/statistics") ||
path.includes("/report") ||
path.includes("/chart") ||
path.includes("/count")
) {
return basicStats();
}
if (path.includes("/findById") || path.includes("/detail") || path.includes("/findBy")) {
return ok({});
}
return ok({});
}
function parseTargetInfo(seed) {
try {
const raw = JSON.parse(seed.C_userInfo || "{}");
const targetInfo = JSON.parse(raw.targetInfo || "{}");
return {
accountProfile: targetInfo,
projectList: targetInfo.projectList || [],
menuTree: targetInfo.menuSelectAllResponseByProject || []
};
} catch (_error) {
return {};
}
}
function parseCurrentProject(seed) {
try {
return JSON.parse(seed.store || "{}");
} catch (_error) {
return {};
}
}
function mockProjectDetail(project) {
return {
id: project.id || 426,
code: project.community_uuid || "mock-project-code",
name: project.community_name || "循环花园一期",
nickname: "箭楼下社区",
developer: "腾龙开发商",
floorage: 41980.48,
greeningArea: 78000,
manageArea: 13848,
payArea: 3440.51,
houseCount: 38,
houseMemberCount: 65,
province: "湖北省",
city: "黄石市",
area: "下陆区",
street: "团城山街道",
longitude: "119.919847",
latitude: "31.016537",
architectureType: "高层",
deliverDate: "2010-07-01",
architectureDate: "2008-07-01",
layout: "一室一厅",
address: "下陆区团城山街道龙湾一品小区",
image: "https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20220320/1647777882795_f65e03a8.jpg",
signature: "https://sqy-oss-test.oss-cn-guangzhou.aliyuncs.com/20230414/1681480367954_5c56e2c5.png",
companyId: project.companyId || 421,
companyUuid: project.companyUuid || "92115dc9-09a2-42da-b9bb-60352c900a53",
codeNumber: project.codeNumber || "X39839",
star: project.star || 5,
payMethod: 2,
manageType: 7
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

File diff suppressed because one or more lines are too long

255
__mirror/runtime/index.html Normal file
View File

@@ -0,0 +1,255 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>运行态镜像入口</title>
<style>
:root {
--bg: #0b1220;
--panel: #121a2b;
--text: #eef4ff;
--muted: #92a4c4;
--border: rgba(255,255,255,0.08);
--accent: #4aa3ff;
--accent-2: #45d2a0;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
padding: 40px 20px;
background:
radial-gradient(circle at top left, rgba(74,163,255,0.16), transparent 30%),
radial-gradient(circle at bottom right, rgba(69,210,160,0.12), transparent 28%),
var(--bg);
color: var(--text);
font: 16px/1.6 -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", sans-serif;
}
.wrap {
width: min(980px, 100%);
margin: 0 auto;
}
h1 {
margin: 0 0 12px;
font-size: 32px;
line-height: 1.15;
}
p {
margin: 0 0 28px;
color: var(--muted);
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 18px;
}
.card {
border: 1px solid var(--border);
border-radius: 20px;
background: linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.02));
padding: 22px 20px;
box-shadow: 0 20px 48px rgba(0,0,0,0.24);
}
.tag {
display: inline-block;
margin-bottom: 10px;
padding: 4px 10px;
border-radius: 999px;
background: rgba(255,255,255,0.07);
color: var(--muted);
font-size: 12px;
}
h2 {
margin: 0 0 10px;
font-size: 22px;
}
.link-groups {
display: grid;
gap: 16px;
margin-top: 16px;
}
.group {
padding-top: 16px;
border-top: 1px solid rgba(255,255,255,0.06);
}
.group:first-of-type {
padding-top: 0;
border-top: 0;
}
.group-title {
margin: 0 0 10px;
color: var(--muted);
font-size: 13px;
letter-spacing: 0.04em;
}
.actions {
display: flex;
gap: 10px;
flex-wrap: wrap;
}
a {
text-decoration: none;
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 140px;
padding: 11px 16px;
border-radius: 12px;
border: 1px solid var(--border);
color: var(--text);
background: rgba(255,255,255,0.04);
gap: 8px;
}
.btn.primary {
background: var(--accent);
color: #06101f;
border-color: transparent;
font-weight: 600;
}
.btn.secondary {
background: var(--accent-2);
color: #062118;
border-color: transparent;
font-weight: 600;
}
.btn.subtle {
border-color: rgba(255,255,255,0.06);
color: var(--muted);
}
.badge {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 2px 7px;
border-radius: 999px;
background: rgba(255,255,255,0.08);
color: var(--muted);
font-size: 11px;
line-height: 1;
}
.badge.warn {
background: rgba(255, 196, 92, 0.16);
color: #ffd782;
}
</style>
</head>
<body>
<main class="wrap">
<h1>运行态镜像入口</h1>
<p>这里汇总了两个后台的本地运行态入口。优先使用“运行态”地址,它比静态快照更接近真实站点。</p>
<section class="grid">
<article class="card">
<span class="tag">项目运营平台 / hc-pos</span>
<h2>项目运营平台</h2>
<p>已接入本地存储、Cookie、Service Worker mock 和深链静态回退。适合查看主要业务页与配置页。</p>
<div class="link-groups">
<section class="group">
<div class="group-title">常用入口</div>
<div class="actions">
<a class="btn primary" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/dashboard">运行态首页</a>
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/propertySMG/basicManagement/basicsInfo">项目信息</a>
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/propertySMG/basicManagement/communityBasicsInfo">楼宇信息</a>
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/propertySMG/basicManagement/spatialRegion">网格划分</a>
</div>
</section>
<section class="group">
<div class="group-title">社区治理</div>
<div class="actions">
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/communitySMG/party">党建活动</a>
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/communitySMG/personnelList">住户档案</a>
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/communitySMG/serviceProvider">服务商管理</a>
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/communitySMG/accepterManage">共建组织</a>
</div>
</section>
<section class="group">
<div class="group-title">业务配置</div>
<div class="actions">
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/systemManage/projectConfig/majorSettings/paySetting">支付配置</a>
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/propertySMG/materialManage/inventoryManage">库存管理</a>
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/propertySMG/materialManage/purchaseStorage">采购入库</a>
<a class="btn" href="/__mirror/runtime/hc-pos-dashboard/?v=20260405q#/systemManage/projectConfig/internalControl/controlSetting">驾驶舱配置</a>
</div>
</section>
<section class="group">
<div class="group-title">补充入口</div>
<div class="actions">
<a class="btn subtle" href="/hc-pos.sqygj.cn/dashboard/">静态快照首页</a>
</div>
</section>
</div>
</article>
<article class="card">
<span class="tag">企业服务平台 / hc-etms</span>
<h2>企业服务平台</h2>
<p>已接入运行态首页和高频管理页映射,企业信息、成员、组织架构、分公司管理、角色权限管理、人事档案等页都可直接进入。</p>
<div class="link-groups">
<section class="group">
<div class="group-title">基础资料</div>
<div class="actions">
<a class="btn secondary" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q">运行态首页</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/companyMetadata/companyInfo">企业信息</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/companyMetadata/member">成员</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/companyMetadata/institution">组织架构</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/companyMetadata/organizational">企微通讯录</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/companyMetadata/branchOfficeManage">分公司管理</a>
</div>
</section>
<section class="group">
<div class="group-title">组织人事</div>
<div class="actions">
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/systemManage/permissions">角色权限</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/personnelMerits/personnelFiles">人事档案</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/personnelMerits/recruitManage">招聘管理</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/personnelMerits/checkWorkManage">考勤管理</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/systemManage/personnelSetting">人事设置</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/systemManage/operationLog">操作日志</a>
</div>
</section>
<section class="group">
<div class="group-title">经营看板</div>
<div class="actions">
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/companyMetadata/financeData">财务数据</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/r2cockpit/cloudData/propertyFeeReport">物业费报表</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/finance">财务看板</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/equipment">设备看板</a>
<a class="btn" href="/__mirror/runtime/hc-etms-dashboard/?v=20260405q#/parkingLot">车场看板</a>
</div>
</section>
<section class="group">
<div class="group-title">补充入口</div>
<div class="actions">
<a class="btn subtle" href="/hc-etms.sqygj.cn/dashboard/__query_3cc8885b97/">静态快照首页</a>
</div>
</section>
</div>
</article>
</section>
</main>
</body>
</html>

View File

@@ -0,0 +1,12 @@
.el-submenu > .el-submenu__title {
cursor: pointer;
user-select: none;
}
.codex-static-submenu-open > .el-submenu__title .el-submenu__icon-arrow {
transform: rotate(180deg);
}
.codex-static-submenu-open > ul.el-menu--inline {
display: block !important;
}

108
__mirror/static-mirror.js Normal file
View File

@@ -0,0 +1,108 @@
(function () {
function getDirectChildSubmenuList(submenu) {
for (const child of submenu.children) {
if (child.tagName === "UL" && child.classList.contains("el-menu--inline")) {
return child;
}
}
return null;
}
function setExpanded(title, expand) {
const submenu = title.closest(".el-submenu");
if (!submenu) {
return;
}
const list = getDirectChildSubmenuList(submenu);
if (!list) {
return;
}
submenu.classList.toggle("codex-static-submenu-open", expand);
list.style.display = expand ? "block" : "none";
title.setAttribute("aria-expanded", String(expand));
}
function toggle(title) {
const submenu = title.closest(".el-submenu");
if (!submenu) {
return;
}
const list = getDirectChildSubmenuList(submenu);
if (!list) {
return;
}
const computed = window.getComputedStyle(list).display;
setExpanded(title, computed === "none");
}
function expandAncestorsForCurrentLink() {
const currentPath = window.location.pathname.replace(/index\.html$/, "");
const anchors = document.querySelectorAll("a[href]");
anchors.forEach((anchor) => {
const href = anchor.getAttribute("href");
if (!href || href.startsWith("#") || href.startsWith("http")) {
return;
}
let resolvedPath = "";
try {
resolvedPath = new URL(href, window.location.href).pathname.replace(/index\.html$/, "");
} catch (_error) {
return;
}
if (resolvedPath !== currentPath) {
return;
}
let submenu = anchor.closest(".el-submenu");
while (submenu) {
const title = submenu.querySelector(":scope > .el-submenu__title");
if (title) {
setExpanded(title, true);
}
submenu = submenu.parentElement ? submenu.parentElement.closest(".el-submenu") : null;
}
});
}
function initStaticSubmenus() {
const titles = document.querySelectorAll(".el-submenu > .el-submenu__title");
titles.forEach((title) => {
const submenu = title.closest(".el-submenu");
if (!submenu) {
return;
}
const list = getDirectChildSubmenuList(submenu);
if (!list) {
return;
}
title.setAttribute("role", "button");
title.setAttribute("tabindex", "0");
title.setAttribute("aria-expanded", window.getComputedStyle(list).display !== "none" ? "true" : "false");
title.addEventListener("click", function (event) {
event.preventDefault();
event.stopPropagation();
toggle(title);
});
title.addEventListener("keydown", function (event) {
if (event.key !== "Enter" && event.key !== " ") {
return;
}
event.preventDefault();
toggle(title);
});
});
expandAncestorsForCurrentLink();
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initStaticSubmenus);
} else {
initStaticSubmenus();
}
})();