值班日志

master
LiuJiaNan 2026-04-10 17:46:54 +08:00
parent 36803e7362
commit 8bdd8ddb1c
9 changed files with 324 additions and 0 deletions

View File

@ -68,3 +68,5 @@
`/emergencyRescue/container/enterprise/planAndDrill/emergencyPlan/list` `/emergencyRescue/container/enterprise/planAndDrill/emergencyPlan/list`
- 预案与演练/应急演练管理 - 预案与演练/应急演练管理
`/emergencyRescue/container/enterprise/planAndDrill/emergencyExercise/list` `/emergencyRescue/container/enterprise/planAndDrill/emergencyExercise/list`
- 应急救援/值班管理/值班日志
`/emergencyRescue/container/enterprise/emergencyRescue/duty/dutyLog/list`

26
src/api/dutyLog/index.js Normal file
View File

@ -0,0 +1,26 @@
import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
export const dutyLogList = declareRequest(
"dutyLogLoading",
"Post > @/emergencyRescue/dutyLog/list",
);
export const dutyLogAdd = declareRequest(
"dutyLogLoading",
"Post > @/emergencyRescue/dutyLog/save",
);
export const dutyLogUpdate = declareRequest(
"dutyLogLoading",
"Put > @/emergencyRescue/dutyLog/edit",
);
export const dutyLogInfo = declareRequest(
"dutyLogLoading",
"Get > /emergencyRescue/dutyLog/{id}",
);
export const dutyLogDelete = declareRequest(
"dutyLogLoading",
"Delete > @/emergencyRescue/dutyLog/{id}",
);
export const dutyLogDeleteBatch = declareRequest(
"dutyLogLoading",
"Delete > @/emergencyRescue/dutyLog/ids?ids={ids}",
);

View File

@ -26,3 +26,4 @@ export const NS_EMERGENCY_RESCUE_TEAM = defineNamespace("emergencyRescueTeam");
export const NS_ENTERPRISE_PLAN = defineNamespace("enterprisePlan"); export const NS_ENTERPRISE_PLAN = defineNamespace("enterprisePlan");
export const NS_EMERGENCY_PLAN = defineNamespace("emergencyPlan"); export const NS_EMERGENCY_PLAN = defineNamespace("emergencyPlan");
export const NS_EMERGENCY_EXERCISE = defineNamespace("emergencyExercise"); export const NS_EMERGENCY_EXERCISE = defineNamespace("emergencyExercise");
export const NS_DUTY_LOG = defineNamespace("dutyLog");

View File

