master
LiuJiaNan 2025-12-29 13:35:43 +08:00
parent 97e4a681f3
commit 470bcbd160
21 changed files with 1136 additions and 1013 deletions

View File

@ -9,7 +9,8 @@ module.exports = {
// 应用后端分支名称,部署上线需要 // 应用后端分支名称,部署上线需要
javaGitBranch: "<branch-name>", javaGitBranch: "<branch-name>",
// 接口服务地址 // 接口服务地址
API_HOST: "http://192.168.20.100:30140", // API_HOST: "http://192.168.20.100:30140",
API_HOST: "https://gbs-gateway.qhdsafety.com",
}, },
production: { production: {
// 应用后端分支名称,部署上线需要 // 应用后端分支名称,部署上线需要

View File

@ -32,7 +32,7 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-to-print": "^3.2.0", "react-to-print": "^3.2.0",
"zy-react-library": "^1.0.175" "zy-react-library": "^1.1.10"
}, },
"devDependencies": { "devDependencies": {
"@antfu/eslint-config": "^5.4.1", "@antfu/eslint-config": "^5.4.1",

View File

@ -6,6 +6,7 @@ import "dayjs/locale/zh-cn";
import "../blessed_by_buddha"; import "../blessed_by_buddha";
require("antd/dist/reset.css"); require("antd/dist/reset.css");
require("zy-react-library/css/common.less");
dayjs.locale("zh-cn"); dayjs.locale("zh-cn");
setJJBCommonAntdMessage(message); setJJBCommonAntdMessage(message);

View File

@ -3,7 +3,7 @@ import { Form, message } from "antd";
import { useEffect } from "react"; import { useEffect } from "react";
import Editor from "zy-react-library/components/Editor"; import Editor from "zy-react-library/components/Editor";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import DictionarySelect from "zy-react-library/components/Select/Dictionary"; import DictionarySelect from "zy-react-library/components/Select/Dictionary";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
@ -27,60 +27,58 @@ function Add(props) {
...values, ...values,
id: query.id, id: query.id,
promiseId: query.promiseId, promiseId: query.promiseId,
isRegulatory: 0, isRegulatory: 1,
}); });
if (success) { if (success) {
message.success("操作成功"); message.success("操作成功");
props.history.goBack(); props.history.goBack();
} }
}; };
return ( return (
<div> <Page headerTitle={query.id ? "编辑" : "新增"} isShowFooter={false}>
<HeaderBack title={query.id ? "编辑" : "新增"} /> <FormBuilder
<div style={{ paddingBottom: 10 }}> form={form}
<FormBuilder values={{
form={form} templateDetails: [{}],
values={{ promiseType: 0,
templateDetails: [{}], }}
promiseType: 0, onFinish={onSubmit}
}} loading={props.commitment.commitmentLoading}
onFinish={onSubmit} options={[
loading={props.commitment.commitmentLoading} { name: "promiseName", label: "安全承诺模板名称", span: 24 },
options={[ {
{ name: "promiseName", label: "安全承诺模板名称", span: 24 }, name: "promiseType",
{ label: "安全承诺类型",
name: "promiseType", render: FORM_ITEM_RENDER_ENUM.SELECT,
label: "安全承诺类型", items: PROMISE_TYPE_ENUM.map(item => ({ ...item, bianma: +item.bianma })),
render: FORM_ITEM_RENDER_ENUM.SELECT, componentProps: {
items: PROMISE_TYPE_ENUM.map(item => ({ ...item, bianma: +item.bianma })), disabled: true,
componentProps: {
disabled: true,
},
}, },
{ },
name: "level", {
label: "安全承诺级别", name: "level",
render: ( label: "安全承诺级别",
<DictionarySelect render: (
dictValue="PROMISE_LEVEL" <DictionarySelect
onGetLabel={label => form.setFieldValue("levelName", label)} dictValue="PROMISE_LEVEL"
/> onGetLabel={label => form.setFieldValue("levelName", label)}
), />
}, ),
{ name: "levelName", label: "安全承诺级别名称", onlyForLabel: true }, },
{ { name: "levelName", label: "安全承诺级别名称", onlyForLabel: true },
name: "promiseText", {
label: "承诺内容", name: "promiseText",
span: 24, label: "承诺内容",
render: (<Editor />), span: 24,
required: false, render: (<Editor />),
formItemProps: { required: true }, required: false,
rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }], formItemProps: { required: true },
}, rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
]} },
/> ]}
</div> />
</div> </Page>
); );
} }

View File

@ -1,23 +1,19 @@
import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal, Space } from "antd"; import { Button, Form, message, Modal, Space } from "antd";
import { useState } from "react";
import AddIcon from "zy-react-library/components/Icon/AddIcon"; import AddIcon from "zy-react-library/components/Icon/AddIcon";
import Page from "zy-react-library/components/Page";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
import { getLabelName } from "zy-react-library/utils"; import { getLabelName } from "zy-react-library/utils";
import { NS_COMMITMENT } from "~/enumerate/namespace"; import { NS_COMMITMENT } from "~/enumerate/namespace";
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
function List(props) { function List(props) {
const [form] = Form.useForm(); const [form] = Form.useForm();
const { tableProps, getData } = useTable(props["busPromiseTemplateList"], { const { tableProps, getData } = useTable(props["busPromiseTemplateList"], {
form, form,
}); });
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
const [id, setId] = useState("");
const [modalUrl, setModalUrl] = useState("");
const updateState = (id, state) => { const updateState = (id, state) => {
const stateValue = state === 0 ? 1 : 0; const stateValue = state === 0 ? 1 : 0;
Modal.confirm({ Modal.confirm({
@ -33,7 +29,7 @@ function List(props) {
}); });
}; };
return ( return (
<div style={{ padding: 20 }}> <Page isShowAllAction={false}>
<Search <Search
labelCol={{ span: 8 }} labelCol={{ span: 8 }}
form={form} form={form}
@ -72,9 +68,7 @@ function List(props) {
<Button <Button
type="link" type="link"
onClick={() => { onClick={() => {
setBusPromiseTemplateModalOpen(true); props.history.push(`./view?id=${record.id}`);
setId(record.id);
setModalUrl("busPromiseTemplateView");
}} }}
> >
查看 查看
@ -100,8 +94,7 @@ function List(props) {
]} ]}
{...tableProps} {...tableProps}
/> />
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />} </Page>
</div>
); );
} }

View File

@ -0,0 +1,61 @@
import { Button, Descriptions } from "antd";
import { useRef, useState } from "react";
import { useReactToPrint } from "react-to-print";
import Page from "zy-react-library/components/Page";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import DetailModal from "~/pages/Container/Enterprise/components/DetailModal";
function View() {
const query = useGetUrlQuery();
const [info, setInfo] = useState({});
const contentRef = useRef(null);
const handlePrint = useReactToPrint({
contentRef,
pageStyle: `@page {
margin: 0mm;
}
@media print {
body {
margin: 10px;
padding: 10px;
}
}
`,
documentTitle: "",
});
return (
<Page
headerTitle="查看"
extraActionButtons={(
<Button type="primary" onClick={handlePrint}>
打印模板
</Button>
)}
>
<Descriptions
bordered
column={1}
styles={{ label: { width: 200 } }}
items={[
{ label: "安全承诺模板名称", children: info.promiseName },
{ label: "安全承诺级别", children: info.levelName },
]}
/>
<div ref={contentRef}>
<DetailModal
id={query.id}
modalUrl="busPromiseTemplateView"
inline
onGetData={(data) => {
setInfo(data);
}}
/>
</div>
</Page>
);
}
export default View;

View File

@ -5,7 +5,7 @@ import { cloneDeep } from "lodash-es";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import Editor from "zy-react-library/components/Editor"; import Editor from "zy-react-library/components/Editor";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import DictionarySelect from "zy-react-library/components/Select/Dictionary"; import DictionarySelect from "zy-react-library/components/Select/Dictionary";
import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj"; import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj";
@ -110,250 +110,247 @@ function Add(props) {
}; };
return ( return (
<div> <Page headerTitle={query.id ? "编辑" : "新增"} isShowFooter={false}>
<HeaderBack title={query.id ? "编辑" : "新增"} /> <FormBuilder
<div style={{ paddingBottom: 10 }}> form={form}
<FormBuilder values={{
form={form} promiseType: 0,
values={{ promiseTypeName: "承诺书",
promiseType: 0, promisePeoples: [{}], // 被承诺人
promiseTypeName: "承诺书", promisePersons: [{}], // 承诺人
promisePeoples: [{}], // 被承诺人 }}
promisePersons: [{}], // 承诺人 onFinish={onSubmit}
}} loading={props.commitment.commitmentLoading}
onFinish={onSubmit} options={[
loading={props.commitment.commitmentLoading} { name: "promiseName", label: "安全承诺名称" },
options={[ {
{ name: "promiseName", label: "安全承诺名称" }, name: "level",
{ label: "安全承诺级别",
name: "level", render: (
label: "安全承诺级别", <DictionarySelect
render: ( dictValue="PROMISE_LEVEL"
<DictionarySelect onGetLabel={label => form.setFieldValue("levelName", label)}
dictValue="PROMISE_LEVEL" />
onGetLabel={label => form.setFieldValue("levelName", label)} ),
/> },
), { name: "levelName", label: "安全承诺级别名称", onlyForLabel: true },
}, { name: "promiseTermStart", label: "适用期限开始", render: FORM_ITEM_RENDER_ENUM.DATE },
{ name: "levelName", label: "安全承诺级别名称", onlyForLabel: true }, {
{ name: "promiseTermStart", label: "适用期限开始", render: FORM_ITEM_RENDER_ENUM.DATE }, name: "promiseTermEnd",
{ label: "适用期限结束",
name: "promiseTermEnd", render: FORM_ITEM_RENDER_ENUM.DATE,
label: "适用期限结束", rules: [validatorEndTime(promiseTermStart), {
render: FORM_ITEM_RENDER_ENUM.DATE, validator: (_, value) => {
rules: [validatorEndTime(promiseTermStart), { if (value && promiseTermStart) {
validator: (_, value) => { const startYear = dayjs(promiseTermStart).year();
if (value && promiseTermStart) { const endYear = dayjs(value).year();
const startYear = dayjs(promiseTermStart).year();
const endYear = dayjs(value).year();
if (startYear !== endYear) { if (startYear !== endYear) {
return Promise.reject("开始时间和结束时间不能跨年"); return Promise.reject("开始时间和结束时间不能跨年");
}
} }
return Promise.resolve(); }
}, return Promise.resolve();
}], },
}, }],
{ key: "divider1", label: "承诺内容", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, },
{ { key: "divider1", label: "承诺内容", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
key: "commitmentContentButton", {
customizeRender: true, key: "commitmentContentButton",
span: 24, customizeRender: true,
render: ( span: 24,
<div style={{ textAlign: "right", marginBottom: "20px" }}> render: (
<Button <div style={{ textAlign: "right", marginBottom: "20px" }}>
type="primary" <Button
onClick={() => { type="primary"
setchoiceTemplateModalOpen(true); onClick={() => {
}} setchoiceTemplateModalOpen(true);
> }}
选择模板 >
</Button> 选择模板
</div> </Button>
), </div>
}, ),
{ name: "promiseTypeName", label: "安全承诺类型", onlyForLabel: true }, },
{ name: "promiseType", label: "安全承诺类型", onlyForLabel: true }, { name: "promiseTypeName", label: "安全承诺类型", onlyForLabel: true },
{ { name: "promiseType", label: "安全承诺类型", onlyForLabel: true },
name: "promiseText", {
label: "安全承诺内容", name: "promiseText",
span: 24, label: "安全承诺内容",
render: (<Editor />), span: 24,
required: false, render: (<Editor />),
formItemProps: { required: true }, required: false,
rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }], formItemProps: { required: true },
}, rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
{ key: "divider2", label: "承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, },
{ { key: "divider2", label: "承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
name: "promisePersons", {
span: 24, name: "promisePersons",
render: FORM_ITEM_RENDER_ENUM.FORM_LIST, span: 24,
formListUniqueProps: { render: FORM_ITEM_RENDER_ENUM.FORM_LIST,
options: (field, index) => ( formListUniqueProps: {
[ options: (field, index) => (
{ [
name: [field.name, "departmentId"], {
span: 8, name: [field.name, "departmentId"],
labelCol: { span: 6 }, span: 8,
label: `部门${index + 1}`, labelCol: { span: 6 },
render: ( label: `部门${index + 1}`,
<DepartmentSelectTree render: (
onChange={async (departmentId) => { <DepartmentSelectTree
form.setFieldValue(["promisePersons", field.name, "postId"], ""); onChange={async (departmentId) => {
form.setFieldValue(["promisePersons", field.name, "postName"], ""); form.setFieldValue(["promisePersons", field.name, "postId"], "");
form.setFieldValue(["promisePersons", field.name, "userName"], ""); form.setFieldValue(["promisePersons", field.name, "postName"], "");
form.setFieldValue(["promisePersons", field.name, "userId"], []);
if (!departmentId)
return;
getPostList(departmentId, index);
}}
onGetLabel={(label) => {
form.setFieldValue(["promisePersons", field.name, "departmentName"], label);
}}
/>
),
},
{ name: [field.name, "departmentName"], label: `部门${index + 1}名称`, onlyForLabel: true },
{
name: [field.name, "postId"],
span: 8,
labelCol: { span: 6 },
label: `岗位${index + 1}`,
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: postList[index] || [],
itemsField: { labelKey: "postName", valueKey: "id" },
componentProps: {
onChange: (event) => {
form.setFieldValue(["promisePersons", field.name, "postName"], getLabelName({
list: postList[index],
status: event,
nameKey: "postName",
idKey: "id",
}));
form.setFieldValue(["promisePersons", field.name, "userName"], ""); form.setFieldValue(["promisePersons", field.name, "userName"], "");
form.setFieldValue(["promisePersons", field.name, "userId"], []); form.setFieldValue(["promisePersons", field.name, "userId"], []);
},
if (!departmentId)
return;
getPostList(departmentId, index);
}}
onGetLabel={(label) => {
form.setFieldValue(["promisePersons", field.name, "departmentName"], label);
}}
/>
),
},
{ name: [field.name, "departmentName"], label: `部门${index + 1}名称`, onlyForLabel: true },
{
name: [field.name, "postId"],
span: 8,
labelCol: { span: 6 },
label: `岗位${index + 1}`,
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: postList[index] || [],
itemsField: { labelKey: "postName", valueKey: "id" },
componentProps: {
onChange: (event) => {
form.setFieldValue(["promisePersons", field.name, "postName"], getLabelName({
list: postList[index],
status: event,
nameKey: "postName",
idKey: "id",
}));
form.setFieldValue(["promisePersons", field.name, "userName"], "");
form.setFieldValue(["promisePersons", field.name, "userId"], []);
}, },
}, },
{ name: [field.name, "postName"], label: `岗位${index + 1}名称`, onlyForLabel: true }, },
{ name: [field.name, "userName"], label: `人员${index + 1}名称`, onlyForLabel: true }, { name: [field.name, "postName"], label: `岗位${index + 1}名称`, onlyForLabel: true },
{ { name: [field.name, "userName"], label: `人员${index + 1}名称`, onlyForLabel: true },
name: [field.name, "userId"], {
span: 8, name: [field.name, "userId"],
labelCol: { span: 6 }, span: 8,
label: `人员${index + 1}`, labelCol: { span: 6 },
render: ( label: `人员${index + 1}`,
<PersonnelSelect render: (
params={{ <PersonnelSelect
postId: promisePersons?.[field.name]?.postId || "", params={{
departmentId: promisePersons?.[field.name]?.departmentId || "", postId: promisePersons?.[field.name]?.postId || "",
}} departmentId: promisePersons?.[field.name]?.departmentId || "",
isNeedPostId={true} }}
onGetLabel={(label) => { isNeedPostId={true}
form.setFieldValue(["promisePersons", field.name, "userName"], label); onGetLabel={(label) => {
}} form.setFieldValue(["promisePersons", field.name, "userName"], label);
mode="multiple" }}
/> mode="multiple"
), />
}, ),
] },
), ]
},
},
{ key: "divider3", label: "被承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{
name: "passiveDepartmentId",
label: "部门",
span: 8,
labelCol: { span: 6 },
render: (
<DepartmentSelectTree
onChange={async (departmentId) => {
form.setFieldValue("passivePostName", "");
form.setFieldValue("passivePostId", []);
form.setFieldValue("passiveUserName", "");
form.setFieldValue("passiveUserId", "");
if (!departmentId)
return;
getPostList1(departmentId);
}}
onGetLabel={(label) => {
form.setFieldValue("passiveDepartmentName", label);
}}
/>
), ),
}, },
{ name: "passiveDepartmentName", label: "部门名称", onlyForLabel: true }, },
{ { key: "divider3", label: "被承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
name: "passivePostId", {
label: "岗位", name: "passiveDepartmentId",
span: 8, label: "部门",
labelCol: { span: 6 }, span: 8,
render: FORM_ITEM_RENDER_ENUM.SELECT, labelCol: { span: 6 },
items: postList1, render: (
itemsField: { labelKey: "postName", valueKey: "id" }, <DepartmentSelectTree
componentProps: { onChange={async (departmentId) => {
onChange: (event) => { form.setFieldValue("passivePostName", "");
form.setFieldValue("passivePostName", getLabelName({ form.setFieldValue("passivePostId", []);
list: postList1,
status: event,
nameKey: "postName",
idKey: "id",
}));
form.setFieldValue("passiveUserName", ""); form.setFieldValue("passiveUserName", "");
form.setFieldValue("passiveUserId", ""); form.setFieldValue("passiveUserId", "");
},
if (!departmentId)
return;
getPostList1(departmentId);
}}
onGetLabel={(label) => {
form.setFieldValue("passiveDepartmentName", label);
}}
/>
),
},
{ name: "passiveDepartmentName", label: "部门名称", onlyForLabel: true },
{
name: "passivePostId",
label: "岗位",
span: 8,
labelCol: { span: 6 },
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: postList1,
itemsField: { labelKey: "postName", valueKey: "id" },
componentProps: {
onChange: (event) => {
form.setFieldValue("passivePostName", getLabelName({
list: postList1,
status: event,
nameKey: "postName",
idKey: "id",
}));
form.setFieldValue("passiveUserName", "");
form.setFieldValue("passiveUserId", "");
}, },
}, },
{ name: "passivePostName", label: "岗位名称", onlyForLabel: true }, },
{ { name: "passivePostName", label: "岗位名称", onlyForLabel: true },
name: "passiveUserId", {
label: "人员", name: "passiveUserId",
span: 8, label: "人员",
labelCol: { span: 6 }, span: 8,
render: ( labelCol: { span: 6 },
<PersonnelSelect render: (
params={{ <PersonnelSelect
postId: passivePostId, params={{
departmentId: passiveDepartmentId, postId: passivePostId,
}} departmentId: passiveDepartmentId,
isNeedPostId={true} }}
onGetLabel={(label) => { isNeedPostId={true}
form.setFieldValue("passiveUserName", label); onGetLabel={(label) => {
}} form.setFieldValue("passiveUserName", label);
/> }}
), />
}, ),
{ name: "passiveUserName", label: "人员名称", onlyForLabel: true }, },
]} { name: "passiveUserName", label: "人员名称", onlyForLabel: true },
]}
/>
{choiceTemplateModalOpen && (
<ChoiceTemplateModal
onCancel={() => setchoiceTemplateModalOpen(false)}
onConfirm={(values) => {
form.setFieldValue("promiseType", values.promiseType);
form.setFieldValue("promiseTypeName", getLabelName({
list: PROMISE_TYPE_ENUM,
status: values.promiseType,
}));
form.setFieldValue("promiseText", values.promiseText);
form.setFieldValue("promisePersons", [{}]);
form.setFieldValue("passiveDepartmentName", "");
form.setFieldValue("passiveDepartmentId", "");
form.setFieldValue("passivePostName", "");
form.setFieldValue("passivePostId", "");
form.setFieldValue("passiveUserName", "");
form.setFieldValue("passiveUserId", "");
setPostList([]);
setPostList1([]);
}}
/> />
{choiceTemplateModalOpen && ( )}
<ChoiceTemplateModal </Page>
onCancel={() => setchoiceTemplateModalOpen(false)}
onConfirm={(values) => {
form.setFieldValue("promiseType", values.promiseType);
form.setFieldValue("promiseTypeName", getLabelName({
list: PROMISE_TYPE_ENUM,
status: values.promiseType,
}));
form.setFieldValue("promiseText", values.promiseText);
form.setFieldValue("promisePersons", [{}]);
form.setFieldValue("passiveDepartmentName", "");
form.setFieldValue("passiveDepartmentId", "");
form.setFieldValue("passivePostName", "");
form.setFieldValue("passivePostId", "");
form.setFieldValue("passiveUserName", "");
form.setFieldValue("passiveUserId", "");
setPostList([]);
setPostList1([]);
}}
/>
)}
</div>
</div>
); );
} }
@ -365,6 +362,7 @@ const ChoiceTemplateModalComponent = (props) => {
return ( return (
<Modal <Modal
title="选择模板"
open open
width={1200} width={1200}
maskClosable={false} maskClosable={false}
@ -383,6 +381,8 @@ const ChoiceTemplateModalComponent = (props) => {
onFinish={getData} onFinish={getData}
/> />
<Table <Table
options={false}
disabledResizer={true}
columns={[ columns={[
{ title: "安全承诺名称", dataIndex: "promiseName" }, { title: "安全承诺名称", dataIndex: "promiseName" },
{ {

View File

@ -1,7 +1,7 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Divider } from "antd"; import { Button, Descriptions, Divider } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import { NS_COMMITMENT } from "~/enumerate/namespace"; import { NS_COMMITMENT } from "~/enumerate/namespace";
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal"; import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
@ -21,74 +21,75 @@ function Detail(props) {
useEffect(() => { useEffect(() => {
getData(); getData();
}, []); }, []);
return (
<div>
<HeaderBack title="查看" />
<div style={{ padding: 20 }}>
<Divider orientation="left">基本信息</Divider>
<Descriptions
bordered
column={1}
styles={{ label: { width: 200 }, content: { width: "auto" } }}
items={[
{ label: "安全承诺名称", children: detail.promiseName },
{ label: "安全承诺级别", children: detail.levelName },
{ label: "适用期限开始", children: detail.promiseTermStart },
{ label: "适用期限结束", children: detail.promiseTermEnd },
]}
/>
<Divider orientation="left">承诺内容</Divider>
<Descriptions
bordered
column={1}
styles={{ label: { width: 200 }, content: { width: "auto" } }}
items={[
{ label: "承诺内容", children: (<div dangerouslySetInnerHTML={{ __html: detail.promiseText }} />) },
]}
/>
<Divider orientation="left">{detail.promiseType === 1 ? "受状人" : "承诺人"}</Divider>
<Descriptions return (
bordered <Page
column={3} headerTitle="查看"
styles={{ label: { width: 200 }, content: { width: "auto" } }} contentPadding="0 20px 20px 20px"
items={[ extraActionButtons={(
...(detail.promisePersons || []).flatMap((item, index) => { <Button
const base = [ type="primary"
{ label: `部门${index + 1}`, children: item.departmentName || "-" }, onClick={() => {
{ label: `岗位${index + 1}`, children: item.postName || "-" }, setBusPromiseTemplateModalOpen(true);
{ label: `人员${index + 1}`, children: item.userName || "-" }, setId(query.id);
]; setModalUrl("busPromiseView");
return base; }}
}), >
]} 模板
/> </Button>
<Divider orientation="left">{detail.promiseType === 1 ? "发状人" : "被承诺人"}</Divider> )}
<Descriptions >
bordered <Divider orientation="left">基本信息</Divider>
column={3} <Descriptions
styles={{ label: { width: 200 }, content: { width: "auto" } }} bordered
items={[ column={1}
{ label: "部门", children: detail.promisePeople?.departmentName || "-" }, styles={{ label: { width: 200 }, content: { width: "auto" } }}
{ label: "岗位", children: detail.promisePeople?.postName || "-" }, items={[
{ label: "人员", children: detail.promisePeople?.userName || "-" }, { label: "安全承诺名称", children: detail.promiseName },
]} { label: "安全承诺级别", children: detail.levelName },
/> { label: "适用期限开始", children: detail.promiseTermStart },
<div style={{ textAlign: "center", margin: "20px 0" }}> { label: "适用期限结束", children: detail.promiseTermEnd },
<Button ]}
type="primary" />
onClick={() => { <Divider orientation="left">承诺内容</Divider>
setBusPromiseTemplateModalOpen(true); <Descriptions
setId(query.id); bordered
setModalUrl("busPromiseView"); column={1}
}} styles={{ label: { width: 200 }, content: { width: "auto" } }}
> items={[
模板 { label: "承诺内容", children: (<div dangerouslySetInnerHTML={{ __html: detail.promiseText }} />) },
</Button> ]}
</div> />
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />} <Divider orientation="left">{detail.promiseType === 1 ? "受状人" : "承诺人"}</Divider>
</div>
</div> <Descriptions
bordered
column={3}
styles={{ label: { width: 200 }, content: { width: "auto" } }}
items={[
...(detail.promisePersons || []).flatMap((item, index) => {
const base = [
{ label: `部门${index + 1}`, children: item.departmentName || "-" },
{ label: `岗位${index + 1}`, children: item.postName || "-" },
{ label: `人员${index + 1}`, children: item.userName || "-" },
];
return base;
}),
]}
/>
<Divider orientation="left">{detail.promiseType === 1 ? "发状人" : "被承诺人"}</Divider>
<Descriptions
bordered
column={3}
styles={{ label: { width: 200 }, content: { width: "auto" } }}
items={[
{ label: "部门", children: detail.promisePeople?.departmentName || "-" },
{ label: "岗位", children: detail.promisePeople?.postName || "-" },
{ label: "人员", children: detail.promisePeople?.userName || "-" },
]}
/>
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
</Page>
); );
} }

View File

@ -3,6 +3,7 @@ import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal, Space, Tooltip } from "antd"; import { Button, Form, message, Modal, Space, Tooltip } from "antd";
import dayjs from "dayjs"; import dayjs from "dayjs";
import AddIcon from "zy-react-library/components/Icon/AddIcon"; import AddIcon from "zy-react-library/components/Icon/AddIcon";
import Page from "zy-react-library/components/Page";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import DictionarySelect from "zy-react-library/components/Select/Dictionary"; import DictionarySelect from "zy-react-library/components/Select/Dictionary";
import DepartmentSelectTree from "zy-react-library/components/SelectTree/Department/Gwj"; import DepartmentSelectTree from "zy-react-library/components/SelectTree/Department/Gwj";
@ -39,7 +40,7 @@ function List(props) {
} }
}; };
return ( return (
<div style={{ padding: 20 }}> <Page isShowAllAction={false}>
<Search <Search
form={form} form={form}
options={[ options={[
@ -133,7 +134,7 @@ function List(props) {
]} ]}
{...tableProps} {...tableProps}
/> />
</div> </Page>
); );
} }

View File

@ -1,7 +1,7 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, Space } from "antd"; import { Button, Form, Space } from "antd";
import { useState } from "react"; import { useState } from "react";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
@ -19,57 +19,55 @@ function List(props) {
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false); const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
const [id, setId] = useState(""); const [id, setId] = useState("");
const [modalUrl, setModalUrl] = useState(""); const [modalUrl, setModalUrl] = useState("");
return (
<div>
<HeaderBack title="签署详情" />
<div style={{ padding: 20 }}>
<Table
toolBarRender={() => (
<Space>
<Button
type="primary"
onClick={() => {
setBusPromiseTemplateModalOpen(true);
setId(query.id);
setModalUrl("busPromisePeopleAllSign");
}}
>
签署汇总
</Button>
</Space>
)}
columns={[
{ title: "部门", dataIndex: "departmentName" },
{ title: "岗位", dataIndex: "postName" },
{ title: "人员", dataIndex: "userName" },
{ title: "签署时间", dataIndex: "signTime" },
{ title: "签署状态", render: (_, record) => getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
{
title: "操作",
width: 200,
fixed: "right",
render: (_, record) => (
<Space>
<Button
type="link"
onClick={() => {
setBusPromiseTemplateModalOpen(true);
setId(record.id);
setModalUrl("busPromisePeopleView");
}}
>
查看
</Button>
</Space>
),
},
]}
{...tableProps}
/>
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
</div>
</div>
return (
<Page headerTitle="签署详情">
<Table
toolBarRender={() => (
<Space>
<Button
type="primary"
ghost
onClick={() => {
setBusPromiseTemplateModalOpen(true);
setId(query.id);
setModalUrl("busPromisePeopleAllSign");
}}
>
签署汇总
</Button>
</Space>
)}
columns={[
{ title: "部门", dataIndex: "departmentName" },
{ title: "岗位", dataIndex: "postName" },
{ title: "人员", dataIndex: "userName" },
{ title: "签署时间", dataIndex: "signTime" },
{ title: "签署状态", render: (_, record) => getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
{
title: "操作",
width: 200,
fixed: "right",
render: (_, record) => (
<Space>
<Button
type="link"
onClick={() => {
setBusPromiseTemplateModalOpen(true);
setId(record.id);
setModalUrl("busPromisePeopleView");
}}
>
查看
</Button>
</Space>
),
},
]}
{...tableProps}
/>
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
</Page>
); );
} }

View File

@ -3,7 +3,7 @@ import { Form, message } from "antd";
import { useEffect } from "react"; import { useEffect } from "react";
import Editor from "zy-react-library/components/Editor"; import Editor from "zy-react-library/components/Editor";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import DictionarySelect from "zy-react-library/components/Select/Dictionary"; import DictionarySelect from "zy-react-library/components/Select/Dictionary";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
@ -32,53 +32,51 @@ function Add(props) {
...values, ...values,
id: query.id, id: query.id,
promiseId: query.promiseId, promiseId: query.promiseId,
isRegulatory: 1, isRegulatory: 0,
}); });
if (success) { if (success) {
message.success("操作成功"); message.success("操作成功");
props.history.goBack(); props.history.goBack();
} }
}; };
return ( return (
<div> <Page isShowFooter={false} headerTitle={query.id ? "编辑" : "新增"}>
<HeaderBack title={query.id ? "编辑" : "新增"} /> <FormBuilder
<div style={{ paddingBottom: 10 }}> form={form}
<FormBuilder onFinish={onSubmit}
form={form} loading={props.commitment.commitmentLoading}
onFinish={onSubmit} options={[
loading={props.commitment.commitmentLoading} { name: "promiseName", label: "安全承诺模板名称", span: 24 },
options={[ {
{ name: "promiseName", label: "安全承诺模板名称", span: 24 }, name: "promiseType",
{ label: "安全承诺类型",
name: "promiseType", render: FORM_ITEM_RENDER_ENUM.SELECT,
label: "安全承诺类型", items: PROMISE_TYPE_ENUM.map(item => ({ ...item, bianma: +item.bianma })),
render: FORM_ITEM_RENDER_ENUM.SELECT, },
items: PROMISE_TYPE_ENUM.map(item => ({ ...item, bianma: +item.bianma })), {
}, name: "level",
{ label: "安全承诺级别",
name: "level", render: (
label: "安全承诺级别", <DictionarySelect
render: ( dictValue="PROMISE_LEVEL"
<DictionarySelect onGetLabel={label => form.setFieldValue("levelName", label)}
dictValue="PROMISE_LEVEL" />
onGetLabel={label => form.setFieldValue("levelName", label)} ),
/> },
), { name: "levelName", label: "安全承诺级别名称", onlyForLabel: true },
}, {
{ name: "levelName", label: "安全承诺级别名称", onlyForLabel: true }, name: "promiseText",
{ label: "承诺内容",
name: "promiseText", span: 24,
label: "承诺内容", render: (<Editor />),
span: 24, required: false,
render: (<Editor />), formItemProps: { required: true },
required: false, rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
formItemProps: { required: true }, },
rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }], ]}
}, />
]} </Page>
/>
</div>
</div>
); );
} }

View File

@ -1,8 +1,8 @@
import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal, Space } from "antd"; import { Button, Form, message, Modal, Space } from "antd";
import { useState } from "react";
import AddIcon from "zy-react-library/components/Icon/AddIcon"; import AddIcon from "zy-react-library/components/Icon/AddIcon";
import Page from "zy-react-library/components/Page";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
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";
@ -10,16 +10,12 @@ import useTable from "zy-react-library/hooks/useTable";
import { getLabelName } from "zy-react-library/utils"; import { getLabelName } from "zy-react-library/utils";
import { PROMISE_TYPE_ENUM } from "~/enumerate/constant"; import { PROMISE_TYPE_ENUM } from "~/enumerate/constant";
import { NS_COMMITMENT } from "~/enumerate/namespace"; import { NS_COMMITMENT } from "~/enumerate/namespace";
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
function List(props) { function List(props) {
const [form] = Form.useForm(); const [form] = Form.useForm();
const { tableProps, getData } = useTable(props["busPromiseTemplateList"], { const { tableProps, getData } = useTable(props["busPromiseTemplateList"], {
form, form,
}); });
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
const [id, setId] = useState("");
const [modalUrl, setModalUrl] = useState("");
const onDelete = (id) => { const onDelete = (id) => {
Modal.confirm({ Modal.confirm({
title: "删除确认", title: "删除确认",
@ -48,7 +44,7 @@ function List(props) {
}); });
}; };
return ( return (
<div style={{ padding: 20 }}> <Page isShowAllAction={false}>
<Search <Search
labelCol={{ span: 8 }} labelCol={{ span: 8 }}
form={form} form={form}
@ -90,19 +86,17 @@ function List(props) {
<Button <Button
type="link" type="link"
onClick={() => { onClick={() => {
setBusPromiseTemplateModalOpen(true); props.history.push(`./view?id=${record.id}`);
setId(record.id);
setModalUrl("busPromiseTemplateView");
}} }}
> >
查看 查看
</Button> </Button>
{(props.permission("jg-promise-template-disable") && record.isRegulatory === 1) && ( {(props.permission("jg-promise-template-disable") && record.isRegulatory === 0) && (
<Button type="link" onClick={() => updateState(record.id, record.state)}> <Button type="link" onClick={() => updateState(record.id, record.state)}>
{record.state === 0 ? "禁用" : "启用"} {record.state === 0 ? "禁用" : "启用"}
</Button> </Button>
)} )}
{(props.permission("jg-promise-template-edit") && record.isRegulatory === 1) && ( {(props.permission("jg-promise-template-edit") && record.isRegulatory === 0) && (
<Button <Button
type="link" type="link"
onClick={() => { onClick={() => {
@ -112,15 +106,14 @@ function List(props) {
编辑 编辑
</Button> </Button>
)} )}
{(props.permission("jg-promise-template-deletes") && record.isRegulatory === 1) && <Button type="link" danger onClick={() => onDelete(record.id)}>删除</Button>} {(props.permission("jg-promise-template-deletes") && record.isRegulatory === 0) && <Button type="link" danger onClick={() => onDelete(record.id)}>删除</Button>}
</Space> </Space>
), ),
}, },
]} ]}
{...tableProps} {...tableProps}
/> />
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />} </Page>
</div>
); );
} }

View File

@ -0,0 +1,65 @@
import { Button, Descriptions } from "antd";
import { useRef, useState } from "react";
import { useReactToPrint } from "react-to-print";
import Page from "zy-react-library/components/Page";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import { getLabelName } from "zy-react-library/utils";
import { PROMISE_TYPE_ENUM } from "~/enumerate/constant";
import DetailModal from "~/pages/Container/Supervise/components/DetailModal";
function View() {
const query = useGetUrlQuery();
const [info, setInfo] = useState({});
const contentRef = useRef(null);
const handlePrint = useReactToPrint({
contentRef,
pageStyle: `@page {
margin: 0mm;
}
@media print {
body {
margin: 10px;
padding: 10px;
}
}
`,
documentTitle: "",
});
return (
<Page
headerTitle="查看"
extraActionButtons={(
<Button type="primary" onClick={handlePrint}>
打印模板
</Button>
)}
>
<Descriptions
bordered
column={1}
styles={{ label: { width: 200 } }}
items={[
{ label: "公司名称", children: info.corpName },
{ label: "安全承诺模板名称", children: info.promiseName },
{ label: "安全承诺类型", children: getLabelName({ list: PROMISE_TYPE_ENUM, status: info.promiseType }) },
{ label: "安全承诺级别", children: info.levelName },
]}
/>
<div ref={contentRef}>
<DetailModal
id={query.id}
modalUrl="busPromiseTemplateView"
inline
onGetData={(data) => {
setInfo(data);
}}
/>
</div>
</Page>
);
}
export default View;

View File

@ -5,7 +5,7 @@ import { cloneDeep } from "lodash-es";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import Editor from "zy-react-library/components/Editor"; import Editor from "zy-react-library/components/Editor";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import DictionarySelect from "zy-react-library/components/Select/Dictionary"; import DictionarySelect from "zy-react-library/components/Select/Dictionary";
import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj"; import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj";
@ -55,8 +55,8 @@ function Add(props) {
const { data } = await props["busPromiseView"]({ id: query.id }); const { data } = await props["busPromiseView"]({ id: query.id });
const promisePeopleBack = data.promisePeopleBack.map(item => ({ const promisePeopleBack = data.promisePeopleBack.map(item => ({
...item, ...item,
userName: item.userName.split(","), userName: data.promiseType === 1 ? item.userName : item.userName.split(","),
userId: item.userId.split(","), userId: data.promiseType === 1 ? item.userId : item.userId.split(","),
})); }));
const values = { const values = {
...data, ...data,
@ -81,15 +81,21 @@ function Add(props) {
}, []); }, []);
const onSubmit = async (values) => { const onSubmit = async (values) => {
await isExistenceDuplicateSelection({ data: values.promisePersons, key: "userId", message: `${promiseType === 1 ? "受状人" : "承诺人"}不能重复` }); if (promiseType === 1) {
await isExistenceDuplicateSelection({ data: values.promisePersons, key: "userId", message: "受状人不能重复" });
}
else {
await isExistenceDuplicateSelection({ data: values.promisePersons, key: "postId", message: "承诺人岗位不能重复" });
}
const peoples = values.promisePeoples.map(item => ({ const peoples = values.promisePeoples.map(item => ({
...item, ...item,
isPromisePeople: 1, isPromisePeople: 1,
})); }));
const peopleNumInvolved = values.promisePersons.reduce((acc, item) => acc + item.userName.length, 0);
const persons = values.promisePersons.map(item => ({ const persons = values.promisePersons.map(item => ({
...item, ...item,
userName: item.userName, userName: Array.isArray(item.userName) ? item.userName.join(",") : item.userName,
userId: item.userId, userId: Array.isArray(item.userId) ? item.userId.join(",") : item.userId,
isPromisePeople: 0, isPromisePeople: 0,
})); }));
const promiseAll = [...peoples, ...persons]; const promiseAll = [...peoples, ...persons];
@ -98,7 +104,7 @@ function Add(props) {
id: query.id, id: query.id,
promiseId: query.promiseId, promiseId: query.promiseId,
promisePeoples: promiseAll, promisePeoples: promiseAll,
peopleNumInvolved: values.promisePersons.length, peopleNumInvolved,
}); });
if (success) { if (success) {
message.success("操作成功"); message.success("操作成功");
@ -107,283 +113,281 @@ function Add(props) {
}; };
return ( return (
<div> <Page headerTitle={query.id ? "编辑" : "新增"} isShowFooter={false}>
<HeaderBack title={query.id ? "编辑" : "新增"} /> <FormBuilder
<div style={{ paddingBottom: 10 }}> form={form}
<FormBuilder values={{
form={form} promisePeoples: [{}], // 被承诺人
values={{ promisePersons: [{}], // 承诺人
promisePeoples: [{}], // 被承诺人 }}
promisePersons: [{}], // 承诺人 onFinish={onSubmit}
}} loading={props.commitment.commitmentLoading}
onFinish={onSubmit} options={[
loading={props.commitment.commitmentLoading} { name: "promiseName", label: "承诺书名称", span: 24 },
options={[ {
{ name: "promiseName", label: "承诺书名称", span: 24 }, name: "releasePlatform",
{ label: "下发对象",
name: "releasePlatform", span: releasePlatform === 1 ? 12 : 24,
label: "下发对象", render: FORM_ITEM_RENDER_ENUM.SELECT,
span: releasePlatform === 1 ? 12 : 24, items: RELEASE_PLATFORM_ENUM.map(item => ({ ...item, bianma: +item.bianma })),
render: FORM_ITEM_RENDER_ENUM.SELECT, componentProps: {
items: RELEASE_PLATFORM_ENUM.map(item => ({ ...item, bianma: +item.bianma })), onChange: () => {
componentProps: { form.setFieldValue("promisePersons", [{}]);
onChange: () => { form.setFieldValue("levelName", "");
form.setFieldValue("promisePersons", [{}]);
form.setFieldValue("levelName", "");
},
}, },
}, },
{ },
name: "level", {
label: "承诺书级别", name: "level",
dependencies: ["releasePlatform"], label: "承诺书级别",
hidden: formValues => !(formValues.releasePlatform === 1), dependencies: ["releasePlatform"],
render: ( hidden: formValues => !(formValues.releasePlatform === 1),
<DictionarySelect render: (
dictValue="PROMISE_LEVEL" <DictionarySelect
onGetLabel={label => form.setFieldValue("levelName", label)} dictValue="PROMISE_LEVEL"
/> onGetLabel={label => form.setFieldValue("levelName", label)}
), />
}, ),
{ name: "levelName", label: "承诺书级别名称", onlyForLabel: true }, },
{ name: "promiseTermStart", label: "适用期限开始", render: FORM_ITEM_RENDER_ENUM.DATE }, { name: "levelName", label: "承诺书级别名称", onlyForLabel: true },
{ { name: "promiseTermStart", label: "适用期限开始", render: FORM_ITEM_RENDER_ENUM.DATE },
name: "promiseTermEnd", {
label: "适用期限结束", name: "promiseTermEnd",
render: FORM_ITEM_RENDER_ENUM.DATE, label: "适用期限结束",
rules: [validatorEndTime(promiseTermStart), { render: FORM_ITEM_RENDER_ENUM.DATE,
validator: (_, value) => { rules: [validatorEndTime(promiseTermStart), {
if (value && promiseTermStart) { validator: (_, value) => {
const startYear = dayjs(promiseTermStart).year(); if (value && promiseTermStart) {
const endYear = dayjs(value).year(); const startYear = dayjs(promiseTermStart).year();
const endYear = dayjs(value).year();
if (startYear !== endYear) { if (startYear !== endYear) {
return Promise.reject("开始时间和结束时间不能跨年"); return Promise.reject("开始时间和结束时间不能跨年");
}
} }
return Promise.resolve(); }
return Promise.resolve();
},
}],
},
{ key: "divider1", label: "承诺内容", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{
key: "commitmentContentButton",
customizeRender: true,
span: 24,
render: (
<div style={{ textAlign: "right", marginBottom: "20px" }}>
<Button
type="primary"
onClick={() => {
setChoiceTemplateModalOpen(true);
}}
>
选择模板
</Button>
</div>
),
},
...(isAlreadyChoiceTemplate
? [
{ name: "promiseTypeName", label: "安全承诺类型", span: 24, componentProps: { disabled: true } },
{ name: "promiseType", label: "安全承诺类型", onlyForLabel: true },
{
name: "promiseText",
label: "安全承诺内容",
span: 24,
render: (<Editor />),
required: false,
formItemProps: { required: true },
rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
}, },
}], { key: "divider2", label: promiseType === 1 ? "受状人" : "承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
}, {
{ key: "divider1", label: "承诺内容", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, name: "promisePersons",
{ span: 24,
key: "commitmentContentButton", render: FORM_ITEM_RENDER_ENUM.FORM_LIST,
customizeRender: true, formListUniqueProps: {
span: 24, showAddButton: !(promiseType === 1),
render: ( showRemoveButton: !(promiseType === 1),
<div style={{ textAlign: "right", marginBottom: "20px" }}> options: (field, index) => (
<Button [
type="primary" ...(!releasePlatform || releasePlatform === 1
onClick={() => { ? [
setChoiceTemplateModalOpen(true); {
}} name: [field.name, "corpId"],
> label: `签订单位${index + 1}`,
选择模板 render: FORM_ITEM_RENDER_ENUM.SELECT,
</Button> items: corpInfoList,
</div> itemsField: { labelKey: "corpName", valueKey: "id" },
), componentProps: {
}, onChange: (event) => {
...(isAlreadyChoiceTemplate form.setFieldValue(["promisePersons", field.name, "corpName"], getLabelName({
? [ list: corpInfoList,
{ name: "promiseTypeName", label: "安全承诺类型", span: 24, componentProps: { disabled: true } }, status: event,
{ name: "promiseType", label: "安全承诺类型", onlyForLabel: true }, nameKey: "corpName",
{ idKey: "id",
name: "promiseText", }));
label: "安全承诺内容", form.setFieldValue(["promisePersons", field.name, "departmentId"], "");
span: 24, form.setFieldValue(["promisePersons", field.name, "departmentName"], "");
render: (<Editor />), form.setFieldValue(["promisePersons", field.name, "postId"], "");
required: false, form.setFieldValue(["promisePersons", field.name, "postName"], "");
formItemProps: { required: true }, form.setFieldValue(["promisePersons", field.name, "userName"], promiseType === 1 ? "" : []);
rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }], form.setFieldValue(["promisePersons", field.name, "userId"], promiseType === 1 ? "" : []);
},
{ key: "divider2", label: promiseType === 1 ? "受状人" : "承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{
name: "promisePersons",
span: 24,
render: FORM_ITEM_RENDER_ENUM.FORM_LIST,
formListUniqueProps: {
showAddButton: !(promiseType === 1),
showRemoveButton: !(promiseType === 1),
options: (field, index) => (
[
...(!releasePlatform || releasePlatform === 1
? [
{
name: [field.name, "corpId"],
label: `签订单位${index + 1}`,
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: corpInfoList,
itemsField: { labelKey: "corpName", valueKey: "id" },
componentProps: {
onChange: (event) => {
form.setFieldValue(["promisePersons", field.name, "corpName"], getLabelName({
list: corpInfoList,
status: event,
nameKey: "corpName",
idKey: "id",
}));
form.setFieldValue(["promisePersons", field.name, "departmentId"], "");
form.setFieldValue(["promisePersons", field.name, "departmentName"], "");
form.setFieldValue(["promisePersons", field.name, "postId"], "");
form.setFieldValue(["promisePersons", field.name, "postName"], "");
form.setFieldValue(["promisePersons", field.name, "userName"], "");
form.setFieldValue(["promisePersons", field.name, "userId"], "");
},
}, },
}, },
{ name: [field.name, "corpName"], label: `签订单位${index + 1}名称`, onlyForLabel: true },
]
: []),
{
name: [field.name, "departmentId"],
label: `部门${index + 1}`,
span: releasePlatform === 2 ? 8 : 12,
labelCol: { span: releasePlatform === 2 ? 6 : 4 },
render: (
<DepartmentSelectTree
isNeedCorpInfoId={!releasePlatform || releasePlatform === 1}
params={{ eqCorpinfoId: promisePersons?.[field.name]?.corpId || "" }}
onChange={(departmentId) => {
form.setFieldValue(["promisePersons", field.name, "postId"], "");
form.setFieldValue(["promisePersons", field.name, "postName"], "");
form.setFieldValue(["promisePersons", field.name, "userName"], "");
form.setFieldValue(["promisePersons", field.name, "userId"], "");
if (!departmentId)
return;
getPostList(departmentId, promisePersons?.[field.name]?.corpId, index);
}}
onGetLabel={(label) => {
form.setFieldValue(["promisePersons", field.name, "departmentName"], label);
}}
/>
),
},
{ name: [field.name, "departmentName"], label: `部门${index + 1}名称`, onlyForLabel: true },
{
name: [field.name, "postId"],
label: `岗位${index + 1}`,
span: releasePlatform === 2 ? 8 : 12,
labelCol: { span: releasePlatform === 2 ? 6 : 4 },
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: postList[index] || [],
itemsField: { labelKey: "postName", valueKey: "id" },
componentProps: {
onChange: (event) => {
form.setFieldValue(["promisePersons", field.name, "postName"], getLabelName({
list: postList[index],
status: event,
nameKey: "postName",
idKey: "id",
}));
form.setFieldValue(["promisePersons", field.name, "userName"], "");
form.setFieldValue(["promisePersons", field.name, "userId"], "");
}, },
{ name: [field.name, "corpName"], label: `签订单位${index + 1}名称`, onlyForLabel: true },
]
: []),
{
name: [field.name, "departmentId"],
label: `部门${index + 1}`,
span: releasePlatform === 2 ? 8 : 12,
labelCol: { span: releasePlatform === 2 ? 6 : 4 },
render: (
<DepartmentSelectTree
isNeedCorpInfoId={!releasePlatform || releasePlatform === 1}
params={{ eqCorpinfoId: promisePersons?.[field.name]?.corpId || "" }}
onChange={(departmentId) => {
form.setFieldValue(["promisePersons", field.name, "postId"], "");
form.setFieldValue(["promisePersons", field.name, "postName"], "");
form.setFieldValue(["promisePersons", field.name, "userName"], promiseType === 1 ? "" : []);
form.setFieldValue(["promisePersons", field.name, "userId"], promiseType === 1 ? "" : []);
if (!departmentId)
return;
getPostList(departmentId, promisePersons?.[field.name]?.corpId, index);
}}
onGetLabel={(label) => {
form.setFieldValue(["promisePersons", field.name, "departmentName"], label);
}}
/>
),
},
{ name: [field.name, "departmentName"], label: `部门${index + 1}名称`, onlyForLabel: true },
{
name: [field.name, "postId"],
label: `岗位${index + 1}`,
span: releasePlatform === 2 ? 8 : 12,
labelCol: { span: releasePlatform === 2 ? 6 : 4 },
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: postList[index] || [],
itemsField: { labelKey: "postName", valueKey: "id" },
componentProps: {
onChange: (event) => {
form.setFieldValue(["promisePersons", field.name, "postName"], getLabelName({
list: postList[index],
status: event,
nameKey: "postName",
idKey: "id",
}));
form.setFieldValue(["promisePersons", field.name, "userName"], promiseType === 1 ? "" : []);
form.setFieldValue(["promisePersons", field.name, "userId"], promiseType === 1 ? "" : []);
}, },
}, },
{ name: [field.name, "postName"], label: `岗位${index + 1}名称`, onlyForLabel: true }, },
{ name: [field.name, "userName"], label: `人员${index + 1}名称`, onlyForLabel: true }, { name: [field.name, "postName"], label: `岗位${index + 1}名称`, onlyForLabel: true },
{ { name: [field.name, "userName"], label: `人员${index + 1}名称`, onlyForLabel: true },
name: [field.name, "userId"], {
label: `人员${index + 1}`, name: [field.name, "userId"],
span: releasePlatform === 2 ? 8 : 12, label: `人员${index + 1}`,
labelCol: { span: releasePlatform === 2 ? 6 : 4 }, span: releasePlatform === 2 ? 8 : 12,
render: ( labelCol: { span: releasePlatform === 2 ? 6 : 4 },
<PersonnelSelect render: (
params={{ <PersonnelSelect
postId: promisePersons?.[field.name]?.postId || "", params={{
departmentId: promisePersons?.[field.name]?.departmentId || "", postId: promisePersons?.[field.name]?.postId || "",
}} departmentId: promisePersons?.[field.name]?.departmentId || "",
isNeedPostId={true} }}
onGetLabel={(label) => { isNeedPostId={true}
form.setFieldValue(["promisePersons", field.name, "userName"], label); onGetLabel={(label) => {
}} form.setFieldValue(["promisePersons", field.name, "userName"], label);
/> }}
), mode={promiseType === 1 ? "" : "multiple"}
}, />
] ),
), },
}, ]
),
}, },
{ key: "divider3", label: promiseType === 1 ? "发状人" : "被承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, },
{ { key: "divider3", label: promiseType === 1 ? "发状人" : "被承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
name: "promisePeoples", {
span: 24, name: "promisePeoples",
render: FORM_ITEM_RENDER_ENUM.FORM_LIST, span: 24,
formListUniqueProps: { render: FORM_ITEM_RENDER_ENUM.FORM_LIST,
showAddButton: false, formListUniqueProps: {
showRemoveButton: false, showAddButton: false,
options: field => ( showRemoveButton: false,
[ options: field => (
{ [
name: [field.name, "departmentId"], {
label: "部门", name: [field.name, "departmentId"],
span: 8, label: "部门",
labelCol: { span: 6 }, span: 8,
render: ( labelCol: { span: 6 },
<DepartmentSelectTree render: (
onChange={async (departmentId) => { <DepartmentSelectTree
form.setFieldValue(["promisePeoples", field.name, "postId"], ""); onChange={async (departmentId) => {
form.setFieldValue(["promisePeoples", field.name, "postName"], ""); form.setFieldValue(["promisePeoples", field.name, "postId"], "");
form.setFieldValue(["promisePeoples", field.name, "userName"], ""); form.setFieldValue(["promisePeoples", field.name, "postName"], "");
form.setFieldValue(["promisePeoples", field.name, "userId"], "");
if (!departmentId)
return;
getPostList1(departmentId, promisePeoples?.[field.name]?.corpId);
}}
onGetLabel={(label) => {
form.setFieldValue(["promisePeoples", field.name, "departmentName"], label);
}}
/>
),
},
{ name: [field.name, "departmentName"], label: "部门名称", onlyForLabel: true },
{
name: [field.name, "postId"],
label: "岗位",
span: 8,
labelCol: { span: 6 },
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: postList1,
itemsField: { labelKey: "postName", valueKey: "id" },
componentProps: {
onChange: (event) => {
form.setFieldValue(["promisePeoples", field.name, "postName"], getLabelName({ list: postList1, status: event, nameKey: "postName", idKey: "id" }));
form.setFieldValue(["promisePeoples", field.name, "userName"], ""); form.setFieldValue(["promisePeoples", field.name, "userName"], "");
form.setFieldValue(["promisePeoples", field.name, "userId"], ""); form.setFieldValue(["promisePeoples", field.name, "userId"], "");
}, if (!departmentId)
return;
getPostList1(departmentId, promisePeoples?.[field.name]?.corpId);
}}
onGetLabel={(label) => {
form.setFieldValue(["promisePeoples", field.name, "departmentName"], label);
}}
/>
),
},
{ name: [field.name, "departmentName"], label: "部门名称", onlyForLabel: true },
{
name: [field.name, "postId"],
label: "岗位",
span: 8,
labelCol: { span: 6 },
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: postList1,
itemsField: { labelKey: "postName", valueKey: "id" },
componentProps: {
onChange: (event) => {
form.setFieldValue(["promisePeoples", field.name, "postName"], getLabelName({ list: postList1, status: event, nameKey: "postName", idKey: "id" }));
form.setFieldValue(["promisePeoples", field.name, "userName"], "");
form.setFieldValue(["promisePeoples", field.name, "userId"], "");
}, },
}, },
{ name: [field.name, "postName"], label: "岗位名称", onlyForLabel: true }, },
{ { name: [field.name, "postName"], label: "岗位名称", onlyForLabel: true },
name: [field.name, "userId"], {
label: "人员", name: [field.name, "userId"],
span: 8, label: "人员",
labelCol: { span: 6 }, span: 8,
render: ( labelCol: { span: 6 },
<PersonnelSelect render: (
params={{ <PersonnelSelect
postId: promisePeoples?.[field.name]?.postId || "", params={{
departmentId: promisePeoples?.[field.name]?.departmentId || "", postId: promisePeoples?.[field.name]?.postId || "",
}} departmentId: promisePeoples?.[field.name]?.departmentId || "",
isNeedPostId={true} }}
onGetLabel={(label) => { isNeedPostId={true}
form.setFieldValue(["promisePeoples", field.name, "userName"], label); onGetLabel={(label) => {
}} form.setFieldValue(["promisePeoples", field.name, "userName"], label);
/> }}
), />
}, ),
{ name: [field.name, "userName"], label: "人员名称", onlyForLabel: true }, },
] { name: [field.name, "userName"], label: "人员名称", onlyForLabel: true },
), ]
}, ),
}, },
] },
: [ ]
{ key: "tip", customizeRender: true, span: 24, render: (<div style={{ color: "red", textAlign: "center" }}>请先选择安全承诺模板</div>) }, : [
]), { key: "tip", customizeRender: true, span: 24, render: (<div style={{ color: "red", textAlign: "center" }}>请先选择安全承诺模板</div>) },
]} ]),
/> ]}
</div> />
{choiceTemplateModalOpen && ( {choiceTemplateModalOpen && (
<ChoiceTemplateModal <ChoiceTemplateModal
onCancel={() => setChoiceTemplateModalOpen(false)} onCancel={() => setChoiceTemplateModalOpen(false)}
@ -401,7 +405,7 @@ function Add(props) {
}} }}
/> />
)} )}
</div> </Page>
); );
} }
@ -414,6 +418,7 @@ const ChoiceTemplateModalComponent = (props) => {
return ( return (
<Modal <Modal
title="选择模板"
open open
width={1200} width={1200}
maskClosable={false} maskClosable={false}

View File

@ -1,7 +1,7 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Divider, Spin } from "antd"; import { Button, Descriptions, Divider } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import { getLabelName } from "zy-react-library/utils"; import { getLabelName } from "zy-react-library/utils";
import { PROMISE_TYPE_ENUM, RELEASE_PLATFORM_ENUM } from "~/enumerate/constant"; import { PROMISE_TYPE_ENUM, RELEASE_PLATFORM_ENUM } from "~/enumerate/constant";
@ -26,85 +26,83 @@ function Detail(props) {
}, []); }, []);
return ( return (
<div> <Page
<HeaderBack title="查看" /> headerTitle="查看"
<Spin spinning={props.commitment.commitmentLoading}> contentPadding="0 20px 20px 20px"
<div style={{ padding: 20 }}> extraActionButtons={(
<Divider orientation="left">基本信息</Divider> <Button
<Descriptions type="primary"
bordered onClick={() => {
column={1} setBusPromiseTemplateModalOpen(true);
styles={{ label: { width: 200 } }} setId(query.id);
items={[ setModalUrl("busPromiseView");
{ label: "安全承诺名称", children: detail.promiseName }, }}
{ label: "下发对象", children: getLabelName({ list: RELEASE_PLATFORM_ENUM, status: detail.releasePlatform }) }, >
...(detail.releasePlatform === 1 ? [{ label: "安全承诺级别", children: detail.levelName }] : []), 模板
{ label: "安全承诺类型", children: getLabelName({ list: PROMISE_TYPE_ENUM, status: detail.promiseType }) }, </Button>
{ label: "适用期限开始", children: detail.promiseTermStart }, )}
{ label: "适用期限结束", children: detail.promiseTermEnd }, >
]} <Divider orientation="left">基本信息</Divider>
/> <Descriptions
<Divider orientation="left">承诺内容</Divider> bordered
<Descriptions column={1}
bordered styles={{ label: { width: 200 } }}
column={1} items={[
styles={{ label: { width: 200 } }} { label: "安全承诺名称", children: detail.promiseName },
items={[ { label: "下发对象", children: getLabelName({ list: RELEASE_PLATFORM_ENUM, status: detail.releasePlatform }) },
{ label: "承诺内容", children: (<div dangerouslySetInnerHTML={{ __html: detail.promiseText }} />) }, ...(detail.releasePlatform === 1 ? [{ label: "安全承诺级别", children: detail.levelName }] : []),
]} { label: "安全承诺类型", children: getLabelName({ list: PROMISE_TYPE_ENUM, status: detail.promiseType }) },
/> { label: "适用期限开始", children: detail.promiseTermStart },
<Divider orientation="left">{detail.promiseType === 1 ? "受状人" : "承诺人"}</Divider> { label: "适用期限结束", children: detail.promiseTermEnd },
<Descriptions ]}
bordered />
column={2} <Divider orientation="left">承诺内容</Divider>
styles={{ label: { width: 200 }, content: { width: 720 } }} <Descriptions
items={[ bordered
...(detail.promisePersons || []).flatMap((item, index) => { column={1}
const base = [ styles={{ label: { width: 200 } }}
{ label: `部门${index + 1}`, children: item.departmentName || "-" }, items={[
{ label: `岗位${index + 1}`, children: item.postName || "-" }, { label: "承诺内容", children: (<div dangerouslySetInnerHTML={{ __html: detail.promiseText }} />) },
{ label: `人员${index + 1}`, children: item.userName || "-" }, ]}
]; />
<Divider orientation="left">{detail.promiseType === 1 ? "受状人" : "承诺人"}</Divider>
<Descriptions
bordered
column={2}
styles={{ label: { width: 200 }, content: { width: 720 } }}
items={[
...(detail.promisePersons || []).flatMap((item, index) => {
const base = [
{ label: `部门${index + 1}`, children: item.departmentName || "-" },
{ label: `岗位${index + 1}`, children: item.postName || "-" },
{ label: `人员${index + 1}`, children: item.userName || "-" },
];
// 只有 releasePlatform=1(分公司) 才显示签订单位 // 只有 releasePlatform=1(分公司) 才显示签订单位
if (detail.releasePlatform === 1) { if (detail.releasePlatform === 1) {
base.unshift({ base.unshift({
label: `签订单位${index + 1}`, label: `签订单位${index + 1}`,
children: item.corpName || "-", children: item.corpName || "-",
}); });
} }
return base; return base;
}), }),
]} ]}
/> />
<Divider orientation="left">{detail.promiseType === 1 ? "发状人" : "被承诺人"}</Divider> <Divider orientation="left">{detail.promiseType === 1 ? "发状人" : "被承诺人"}</Divider>
<Descriptions <Descriptions
bordered bordered
column={2} column={2}
styles={{ label: { width: 200 }, content: { width: 720 } }} styles={{ label: { width: 200 }, content: { width: 720 } }}
items={[ items={[
{ label: "部门", children: detail.promisePeople?.departmentName || "-" }, { label: "部门", children: detail.promisePeople?.departmentName || "-" },
{ label: "岗位", children: detail.promisePeople?.postName || "-" }, { label: "岗位", children: detail.promisePeople?.postName || "-" },
{ label: "人员", children: detail.promisePeople?.userName || "-" }, { label: "人员", children: detail.promisePeople?.userName || "-" },
]} ]}
/> />
<div style={{ textAlign: "center", margin: "20px 0" }}> {busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
<Button </Page>
type="primary"
onClick={() => {
setBusPromiseTemplateModalOpen(true);
setId(query.id);
setModalUrl("busPromiseView");
}}
>
模板
</Button>
</div>
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
</div>
</Spin>
</div>
); );
} }

View File

@ -5,6 +5,7 @@ import { Button, Form, message, Modal, Space, Tabs, Tooltip } from "antd";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import AddIcon from "zy-react-library/components/Icon/AddIcon"; import AddIcon from "zy-react-library/components/Icon/AddIcon";
import Page from "zy-react-library/components/Page";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import DictionarySelect from "zy-react-library/components/Select/Dictionary"; import DictionarySelect from "zy-react-library/components/Select/Dictionary";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
@ -56,7 +57,7 @@ function List(props) {
}; };
return ( return (
<div style={{ padding: 20 }}> <Page isShowAllAction={false}>
<Search <Search
form={form} form={form}
options={[ options={[
@ -191,7 +192,7 @@ function List(props) {
]} ]}
{...tableProps} {...tableProps}
/> />
</div> </Page>
); );
} }

View File

@ -1,7 +1,7 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, Space } from "antd"; import { Button, Form, Space } from "antd";
import { useState } from "react"; import { useState } from "react";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
@ -20,55 +20,53 @@ function List(props) {
const [id, setId] = useState(""); const [id, setId] = useState("");
const [modalUrl, setModalUrl] = useState(""); const [modalUrl, setModalUrl] = useState("");
return ( return (
<div> <Page headerTitle="签署详情">
<HeaderBack title="签署详情" /> <Table
<div style={{ padding: 20 }}> toolBarRender={() => (
<Table <Space>
toolBarRender={() => ( <Button
<Space> type="primary"
<Button ghost
type="primary" onClick={() => {
onClick={() => { setBusPromiseTemplateModalOpen(true);
setBusPromiseTemplateModalOpen(true); setId(query.id);
setId(query.id); setModalUrl("busPromisePeopleAllSign");
setModalUrl("busPromisePeopleAllSign"); }}
}} >
> 签署汇总
签署汇总 </Button>
</Button> </Space>
</Space> )}
)} columns={[
columns={[ { title: "部门", dataIndex: "departmentName" },
{ title: "部门", dataIndex: "departmentName" }, { title: "岗位", dataIndex: "postName" },
{ title: "岗位", dataIndex: "postName" }, { title: "人员", dataIndex: "userName" },
{ title: "人员", dataIndex: "userName" }, { title: "签署时间", dataIndex: "signTime" },
{ title: "签署时间", dataIndex: "signTime" }, { title: "签署状态", render: (_, record) => getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
{ title: "签署状态", render: (_, record) => getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) }, {
{ title: "操作",
title: "操作", width: 200,
width: 200, fixed: "right",
fixed: "right", render: (_, record) => (
render: (_, record) => ( <Space>
<Space> <Button
<Button type="link"
type="link" onClick={() => {
onClick={() => { setBusPromiseTemplateModalOpen(true);
setBusPromiseTemplateModalOpen(true); setId(record.id);
setId(record.id); setModalUrl("busPromisePeopleView");
setModalUrl("busPromisePeopleView"); }}
}} >
> 查看
查看 </Button>
</Button> </Space>
</Space> ),
), },
}, ]}
]} {...tableProps}
{...tableProps} />
/> {busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />} </Page>
</div>
</div>
); );
} }

