master
853931625@qq.com 2026-05-22 08:57:50 +08:00
parent 6e38a7100c
commit 68a8beb85a
8 changed files with 181 additions and 14 deletions

View File

@ -3,6 +3,7 @@ import VirtualList from "@rc-component/virtual-list";
import { useInterval } from "ahooks"; import { useInterval } from "ahooks";
import { Image, Space } from "antd"; import { Image, Space } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { getFileUrl } from "zy-react-library/utils";
import { NS_RESUE } from "~/enumerate/namespace"; import { NS_RESUE } from "~/enumerate/namespace";
import circle from "../../images/circle.png"; import circle from "../../images/circle.png";
@ -88,8 +89,9 @@ function CommandFeedbackRecords(props) {
<span className="label">现场图片</span> <span className="label">现场图片</span>
<div> <div>
<Space wrap={true}> <Space wrap={true}>
{(feedback.feedbackImageUrl ? feedback.feedbackImageUrl.split(",") : []).map((img, imgIndex) => ( {(feedback.feedbackImageUrl ? feedback.feedbackImageUrl.split(",") : []).map((img, imgIndex) => (
<Image key={imgIndex} src={img} alt="feedback" width={60} height={60} /> <Image key={imgIndex} src={getFileUrl() + img} alt="feedback" width={60} height={60} />
))} ))}
</Space> </Space>
</div> </div>

View File

@ -6,8 +6,10 @@ import AddIcon from "zy-react-library/components/Icon/AddIcon";
import DeleteIcon from "zy-react-library/components/Icon/DeleteIcon"; import DeleteIcon from "zy-react-library/components/Icon/DeleteIcon";
import EditIcon from "zy-react-library/components/Icon/EditIcon"; import EditIcon from "zy-react-library/components/Icon/EditIcon";
import BasicLeftTree from "zy-react-library/components/LeftTree/Basic"; import BasicLeftTree from "zy-react-library/components/LeftTree/Basic";
import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import useGetUserInfo from "zy-react-library/hooks/useGetUserInfo";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
import { PHONE } from "zy-react-library/regular"; import { PHONE } from "zy-react-library/regular";
import { NS_ENTERPRISE_PLAN } from "~/enumerate/namespace"; import { NS_ENTERPRISE_PLAN } from "~/enumerate/namespace";
@ -22,7 +24,6 @@ const addModalTypeNames = {
function OrganizationStructure(props) { function OrganizationStructure(props) {
const [treeList, setTreeList] = useState([]); const [treeList, setTreeList] = useState([]);
const [parentId, setParentId] = useState(defaultParentId); const [parentId, setParentId] = useState(defaultParentId);
const [parentName, setParentName] = useState(defaultParentName); const [parentName, setParentName] = useState(defaultParentName);
const [currentOrganization, setCurrentOrganization] = useState({}); const [currentOrganization, setCurrentOrganization] = useState({});
@ -32,13 +33,19 @@ function OrganizationStructure(props) {
const [currentOrganizationPersonnelId, setCurrentOrganizationPersonnelId] = useState(""); const [currentOrganizationPersonnelId, setCurrentOrganizationPersonnelId] = useState("");
const [addOrganizationPersonnelModalVisible, setAddOrganizationPersonnelModalVisible] = useState(false); const [addOrganizationPersonnelModalVisible, setAddOrganizationPersonnelModalVisible] = useState(false);
const [corpinfoid, setCorpinfoid] = useState("");
const { getUserInfo } = useGetUserInfo();
const { tableProps, getData } = useTable(props["enterprisePlanOrganizationPersonnelList"], { const { tableProps, getData } = useTable(props["enterprisePlanOrganizationPersonnelList"], {
params: { planId: props.planId, organizationId: currentOrganization.id }, params: { planId: props.planId, organizationId: currentOrganization.id },
useStorageQueryCriteria: false, useStorageQueryCriteria: false,
manual: true, manual: true,
}); });
const getInfoData = async () => {
const data = await getUserInfo();
setCorpinfoid(data.corpinfoId);
};
const getTreeList = async () => { const getTreeList = async () => {
const { data } = await props["enterprisePlanLevelOrganizationListTree"]({ planId: props.planId }); const { data } = await props["enterprisePlanLevelOrganizationListTree"]({ planId: props.planId });
setTreeList(data); setTreeList(data);
@ -46,6 +53,7 @@ function OrganizationStructure(props) {
useEffect(() => { useEffect(() => {
getTreeList(); getTreeList();
getInfoData();
}, []); }, []);
const onDeleteOrganization = () => { const onDeleteOrganization = () => {
@ -226,6 +234,7 @@ function OrganizationStructure(props) {
setCurrentOrganizationPersonnelId(""); setCurrentOrganizationPersonnelId("");
}} }}
id={currentOrganizationPersonnelId} id={currentOrganizationPersonnelId}
corpinfoid={corpinfoid}
organizationId={currentOrganization.id} organizationId={currentOrganization.id}
organizationName={currentOrganization.orgName} organizationName={currentOrganization.orgName}
planId={props.planId} planId={props.planId}
@ -349,12 +358,25 @@ const AddOrganizationPersonnelModalComponent = (props) => {
span={24} span={24}
labelCol={{ span: 10 }} labelCol={{ span: 10 }}
options={[ options={[
{ {
key: "organizationName", key: "organizationName",
label: "所属机构", label: "所属机构",
render: (<Tag color="#4096ff">{props.organizationName}</Tag>), render: (<Tag color="#4096ff">{props.organizationName}</Tag>),
}, },
{ name: "userName", label: "姓名" }, { name: "userId", label: "姓名", render: (
<PersonnelSelect
isNeedDepartmentId={false}
isNeedCorpInfoId={true}
params={{ corpinfoId: props.corpinfoid }}
onGetLabel={label => form.setFieldValue("userName", label)}
onGetOption={(value) => {
form.setFieldValue("position", value.postName);
form.setFieldValue("contactPhone", value.phone);
}}
/>
) },
{ name: "userName", label: "人员名称", onlyForLabel: true },
{ name: "position", label: "职务" }, { name: "position", label: "职务" },
{ name: "groupPost", label: "组内岗位", required: false }, { name: "groupPost", label: "组内岗位", required: false },
{ name: "contactPhone", label: "联系电话", rules: [{ pattern: PHONE, message: "请输入正确的电话号码" }] }, { name: "contactPhone", label: "联系电话", rules: [{ pattern: PHONE, message: "请输入正确的电话号码" }] },

View File

@ -14,6 +14,8 @@ function PlanInstructions(props) {
const [responseLevelList, setResponseLevelList] = useState([]); const [responseLevelList, setResponseLevelList] = useState([]);
const [executingAgencyListTree, setExecutingAgencyListTree] = useState([]); const [executingAgencyListTree, setExecutingAgencyListTree] = useState([]);
const [disabled, setDisabled] = useState(false);
const [userData, setUserData] = useState([]);
const isEditCommandIdRef = useRef(""); const isEditCommandIdRef = useRef("");
const { tableProps, getData } = useTable(props["enterprisePlanCommandSettingList"], { const { tableProps, getData } = useTable(props["enterprisePlanCommandSettingList"], {
@ -28,11 +30,14 @@ function PlanInstructions(props) {
const { data } = await props["enterprisePlanLevelResponseListAll"]({ planId: props.planId }); const { data } = await props["enterprisePlanLevelResponseListAll"]({ planId: props.planId });
setResponseLevelList(data); setResponseLevelList(data);
}; };
const getUserDataFun = async (value) => {
const { data } = await props["enterprisePlanOrganizationPersonnelListAll"]({ organizationId: value.id });
setUserData(data);
};
const getTreeList = async () => { const getTreeList = async () => {
if (props.mode === "view") if (props.mode === "view")
return; return;
const { data } = await props["enterprisePlanLevelOrganizationListTree"]({ planId: props.planId }); const { data } = await props["enterprisePlanLevelOrganizationListTree"]({ planId: props.planId });
setExecutingAgencyListTree(data); setExecutingAgencyListTree(data);
}; };
@ -47,8 +52,6 @@ function PlanInstructions(props) {
...values, ...values,
responseLevel: values.responseLevel.join(","), responseLevel: values.responseLevel.join(","),
responseLevelName: values.responseLevelName.join(","), responseLevelName: values.responseLevelName.join(","),
executingAgencyId: values.executingAgencyId.join(","),
executingAgencyName: values.executingAgencyName.join(","),
planId: props.planId, planId: props.planId,
id: isEditCommandIdRef.current, id: isEditCommandIdRef.current,
}); });
@ -69,6 +72,7 @@ function PlanInstructions(props) {
if (success) { if (success) {
message.success("删除成功"); message.success("删除成功");
form.resetFields(); form.resetFields();
setUserData([]);
getData(); getData();
isEditCommandIdRef.current = ""; isEditCommandIdRef.current = "";
} }
@ -116,16 +120,34 @@ function PlanInstructions(props) {
label: "执行机构", label: "执行机构",
render: ( render: (
<BasicSelectTree <BasicSelectTree
disabled={disabled}
treeData={executingAgencyListTree} treeData={executingAgencyListTree}
nameKey="orgName" nameKey="orgName"
multiple
onGetLabel={(label) => { onGetLabel={(label) => {
form.setFieldValue("executingAgencyName", label); form.setFieldValue("executingAgencyName", label);
form.setFieldValue("userIds", undefined);
form.setFieldValue("userNames", undefined);
}} }}
getNodePathsIsIncludeOneself={true}
onGetNodePaths={nodes => getUserDataFun(nodes[nodes.length - 1])}
/> />
), ),
}, },
{ name: "executingAgencyName", label: "执行机构名称", onlyForLabel: true }, { name: "executingAgencyName", label: "执行机构名称", onlyForLabel: true },
{
name: "userIds",
label: "执行人员",
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: userData,
componentProps: { mode: "multiple", onChange: (value) => {
const result = userData
.filter(item => value.includes(item.id))
.map(item => item.userName);
form.setFieldValue("userNames", result);
}, disabled },
itemsField: { valueKey: "id", labelKey: "userName" },
},
{ name: "userNames", label: "执行人员名称", onlyForLabel: true },
]} ]}
form={form} form={form}
onFinish={onSubmit} onFinish={onSubmit}
@ -142,6 +164,7 @@ function PlanInstructions(props) {
</Button> </Button>
<Button onClick={() => { <Button onClick={() => {
form.resetFields(); form.resetFields();
setDisabled(false);
}} }}
> >
重置 重置
@ -158,6 +181,7 @@ function PlanInstructions(props) {
{ title: "响应级别", dataIndex: "responseLevelName" }, { title: "响应级别", dataIndex: "responseLevelName" },
{ title: "指令内容", dataIndex: "commandContent" }, { title: "指令内容", dataIndex: "commandContent" },
{ title: "执行机构", dataIndex: "executingAgencyName" }, { title: "执行机构", dataIndex: "executingAgencyName" },
{ title: "执行人员", dataIndex: "userName" },
{ {
title: "操作", title: "操作",
width: 150, width: 150,
@ -170,12 +194,17 @@ function PlanInstructions(props) {
onClick={async () => { onClick={async () => {
const { data } = await props["enterprisePlanCommandSettingInfo"]({ id: record.id }); const { data } = await props["enterprisePlanCommandSettingInfo"]({ id: record.id });
isEditCommandIdRef.current = record.id; isEditCommandIdRef.current = record.id;
getUserDataFun(data.executingAgencyId);
setDisabled(true);
form.setFieldsValue({ form.setFieldsValue({
responseLevel: data.responseLevel ? data.responseLevel.split(",") : [], responseLevel: data.responseLevel ? data.responseLevel.split(",") : [],
responseLevelName: data.responseLevelName ? data.responseLevelName.split(",") : [], responseLevelName: data.responseLevelName ? data.responseLevelName.split(",") : [],
commandContent: data.commandContent, commandContent: data.commandContent,
executingAgencyId: data.executingAgencyId ? data.executingAgencyId.split(",") : [], executingAgencyId: data.executingAgencyId,
executingAgencyName: data.executingAgencyName ? data.executingAgencyName.split(",") : [], executingAgencyName: data.executingAgencyName,
userIds: [data.userId],
userNames: [data.userName],
}); });
}} }}
> >

View File

@ -15,7 +15,7 @@ function List(props) {
}); });
return ( return (
<Page isShowAllAction={false}> <Page headerTitle="查看">
<Search <Search
options={[ options={[
{ name: "corpName", label: "公司名称" }, { name: "corpName", label: "公司名称" },

View File

@ -28,12 +28,12 @@ function List(props) {
{ title: "公司名称", dataIndex: "corpName" }, { title: "公司名称", dataIndex: "corpName" },
{ {
title: "救援次数", title: "救援次数",
dataIndex: "isRescueExecutedCount", dataIndex: "eventReportCount",
render: (_, record) => ( render: (_, record) => (
permissionButtonByStatistics({ permissionButtonByStatistics({
permission: props.permission("jgd-rescue"), permission: props.permission("jgd-rescue"),
url: `./todo/list?corpinfoId=${record.corpinfoId}`, url: `./RescueList?corpinfoId=${record.corpinfoId}`,
text: record.isRescueExecutedCount, text: record.eventReportCount,
history: props.history, history: props.history,
}) })
), ),

View File

@ -0,0 +1,100 @@
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Space } from "antd";
import dayjs from "dayjs";
import Page from "zy-react-library/components/Page";
import Search from "zy-react-library/components/Search";
import Table from "zy-react-library/components/Table";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useTable from "zy-react-library/hooks/useTable";
import { getLabelName } from "zy-react-library/utils";
import { NS_EVENT_REPORT, NS_RESUE } from "~/enumerate/namespace";
function List(props) {
const [form] = Search.useForm();
const query = useGetUrlQuery();
const { tableProps, getData } = useTable(props["eventReportList"], {
form,
usePermission: false,
params: { isEventOrRescue: 2, corpId: query.corpinfoId },
});
return (
<Page headerTitle="救援次数">
<Search
options={[
{ name: "ownerName", label: "机主姓名" },
]}
form={form}
onFinish={getData}
/>
<Table
columns={[
{ title: "接入电话", dataIndex: "incomingCall" },
{ title: "机主姓名", dataIndex: "ownerName" },
{ title: "接入方式", dataIndex: "accessModeName" },
{ title: "事件类型", dataIndex: "eventType" },
{ title: "接报时间", dataIndex: "reportTime" },
{
title: "救援状态",
dataIndex: "isRescueExecuted",
render: (_, record) => getLabelName({ list: [
{ bianma: 1, name: "未执行" },
{ bianma: 2, name: "未开始" },
{ bianma: 3, name: "进行中" },
{ bianma: 4, name: "已完成" },
], status: record.isRescueExecuted }),
},
{
title: "操作",
width: 200,
fixed: "right",
render: (_, record) => (
<Space>
{/* {(record.isEventReportSpecial === 2 && props.permission("qyd-rescue-view")) && ( */}
<Button
type="link"
onClick={() => {
props.history.push(`./view?id=${record.id}`);
}}
>
查看专报
</Button>
{/* // )} */}
{/* { */}
{/* (record.isRescueExecuted === 4 && props.permission("qyd-rescue-rescue-record")) && ( */}
<Button
type="link"
onClick={() => {
const params = new URLSearchParams({
id: record.id || "",
eventTitle: record.eventTitle || "",
executorDeptName: record.executorDeptName || "",
executorName: record.executorName || "",
executionTime: record.executionTime ? dayjs(record.executionTime).format("YYYY-MM-DD HH:mm:ss") : "",
updateTime: record.updateTime ? dayjs(record.updateTime).format("YYYY-MM-DD HH:mm:ss") : "",
});
props.history.push(`./rescueRecord?${params.toString()}`);
}}
>
救援记录
</Button>
{/* ) */}
{/* } */}
</Space>
),
},
]}
{...
tableProps
}
/>
</Page>
)
;
}
export default Connect([NS_EVENT_REPORT, NS_RESUE], true)(Permission(List));

View File

@ -0,0 +1,7 @@
import ViewPage from "~/pages/Container/Enterprise/EmergencyRescue/Rescue/RescueRecord";
function RescueRecord(props) {
return (<ViewPage {...props} />);
}
export default RescueRecord;

View File

@ -0,0 +1,7 @@
import ViewPage from "~/pages/Container/Enterprise/EmergencyRescue/Rescue/View";
function Viev(props) {
return (<ViewPage {...props} />);
}
export default Viev;