@ -0,0 +1,96 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { message } from "antd";
import { useEffect, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder";
import Page from "zy-react-library/components/Page";
import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useGetUserInfo from "zy-react-library/hooks/useGetUserInfo";
import { NS_DUTY_LOG } from "~/enumerate/namespace";
function Add(props) {
const [userInfo, setUserInfo] = useState({});
const query = useGetUrlQuery();
const { getUserInfo } = useGetUserInfo();
const [form] = FormBuilder.useForm();
const getData = async () => {
if (!query.id)
return;
const { data } = await props["dutyLogInfo"]({ id: query.id });
form.setFieldsValue({
...data,
time: [data.startTime, data.endTime],
});
};
useEffect(() => {
getData();
(async () => {
const userInfo = await getUserInfo();
setUserInfo(userInfo);
})();
}, []);
const onSubmit = async (values) => {
const { success } = await props[query.id ? "dutyLogUpdate" : "dutyLogAdd"]({
...values,
startTime: values.time[0],
endTime: values.time[1],
id: query.id,
});
if (success) {
message.success(query.id ? "编辑成功" : "新增成功");
props.history.goBack();
}
};
return (
<Page headerTitle={query.id ? "编辑" : "新增"} isShowFooter={false}>
<FormBuilder
loading={props.dutyLog.dutyLogLoading}
options={[
{ name: "unitName", label: "单位名称" },
{ name: "time", label: "值班时间", render: FORM_ITEM_RENDER_ENUM.DATETIME_RANGE },
{ name: "dutyRecord", label: "值班记录", render: FORM_ITEM_RENDER_ENUM.TEXTAREA, span: 24 },
{ name: "handlingSituation", label: "处理情况", render: FORM_ITEM_RENDER_ENUM.TEXTAREA, span: 24 },
{ name: "handoverMatters", label: "交接事项", render: FORM_ITEM_RENDER_ENUM.TEXTAREA, span: 24 },
{
name: "dutyPersonnel",
label: "值班人员",
render: (
<PersonnelSelect
params={{ departmentId: userInfo.departmentId }}
onGetLabel={(label) => {
form.setFieldValue("dutyPersonnelName", label);
}}
/>
),
},
{ name: "dutyPersonnelName", label: "值班人员名称", onlyForLabel: true },
{
name: "reliefPersonnel",
label: "接班人员",
render: (
<PersonnelSelect
params={{ departmentId: userInfo.departmentId }}
onGetLabel={(label) => {
form.setFieldValue("reliefPersonnelName", label);
}}
/>
),
},
{ name: "reliefPersonnelName", label: "接班人员名称", onlyForLabel: true },
]}
form={form}
onFinish={onSubmit}
/>
</Page>
);
}
export default Connect([NS_DUTY_LOG], true)(Add);

View File

@ -0,0 +1,142 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, message, Modal, Space } from "antd";
import { useState } from "react";
import AddIcon from "zy-react-library/components/Icon/AddIcon";
import DeleteIcon from "zy-react-library/components/Icon/DeleteIcon";
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 useTable from "zy-react-library/hooks/useTable";
import { NS_DUTY_LOG } from "~/enumerate/namespace";
function List(props) {
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [form] = Search.useForm();
const { tableProps, getData } = useTable(props["dutyLogList"], {
form,
});
const onDelete = (record) => {
Modal.confirm({
title: "删除确认",
content: `确定要删除【${record.unitName}】吗`,
onOk: async () => {
const { success } = await props["dutyLogDelete"]({ id: record.id });
if (success) {
message.success("删除成功");
getData();
}
},
});
};
const onDeleteBatch = () => {
if (selectedRowKeys.length === 0) {
message.warning("请选择要删除的记录");
return;
}
Modal.confirm({
title: "删除确认",
content: "确认要删除吗?",
onOk: async () => {
const { success } = await props["dutyLogDeleteBatch"]({ ids: selectedRowKeys });
if (success) {
message.success("删除成功");
getData();
}
},
});
};
return (
<Page isShowAllAction={false}>
<Search
options={[
{ name: "likeUnitName", label: "单位名称" },
]}
form={form}
onFinish={getData}
/>
<Table
rowSelection={{
preserveSelectedRowKeys: true,
selectedRowKeys,
onChange: (selectedRowKeys) => {
setSelectedRowKeys(selectedRowKeys);
},
}}
toolBarRender={() => (
<Space>
<Button
type="primary"
icon={(<AddIcon />)}
onClick={() => {
props.history.push("./add");
}}
>
新增
</Button>
<Button
type="primary"
danger
ghost
icon={(<DeleteIcon />)}
onClick={onDeleteBatch}
>
批量删除
</Button>
</Space>
)}
columns={[
{ title: "单位名称", dataIndex: "unitName" },
{ title: "开始时间", dataIndex: "startTime" },
{ title: "结束时间", dataIndex: "endTime" },
{ title: "值班人员", dataIndex: "dutyPersonnelName" },
{ title: "接班人员", dataIndex: "reliefPersonnelName" },
{ title: "值班记录", dataIndex: "dutyRecord" },
{ title: "处理情况", dataIndex: "handlingSituation" },
{ title: "交接事宜", dataIndex: "handoverMatters" },
{
title: "操作",
width: 150,
fixed: "right",
render: (_, record) => (
<Space>
<Button
type="link"
onClick={() => {
props.history.push(`./view?id=${record.id}`);
}}
>
查看
</Button>
<Button
type="link"
onClick={() => {
props.history.push(`./add?id=${record.id}`);
}}
>
编辑
</Button>
<Button
type="link"
danger
onClick={() => {
onDelete(record);
}}
>
删除
</Button>
</Space>
),
},
]}
{...tableProps}
/>
</Page>
);
}
export default Connect([NS_DUTY_LOG], true)(List);

View File

@ -0,0 +1,42 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Descriptions } from "antd";
import { useEffect, useState } from "react";
import Page from "zy-react-library/components/Page";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import { NS_DUTY_LOG } from "~/enumerate/namespace";
function View(props) {
const [info, setInfo] = useState({});
const query = useGetUrlQuery();
const getData = async () => {
const { data } = await props["dutyLogInfo"]({ id: query.id });
setInfo(data);
};
useEffect(() => {
getData();
}, []);
return (
<Page headerTitle="查看">
<Descriptions
bordered
column={2}
styles={{ label: { width: 200 } }}
items={[
{ label: "单位名称", children: info.unitName },
{ label: "值班时间", children: `${info.startTime} ~ ${info.endTime}` },
{ label: "值班记录", children: info.dutyRecord, span: 2 },
{ label: "处理情况", children: info.handlingSituation, span: 2 },
{ label: "交接事项", children: info.handoverMatters, span: 2 },
{ label: "值班人员", children: info.dutyPersonnelName },
{ label: "接班人员", children: info.reliefPersonnelName },
]}
/>
</Page>
);
}
export default Connect([NS_DUTY_LOG], true)(View);

View File

@ -0,0 +1,5 @@
function DutyLog(props) {
return props.children;
}
export default DutyLog;

View File

@ -0,0 +1,5 @@
function Duty(props) {
return props.children;
}
export default Duty;

View File

@ -0,0 +1,5 @@
function EmergencyRescue(props) {
return props.children;
}
export default EmergencyRescue;