View File

@ -1,5 +1,6 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, Space } from "antd"; import { Button, Form, Space } from "antd";
import Page from "zy-react-library/components/Page";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
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";
@ -13,7 +14,7 @@ function List(props) {
}); });
return ( return (
<div style={{ padding: 20 }}> <Page isShowAllAction={false}>
<Search <Search
form={form} form={form}
options={[ options={[
@ -49,7 +50,7 @@ function List(props) {
]} ]}
{...tableProps} {...tableProps}
/> />
</div> </Page>
); );
} }

View File

@ -1,10 +1,10 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, Space } from "antd"; import { Button, Form, Space } from "antd";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import Search from "zy-react-library/components/Search"; 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 useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
import Table from "zy-react-library/components/Table";
import { NS_COMMITMENT } from "~/enumerate/namespace"; import { NS_COMMITMENT } from "~/enumerate/namespace";
function List(props) { function List(props) {
@ -18,45 +18,42 @@ function List(props) {
}); });
return ( return (
<div> <Page headerTitle="查看">
<HeaderBack title="查看" /> <Search
<div style={{ padding: "0 20px 20px 20px" }}> form={form}
<Search options={[
form={form} { name: "promiseName", label: "安全承诺名称" },
options={[ ]}
{ name: "promiseName", label: "安全承诺名称" }, onFinish={getData}
]} />
onFinish={getData} <Table
/> columns={[
<Table { title: "安全承诺名称", dataIndex: "promiseName" },
columns={[ { title: "承诺期限", render: (_, record) => record.promiseTermStart ? `${record.promiseTermStart}${record.promiseTermEnd}` : "" },
{ title: "安全承诺名称", dataIndex: "promiseName" }, { title: "安全承诺级别", dataIndex: "levelName" },
{ title: "承诺期限", render: (_, record) => record.promiseTermStart ? `${record.promiseTermStart}${record.promiseTermEnd}` : "" }, { title: "涉及人数", dataIndex: "peopleNumInvolved" },
{ title: "安全承诺级别", dataIndex: "levelName" }, { title: "完成提交人数", dataIndex: "signedCount" },
{ title: "涉及人数", dataIndex: "peopleNumInvolved" }, {
{ title: "完成提交人数", dataIndex: "signedCount" }, title: "操作",
{ width: 150,
title: "操作", fixed: "right",
width: 150, render: (_, record) => (
fixed: "right", <Space>
render: (_, record) => ( <Button
<Space> type="link"
<Button onClick={() => {
type="link" props.history.push(`./view?id=${record.id}&promiseId=${record.promiseId}`);
onClick={() => { }}
props.history.push(`./view?id=${record.id}`); >
}} 查看
> </Button>
查看 </Space>
</Button> ),
</Space> },
), ]}
}, {...tableProps}
]} />
{...tableProps} </Page>
/>
</div>
</div>
); );
} }

View File

@ -1,7 +1,7 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Space } from "antd"; import { Button, Space } from "antd";
import { useState } from "react"; import { useState } from "react";
import HeaderBack from "zy-react-library/components/HeaderBack"; import Page from "zy-react-library/components/Page";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
@ -16,45 +16,56 @@ function List(props) {
const query = useGetUrlQuery(); const query = useGetUrlQuery();
const { tableProps } = useTable(props["busPromisePeopleList"], { const { tableProps } = useTable(props["busPromisePeopleList"], {
params: { params: {
corpId: query.id, promiseId: query.promiseId,
}, },
}); });
return ( return (
<div> <Page headerTitle="详情列表">
<HeaderBack title="查看" /> <Table
<div style={{ padding: "0 20px 20px 20px" }}> toolBarRender={() => (
<Table <Space>
columns={[ <Button
{ title: "所属部门", dataIndex: "departmentName" }, type="primary"
{ title: "姓名", dataIndex: "userName" }, ghost
{ title: "签署状态", dataIndex: "isSign", render: (_, record) => getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) }, onClick={() => {
{ setBusPromiseTemplateModalOpen(true);
title: "操作", setId(query.id);
width: 150, setModalUrl("busPromisePeopleAllSign");
fixed: "right", }}
render: (_, record) => ( >
<Space> 签署汇总
<Button </Button>
type="link" </Space>
onClick={() => { )}
setBusPromiseTemplateModalOpen(true); columns={[
setId(record.id); { title: "所属部门", dataIndex: "departmentName" },
setModalUrl("busPromisePeopleView"); { title: "姓名", dataIndex: "userName" },
}} { title: "签署状态", dataIndex: "isSign", render: (_, record) => getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
> {
查看 title: "操作",
</Button> width: 150,
</Space> fixed: "right",
), render: (_, record) => (
}, <Space>
]} <Button
{...tableProps} type="link"
/> onClick={() => {
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />} setBusPromiseTemplateModalOpen(true);
</div> setId(record.id);
</div> setModalUrl("busPromisePeopleView");
}}
>
查看
</Button>
</Space>
),
},
]}
{...tableProps}
/>
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
</Page>
); );
} }

View File

@ -14,6 +14,7 @@ const DetailModal = (props) => {
if (props.id) { if (props.id) {
const { data } = await props[props.modalUrl]({ id: props.id }); const { data } = await props[props.modalUrl]({ id: props.id });
setForm(data); setForm(data);
props.onGetData?.(data);
} }
}; };
useEffect(() => { useEffect(() => {
@ -34,85 +35,86 @@ const DetailModal = (props) => {
`, `,
documentTitle: "", documentTitle: "",
}); });
return (
<> const renderContent = () => {
<Modal return (
title={form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"} <div ref={contentRef} className="dialogContent">
open <div className="cover print_use">
onCancel={props.onCancel} <h1>{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1>
okText="打印" <div>
onOk={handlePrint} <div> </div>
width={800}
>
<div ref={contentRef} className="dialogContent">
<div className="cover print_use">
<h1>{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1>
<div> <div>
<div> </div>
<div> {form.createTime ? dayjs(form.createTime).format("YYYY年") : ""}
{form.createTime ? dayjs(form.createTime).format("YYYY年") : ""}
</div>
</div> </div>
</div> </div>
</div>
<div className="promise-content"> <div className="promise-content">
<h1 className="title">{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1> <h1 className="title">{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1>
{form.promiseType === 0 && ( {form.promiseType === 0 && (
<div> <div>
{`${form.promisePeople ? `${form.promisePeople + form.promisePeoplePost}:` : ""}` || ""} {`${(form.promisePeople && form.promisePeoplePost) ? `${form.promisePeople + form.promisePeoplePost}:` : ""}` || ""}
</div>
)}
<div dangerouslySetInnerHTML={{ __html: form.promiseText }} />
<div className="text">
{
form.promiseType === 0
? (
<div>若违反上述承诺和未履行安全生产职责或发生责任事故的接受政府或公司事故调查组做出的处罚决定</div>
)
: (
<div>若未履行安全生产职责或发生生产安全事故的接受公司或政府事故调查组做出的处罚</div>
)
}
</div>
<div style={{ alignItems: form.filepath ? "flex-end" : "flex-start" }}>
{form.promiseType === 1 && (
<div className="hairdresser">
<div className="promiser">
发状人
{form.promisePeople}
</div>
</div> </div>
)} )}
<div dangerouslySetInnerHTML={{ __html: form.promiseText }} />
<div className="text"> <div className="footer">
{ <div className="respondent">
form.promiseType === 0 <div style={{ marginRight: form.filepath ? "0px" : "105px" }} className="promiser">
? ( <div style={{ textIndent: "35px" }}>{form.promiseType === 0 ? "承诺人(本人签字)" : "受状人"}</div>
<div>若违反上述承诺和未履行安全生产职责或发生责任事故的接受政府或公司事故调查组做出的处罚决定</div>
) {(form.filepath && !form.signList) && <Image src={getFileUrl() + form.filepath} alt="sign" width={100} height={100} />}
: ( {form.signList && <PreviewImg files={form.signList} fileUrlKey="filepath" />}
<div>若未履行安全生产职责或发生生产安全事故的接受公司或政府事故调查组做出的处罚</div>
)
}
</div>
<div style={{ alignItems: form.filepath ? "flex-end" : "flex-start" }}>
{form.promiseType === 1 && (
<div className="hairdresser">
{!form.filepath
? (
<div className="promiser">
发状人
{form.userName}
</div>
)
: (
<div className="promiser">
<span style={{ marginRight: form.filepath ? "0px" : "105px" }}>
发状人
<Image src={getFileUrl() + form.filepath} alt="sign" width={100} height={100} />
</span>
</div>
)}
</div>
)}
<div className="footer">
<div className="respondent">
<div style={{ marginRight: form.filepath ? "0px" : "105px" }} className="promiser">
<div style={{ textIndent: "35px" }}>{form.promiseType === 0 ? "承诺人(本人签字)" : "受状人"}</div>
{(form.filepath && !form.signList) && <Image src={getFileUrl() + form.filepath} alt="sign" width={100} height={100} />}
{form.signList && <PreviewImg files={form.signList} fileUrlKey="filepath" />}
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
);
};
if (props.inline) {
return renderContent();
}
return (
<>
<Modal
title={form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}
open
maskClosable={false}
onCancel={props.onCancel}
okText="打印"
onOk={handlePrint}
width={800}
>
{renderContent()}
</Modal> </Modal>
</> </>
); );