From bbfb21730c79c569b3a608e26e2eebef49a01817 Mon Sep 17 00:00:00 2001
From: tangjie <122778500@qq.com>
Date: Mon, 27 Jul 2026 15:41:29 +0800
Subject: [PATCH] feat
---
.../spec.json | 56 +++
.../type.d.ts | 11 +
.../spec.json | 66 ++++
.../type.d.ts | 14 +
.../spec.json | 45 +++
.../type.d.ts | 6 +
src/api/safetyEvalBusiness/index.js | 19 +
src/enumerate/constant/index.js | 17 +
src/pages/Container/Layout/menuConfig.js | 6 +
.../EvalProjectMonitor/Detail/index.js | 85 ++++-
.../MonitorManage/SurveyMonitor/index.js | 354 ++++++++++++++++++
.../MonitorManage/SurveyMonitor/index.less | 3 +
.../ProjectFlow/ContractContent.js | 13 +-
.../ProjectFlow/SurveyContent.js | 50 ++-
14 files changed, 686 insertions(+), 59 deletions(-)
create mode 100644 .api/safetyEval-regulator-eval-project-monitor-survey-clock-in-get/spec.json
create mode 100644 .api/safetyEval-regulator-eval-project-monitor-survey-clock-in-get/type.d.ts
create mode 100644 .api/safetyEval-regulator-eval-project-monitor-survey-page-get/spec.json
create mode 100644 .api/safetyEval-regulator-eval-project-monitor-survey-page-get/type.d.ts
create mode 100644 .api/safetyEval-regulator-eval-project-monitor-survey-stat-get/spec.json
create mode 100644 .api/safetyEval-regulator-eval-project-monitor-survey-stat-get/type.d.ts
create mode 100644 src/pages/Container/MonitorManage/SurveyMonitor/index.js
create mode 100644 src/pages/Container/MonitorManage/SurveyMonitor/index.less
diff --git a/.api/safetyEval-regulator-eval-project-monitor-survey-clock-in-get/spec.json b/.api/safetyEval-regulator-eval-project-monitor-survey-clock-in-get/spec.json
new file mode 100644
index 0000000..62e97be
--- /dev/null
+++ b/.api/safetyEval-regulator-eval-project-monitor-survey-clock-in-get/spec.json
@@ -0,0 +1,56 @@
+{
+ "openapi": "3.0.1",
+ "info": { "title": "人员打卡信息查询", "version": "1.0.0" },
+ "paths": {
+ "/safetyEval/regulator/eval-project-monitor/survey-clock-in": {
+ "get": {
+ "summary": "人员打卡信息查询",
+ "tags": ["监管端-安评项目"],
+ "parameters": [
+ { "name": "projectId", "in": "query", "required": true, "schema": { "type": "string" } }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/SingleResponseListRegulatorEvalSurveyClockInCO" }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "SingleResponseListRegulatorEvalSurveyClockInCO": {
+ "type": "object",
+ "properties": {
+ "success": { "type": "boolean" },
+ "code": { "type": "string" },
+ "message": { "type": "string" },
+ "errMessage": { "type": "string" },
+ "data": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/RegulatorEvalSurveyClockInCO" }
+ }
+ }
+ },
+ "RegulatorEvalSurveyClockInCO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "integer" },
+ "userName": { "type": "string" },
+ "role": { "type": "string" },
+ "faceState": { "type": "integer" },
+ "gpsState": { "type": "integer" },
+ "singInTime": { "type": "string" },
+ "signOutTime": { "type": "string" },
+ "sceneUrl": { "type": "string" },
+ "signatureUrl": { "type": "string" }
+ }
+ }
+ }
+ }
+}
diff --git a/.api/safetyEval-regulator-eval-project-monitor-survey-clock-in-get/type.d.ts b/.api/safetyEval-regulator-eval-project-monitor-survey-clock-in-get/type.d.ts
new file mode 100644
index 0000000..ff3d4b9
--- /dev/null
+++ b/.api/safetyEval-regulator-eval-project-monitor-survey-clock-in-get/type.d.ts
@@ -0,0 +1,11 @@
+export interface RegulatorEvalSurveyClockInCO {
+ id: number;
+ userName: string;
+ role: string;
+ faceState: number;
+ gpsState: number;
+ singInTime: string;
+ signOutTime: string;
+ sceneUrl: string;
+ signatureUrl: string;
+}
diff --git a/.api/safetyEval-regulator-eval-project-monitor-survey-page-get/spec.json b/.api/safetyEval-regulator-eval-project-monitor-survey-page-get/spec.json
new file mode 100644
index 0000000..cdf4045
--- /dev/null
+++ b/.api/safetyEval-regulator-eval-project-monitor-survey-page-get/spec.json
@@ -0,0 +1,66 @@
+{
+ "openapi": "3.0.1",
+ "info": { "title": "踏勘监管分页", "version": "1.0.0" },
+ "paths": {
+ "/safetyEval/regulator/eval-project-monitor/survey-page": {
+ "get": {
+ "summary": "项目踏勘监管分页",
+ "tags": ["监管端-安评项目"],
+ "parameters": [
+ { "name": "current", "in": "query", "schema": { "type": "integer", "default": 1 } },
+ { "name": "size", "in": "query", "schema": { "type": "integer", "default": 10 } },
+ { "name": "startTime", "in": "query", "schema": { "type": "string" } },
+ { "name": "endTime", "in": "query", "schema": { "type": "string" } },
+ { "name": "projectNameOrNo", "in": "query", "schema": { "type": "string" } },
+ { "name": "orgId", "in": "query", "schema": { "type": "integer" } },
+ { "name": "clockInStatus", "in": "query", "schema": { "type": "string" } }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/PageResponseRegulatorEvalProjectSurveyPageCO" }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "PageResponseRegulatorEvalProjectSurveyPageCO": {
+ "type": "object",
+ "properties": {
+ "success": { "type": "boolean" },
+ "code": { "type": "string" },
+ "message": { "type": "string" },
+ "errMessage": { "type": "string" },
+ "data": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/RegulatorEvalProjectSurveyPageCO" }
+ },
+ "total": { "type": "integer" }
+ }
+ },
+ "RegulatorEvalProjectSurveyPageCO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string" },
+ "orgId": { "type": "string" },
+ "projectNo": { "type": "string" },
+ "projectName": { "type": "string" },
+ "orgName": { "type": "string" },
+ "expectedCount": { "type": "integer" },
+ "actualCount": { "type": "integer" },
+ "signInCount": { "type": "integer" },
+ "signOutCount": { "type": "integer" },
+ "faceCount": { "type": "integer" },
+ "scenePhotoCount": { "type": "integer" },
+ "notificationFileUrl": { "type": "string" }
+ }
+ }
+ }
+ }
+}
diff --git a/.api/safetyEval-regulator-eval-project-monitor-survey-page-get/type.d.ts b/.api/safetyEval-regulator-eval-project-monitor-survey-page-get/type.d.ts
new file mode 100644
index 0000000..bbfe7c5
--- /dev/null
+++ b/.api/safetyEval-regulator-eval-project-monitor-survey-page-get/type.d.ts
@@ -0,0 +1,14 @@
+export interface RegulatorEvalProjectSurveyPageCO {
+ id: string;
+ orgId: string;
+ projectNo: string;
+ projectName: string;
+ orgName: string;
+ expectedCount: number;
+ actualCount: number;
+ signInCount: number;
+ signOutCount: number;
+ faceCount: number;
+ scenePhotoCount: number;
+ notificationFileUrl: string;
+}
diff --git a/.api/safetyEval-regulator-eval-project-monitor-survey-stat-get/spec.json b/.api/safetyEval-regulator-eval-project-monitor-survey-stat-get/spec.json
new file mode 100644
index 0000000..d45ef1f
--- /dev/null
+++ b/.api/safetyEval-regulator-eval-project-monitor-survey-stat-get/spec.json
@@ -0,0 +1,45 @@
+{
+ "openapi": "3.0.1",
+ "info": { "title": "踏勘监管统计", "version": "1.0.0" },
+ "paths": {
+ "/safetyEval/regulator/eval-project-monitor/survey-stat": {
+ "get": {
+ "summary": "项目踏勘监管统计",
+ "tags": ["监管端-安评项目"],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/SingleResponseRegulatorEvalProjectSurveyStatCO" }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "SingleResponseRegulatorEvalProjectSurveyStatCO": {
+ "type": "object",
+ "properties": {
+ "success": { "type": "boolean" },
+ "code": { "type": "string" },
+ "message": { "type": "string" },
+ "errMessage": { "type": "string" },
+ "data": { "$ref": "#/components/schemas/RegulatorEvalProjectSurveyStatCO" }
+ }
+ },
+ "RegulatorEvalProjectSurveyStatCO": {
+ "type": "object",
+ "properties": {
+ "notificationArchivedCount": { "type": "integer", "description": "告知书已归档数" },
+ "notificationAbnormalCount": { "type": "integer", "description": "告知异常数" },
+ "clockInNormalCount": { "type": "integer", "description": "人员打卡正常数" },
+ "clockInAbnormalCount": { "type": "integer", "description": "打卡异常数" }
+ }
+ }
+ }
+ }
+}
diff --git a/.api/safetyEval-regulator-eval-project-monitor-survey-stat-get/type.d.ts b/.api/safetyEval-regulator-eval-project-monitor-survey-stat-get/type.d.ts
new file mode 100644
index 0000000..c0e1adc
--- /dev/null
+++ b/.api/safetyEval-regulator-eval-project-monitor-survey-stat-get/type.d.ts
@@ -0,0 +1,6 @@
+export interface RegulatorEvalProjectSurveyStatCO {
+ notificationArchivedCount: number;
+ notificationAbnormalCount: number;
+ clockInNormalCount: number;
+ clockInAbnormalCount: number;
+}
diff --git a/src/api/safetyEvalBusiness/index.js b/src/api/safetyEvalBusiness/index.js
index f064acb..01c01ca 100644
--- a/src/api/safetyEvalBusiness/index.js
+++ b/src/api/safetyEvalBusiness/index.js
@@ -263,4 +263,23 @@ export const evalProjectMonitorStat = declareRequest(
export const evalProjectMonitorPage = declareRequest(
"evalProjectMonitorPageLoading",
"Get > /safetyEval/regulator/eval-project-monitor/realtime-page",
+);
+
+// ===== 监管端-项目踏勘监管 =====
+
+export const evalSurveyMonitorStat = declareRequest(
+ "evalSurveyMonitorStatLoading",
+ "Get > /safetyEval/regulator/eval-project-monitor/survey-stat",
+ "evalSurveyMonitorStat: {} | res.data || {}",
+);
+
+export const evalSurveyMonitorPage = declareRequest(
+ "evalSurveyMonitorPageLoading",
+ "Get > /safetyEval/regulator/eval-project-monitor/survey-page",
+);
+
+export const evalSurveyClockIn = declareRequest(
+ "evalSurveyClockInLoading",
+ "Get > /safetyEval/regulator/eval-project-monitor/survey-clock-in",
+ "evalSurveyClockIn: [] | res.data || []",
);
\ No newline at end of file
diff --git a/src/enumerate/constant/index.js b/src/enumerate/constant/index.js
index 48ee0f4..6888c85 100644
--- a/src/enumerate/constant/index.js
+++ b/src/enumerate/constant/index.js
@@ -411,6 +411,23 @@ export const MONITOR_WARING_STATUS_OPTIONS = [
{ label: "人员异常", value: "PERSONNEL_ABNORMAL" },
];
+/** 监管端-项目踏勘监管 - 打卡状态筛选选项 */
+export const CLOCK_IN_STATUS_OPTIONS = [
+ { label: "正常", value: "normal" },
+ { label: "异常", value: "abnormal" },
+];
+
+export const PROJECT_TYPE_OPTIONS = [
+ { label: "新建项目", value: "NEW" },
+ { label: "续评项目", value: "RENEW" },
+ { label: "变更项目", value: "CHANGE" },
+];
+
+export const PROJECT_TYPE_MAP= PROJECT_TYPE_OPTIONS.reduce((acc, cur) => {
+ acc[cur.value] = cur.label;
+ return acc;
+}, {});
+
export const ROLE_DEFINITIONS = [
{ value: "MARKETING_BUSINESS_REP", name: "市场部业务员", unique: false, summary: "获取项目基础信息,形成风险分析记录;风险通过后签订合同并下达任务通知单。" },
diff --git a/src/pages/Container/Layout/menuConfig.js b/src/pages/Container/Layout/menuConfig.js
index 2dea24e..c0973f8 100644
--- a/src/pages/Container/Layout/menuConfig.js
+++ b/src/pages/Container/Layout/menuConfig.js
@@ -22,6 +22,7 @@ import {
CheckCircleOutlined,
SyncOutlined,
BellOutlined,
+ EnvironmentOutlined,
} from "@ant-design/icons";
const menuItems = [
@@ -200,6 +201,11 @@ const menuItems = [
label: "安评项目实时监控",
icon: