bug修改:12732、12728、12726、12723、12702、12694、12689、12687、12682、12680、12677、12661、12658、12656、12654、12644、12643、12628、12626、12624、12618、12592、12589、12588、12580、12548

master
LiuJiaNan 2025-12-20 16:12:24 +08:00
parent 5ea3a687ec
commit 97e4a681f3
14 changed files with 395 additions and 354 deletions

View File

@ -18,6 +18,7 @@
"lint": "eslint --ext .js,.jsx,.tsx --fix src"
},
"dependencies": {
"@ahooksjs/use-url-state": "^3.5.1",
"@ant-design/icons": "^6.1.0",
"@ant-design/pro-components": "^2.8.10",
"@cqsjjb/jjb-common-decorator": "latest",
@ -31,7 +32,7 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-to-print": "^3.2.0",
"zy-react-library": "^1.0.167"
"zy-react-library": "^1.0.175"
},
"devDependencies": {
"@antfu/eslint-config": "^5.4.1",

View File

@ -42,7 +42,7 @@ function Add(props) {
form={form}
values={{
templateDetails: [{}],
promiseType: "0",
promiseType: 0,
}}
onFinish={onSubmit}
loading={props.commitment.commitmentLoading}
@ -75,7 +75,7 @@ function Add(props) {
render: (<Editor />),
required: false,
formItemProps: { required: true },
rules: [{ required: true, message: "请输入安全承诺内容" }],
rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
},
]}
/>

View File

@ -13,6 +13,7 @@ import DepartmentSelectTree from "zy-react-library/components/SelectTree/Departm
import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useIsExistenceDuplicateSelection from "zy-react-library/hooks/useIsExistenceDuplicateSelection";
import useTable from "zy-react-library/hooks/useTable";
import { getLabelName, validatorEndTime } from "zy-react-library/utils";
import { PROMISE_TYPE_ENUM } from "~/enumerate/constant";
@ -20,6 +21,7 @@ import { NS_COMMITMENT } from "~/enumerate/namespace";
function Add(props) {
const query = useGetUrlQuery();
const { isExistenceDuplicateSelection } = useIsExistenceDuplicateSelection();
const [form] = Form.useForm();
const promisePersons = Form.useWatch("promisePersons", form);
const promiseTermStart = Form.useWatch("promiseTermStart", form);
@ -75,6 +77,8 @@ function Add(props) {
}, []);
const onSubmit = async (values) => {
await isExistenceDuplicateSelection({ data: values.promisePersons, key: "postId", message: `承诺人岗位不能重复` });
const peopleNumInvolved = values.promisePersons.reduce((acc, item) => acc + item.userName.length, 0);
const persons = values.promisePersons.map(item => ({
...item,
userName: item.userName.join(","),
@ -97,7 +101,7 @@ function Add(props) {
id: query.id,
promiseId: query.promiseId,
promisePeoples: promiseAll,
peopleNumInvolved: values.promisePersons.length,
peopleNumInvolved,
});
if (success) {
message.success("操作成功");
@ -112,6 +116,8 @@ function Add(props) {
<FormBuilder
form={form}
values={{
promiseType: 0,
promiseTypeName: "承诺书",
promisePeoples: [{}], // 被承诺人
promisePersons: [{}], // 承诺人
}}
@ -176,7 +182,7 @@ function Add(props) {
render: (<Editor />),
required: false,
formItemProps: { required: true },
rules: [{ required: true, message: "请输入安全承诺内容" }],
rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
},
{ key: "divider2", label: "承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{
@ -341,6 +347,8 @@ function Add(props) {
form.setFieldValue("passivePostId", "");
form.setFieldValue("passiveUserName", "");
form.setFieldValue("passiveUserId", "");
setPostList([]);
setPostList1([]);
}}
/>
)}

View File

@ -1,6 +1,7 @@
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal, Space, Tooltip } from "antd";
import dayjs from "dayjs";
import AddIcon from "zy-react-library/components/Icon/AddIcon";
import Search from "zy-react-library/components/Search";
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
@ -77,8 +78,8 @@ function List(props) {
{ title: "适用期限", render: (_, record) => `${record.promiseTermStart}${record.promiseTermEnd}` },
{ title: "涉及部门", dataIndex: "departmentNames" },
{ title: "涉及岗位", dataIndex: "postNames" },
{ title: "承诺人数/涉及人数", dataIndex: "signedCount", render: (_, record) => `完成${record.signedCount}/${record.peopleNumInvolved}` },
{ title: "下发时间", dataIndex: "updateTime" },
{ title: "承诺人数/涉及人数", dataIndex: "signedCount", render: (_, record) => `${record.signedCount === record.peopleNumInvolved ? "已" : "未"}完成${record.signedCount}/${record.peopleNumInvolved}` },
{ title: "下发时间", dataIndex: "updateTime", render: (_, record) => record.updateTime ? dayjs(record.updateTime).format("YYYY-MM-DD") : "" },
{ title: "状态", render: (_, record) => getLabelName({ list: [{ name: "已下发", bianma: "0" }, { name: "暂存", bianma: "1" }], status: record.state }) },
{
title: "操作",

View File

@ -32,7 +32,7 @@ function Add(props) {
...values,
id: query.id,
promiseId: query.promiseId,
isRegulatory: 0,
isRegulatory: 1,
});
if (success) {
message.success("操作成功");
@ -73,7 +73,7 @@ function Add(props) {
render: (<Editor />),
required: false,
formItemProps: { required: true },
rules: [{ required: true, message: "请输入安全承诺内容" }],
rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
},
]}
/>

View File

@ -97,12 +97,12 @@ function List(props) {
>
查看
</Button>
{props.permission("jg-promise-template-disable") && (
{(props.permission("jg-promise-template-disable") && record.isRegulatory === 1) && (
<Button type="link" onClick={() => updateState(record.id, record.state)}>
{record.state === 0 ? "禁用" : "启用"}
</Button>
)}
{props.permission("jg-promise-template-edit") && (
{(props.permission("jg-promise-template-edit") && record.isRegulatory === 1) && (
<Button
type="link"
onClick={() => {
@ -112,7 +112,7 @@ function List(props) {
编辑
</Button>
)}
{props.permission("jg-promise-template-deletes") && <Button type="link" danger onClick={() => onDelete(record.id)}>删除</Button>}
{(props.permission("jg-promise-template-deletes") && record.isRegulatory === 1) && <Button type="link" danger onClick={() => onDelete(record.id)}>删除</Button>}
</Space>
),
},

View File

@ -13,6 +13,7 @@ import DepartmentSelectTree from "zy-react-library/components/SelectTree/Departm
import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useIsExistenceDuplicateSelection from "zy-react-library/hooks/useIsExistenceDuplicateSelection";
import useTable from "zy-react-library/hooks/useTable";
import { getLabelName, validatorEndTime } from "zy-react-library/utils";
import { PROMISE_TYPE_ENUM, RELEASE_PLATFORM_ENUM } from "~/enumerate/constant";
@ -20,6 +21,7 @@ import { NS_COMMITMENT } from "~/enumerate/namespace";
function Add(props) {
const query = useGetUrlQuery();
const { isExistenceDuplicateSelection } = useIsExistenceDuplicateSelection();
const [form] = Form.useForm();
const promisePeoples = Form.useWatch("promisePeoples", form);
const promisePersons = Form.useWatch("promisePersons", form);
@ -30,7 +32,8 @@ function Add(props) {
const [corpInfoList, setCorpInfoList] = useState([]);
const [postList, setPostList] = useState([]);
const [postList1, setPostList1] = useState([]);
const [choiceTemplateModalOpen, setchoiceTemplateModalOpen] = useState(false);
const [choiceTemplateModalOpen, setChoiceTemplateModalOpen] = useState(false);
const [isAlreadyChoiceTemplate, setIsAlreadyChoiceTemplate] = useState(false);
const getPostList = async (departmentId, corpId, index) => {
const { data } = await props["jobInfo"]({ departmentId, corpinfoId: corpId, corpFlag: 1 });
@ -40,6 +43,7 @@ function Add(props) {
return newPostList;
});
};
const getPostList1 = async (departmentId, corpId) => {
const { data } = await props["jobInfo"]({ departmentId, corpinfoId: corpId, corpFlag: 1 });
setPostList1(data);
@ -63,6 +67,7 @@ function Add(props) {
form.setFieldsValue({
...values,
});
setIsAlreadyChoiceTemplate(true);
for (let i = 0; i < values.promisePersons.length; i++) {
await getPostList(values.promisePersons[i].departmentId, values.promisePersons[i].corpId, i);
}
@ -76,18 +81,18 @@ function Add(props) {
}, []);
const onSubmit = async (values) => {
await isExistenceDuplicateSelection({ data: values.promisePersons, key: "userId", message: `${promiseType === 1 ? "受状人" : "承诺人"}不能重复` });
const peoples = values.promisePeoples.map(item => ({
...item,
isPromisePeople: 1,
}));
const persons = values.promisePersons.map(item => ({
...item,
userName: item.userName.join(","),
userId: item.userId.join(","),
userName: item.userName,
userId: item.userId,
isPromisePeople: 0,
}));
const promiseAll = [...peoples, ...persons];
const { success } = await props[!query.id ? "busPromiseAdd" : "busPromiseEdit"]({
...values,
id: query.id,
@ -118,9 +123,9 @@ function Add(props) {
{
name: "releasePlatform",
label: "下发对象",
span: releasePlatform === "1" ? 12 : 24,
span: releasePlatform === 1 ? 12 : 24,
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: RELEASE_PLATFORM_ENUM,
items: RELEASE_PLATFORM_ENUM.map(item => ({ ...item, bianma: +item.bianma })),
componentProps: {
onChange: () => {
form.setFieldValue("promisePersons", [{}]);
@ -132,7 +137,7 @@ function Add(props) {
name: "level",
label: "承诺书级别",
dependencies: ["releasePlatform"],
hidden: formValues => !(formValues.releasePlatform === "1"),
hidden: formValues => !(formValues.releasePlatform === 1),
render: (
<DictionarySelect
dictValue="PROMISE_LEVEL"
@ -170,7 +175,7 @@ function Add(props) {
<Button
type="primary"
onClick={() => {
setchoiceTemplateModalOpen(true);
setChoiceTemplateModalOpen(true);
}}
>
选择模板
@ -178,212 +183,221 @@ function Add(props) {
</div>
),
},
{ 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: "请输入安全承诺内容" }],
},
{ 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"
? [
...(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 },
{
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, "corpId"],
label: `签订单位${index + 1}`,
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: corpInfoList,
itemsField: { labelKey: "corpName", valueKey: "id" },
items: postList[index] || [],
itemsField: { labelKey: "postName", valueKey: "id" },
componentProps: {
onChange: (event) => {
form.setFieldValue(["promisePersons", field.name, "corpName"], getLabelName({
list: corpInfoList,
form.setFieldValue(["promisePersons", field.name, "postName"], getLabelName({
list: postList[index],
status: event,
nameKey: "corpName",
nameKey: "postName",
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"], promiseType === 1 ? "" : []);
form.setFieldValue(["promisePersons", field.name, "userId"], "");
},
},
},
{ name: [field.name, "corpName"], 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}`,
span: releasePlatform === 2 ? 8 : 12,
labelCol: { span: releasePlatform === 2 ? 6 : 4 },
render: (
<PersonnelSelect
params={{
postId: promisePersons?.[field.name]?.postId || "",
departmentId: promisePersons?.[field.name]?.departmentId || "",
}}
isNeedPostId={true}
onGetLabel={(label) => {
form.setFieldValue(["promisePersons", field.name, "userName"], label);
}}
/>
),
},
]
: []),
{
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"], 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"], "");
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, "userId"],
label: `人员${index + 1}`,
span: releasePlatform === "2" ? 8 : 12,
labelCol: { span: releasePlatform === "2" ? 6 : 4 },
render: (
<PersonnelSelect
params={{
postId: promisePersons?.[field.name]?.postId || "",
departmentId: promisePersons?.[field.name]?.departmentId || "",
}}
isNeedPostId={true}
onGetLabel={(label) => {
form.setFieldValue(["promisePersons", field.name, "userName"], label);
}}
mode={(promiseType === 1) ? "tags" : "multiple"}
/>
},
{ key: "divider3", label: promiseType === 1 ? "发状人" : "被承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{
name: "promisePeoples",
span: 24,
render: FORM_ITEM_RENDER_ENUM.FORM_LIST,
formListUniqueProps: {
showAddButton: false,
showRemoveButton: false,
options: field => (
[
{
name: [field.name, "departmentId"],
label: "部门",
span: 8,
labelCol: { span: 6 },
render: (
<DepartmentSelectTree
onChange={async (departmentId) => {
form.setFieldValue(["promisePeoples", field.name, "postId"], "");
form.setFieldValue(["promisePeoples", field.name, "postName"], "");
form.setFieldValue(["promisePeoples", field.name, "userName"], "");
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, "userId"],
label: "人员",
span: 8,
labelCol: { span: 6 },
render: (
<PersonnelSelect
params={{
postId: promisePeoples?.[field.name]?.postId || "",
departmentId: promisePeoples?.[field.name]?.departmentId || "",
}}
isNeedPostId={true}
onGetLabel={(label) => {
form.setFieldValue(["promisePeoples", field.name, "userName"], label);
}}
/>
),
},
{ name: [field.name, "userName"], label: "人员名称", onlyForLabel: true },
]
),
},
]
),
},
},
{ key: "divider3", label: promiseType === 1 ? "发状人" : "被承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{
name: "promisePeoples",
span: 24,
render: FORM_ITEM_RENDER_ENUM.FORM_LIST,
formListUniqueProps: {
showAddButton: false,
showRemoveButton: false,
options: field => (
[
{
name: [field.name, "departmentId"],
label: "部门",
span: 8,
labelCol: { span: 6 },
render: (
<DepartmentSelectTree
onChange={async (departmentId) => {
form.setFieldValue(["promisePeoples", field.name, "postId"], "");
form.setFieldValue(["promisePeoples", field.name, "postName"], "");
form.setFieldValue(["promisePeoples", field.name, "userName"], "");
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", valueKey: "id" }));
form.setFieldValue(["promisePeoples", field.name, "userName"], "");
form.setFieldValue(["promisePeoples", field.name, "userId"], "");
},
},
},
{ name: [field.name, "postName"], label: "岗位名称", onlyForLabel: true },
{
name: [field.name, "userId"],
label: "人员",
span: 8,
labelCol: { span: 6 },
render: (
<PersonnelSelect
params={{
postId: promisePeoples?.[field.name]?.postId || "",
departmentId: promisePeoples?.[field.name]?.departmentId || "",
}}
isNeedPostId={true}
onGetLabel={(label) => {
form.setFieldValue(["promisePeoples", field.name, "userName"], label);
}}
/>
),
},
{ name: [field.name, "userName"], label: "人员名称", onlyForLabel: true },
]
),
},
},
},
]
: [
{ key: "tip", customizeRender: true, span: 24, render: (<div style={{ color: "red", textAlign: "center" }}>请先选择安全承诺模板</div>) },
]),
]}
/>
</div>
{choiceTemplateModalOpen && (
<ChoiceTemplateModal
onCancel={() => setchoiceTemplateModalOpen(false)}
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("promisePeoples", [{}]);
if (values.promiseType !== promiseType) {
form.setFieldValue("promisePersons", [{}]);
form.setFieldValue("promisePeoples", [{}]);
}
setIsAlreadyChoiceTemplate(true);
setPostList([]);
setPostList1([]);
}}
/>
)}

View File

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

View File

@ -1,7 +1,8 @@
import useUrlState from "@ahooksjs/use-url-state";
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
import { tools } from "@cqsjjb/jjb-common-lib";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal, Space, Tabs, Tooltip } from "antd";
import dayjs from "dayjs";
import { useEffect, useState } from "react";
import AddIcon from "zy-react-library/components/Icon/AddIcon";
import Search from "zy-react-library/components/Search";
@ -13,10 +14,11 @@ import { getLabelName } from "zy-react-library/utils";
import { PROMISE_TYPE_ENUM, RELEASE_PLATFORM_ENUM } from "~/enumerate/constant";
import { NS_COMMITMENT } from "~/enumerate/namespace";
const { query } = tools.router;
function List(props) {
const [form] = Form.useForm();
const [releasePlatform, setReleasePlatform] = useState(query.releasePlatform || RELEASE_PLATFORM_ENUM[0].bianma);
const [query, setQuery] = useUrlState({
releasePlatform: RELEASE_PLATFORM_ENUM[1].bianma,
}, { navigateMode: "replace" });
const [dorpInfo, setDorpInfo] = useState("");
const { tableProps, getData } = useTable(props["busPromiseList"], {
form,
@ -25,7 +27,7 @@ function List(props) {
createTimeE: formData.createTime?.[1],
}),
params: {
releasePlatform,
releasePlatform: query.releasePlatform,
},
});
const getDorpInfo = async () => {
@ -86,14 +88,13 @@ function List(props) {
<Table
headerTitle={(
<Tabs
activeKey={releasePlatform}
activeKey={query.releasePlatform}
items={RELEASE_PLATFORM_ENUM.map(item => ({
key: item.bianma,
label: item.name,
}))}
onChange={(event) => {
query.releasePlatform = event;
setReleasePlatform(event);
setQuery({ releasePlatform: event });
getData();
}}
/>
@ -120,17 +121,17 @@ function List(props) {
dataIndex: "promiseType",
render: (_, record) => getLabelName({ list: PROMISE_TYPE_ENUM, status: record.promiseType }),
},
{ title: "安全承诺级别", dataIndex: "levelName" },
{ title: "安全承诺级别", dataIndex: "levelName", hidden: query.releasePlatform === "2" },
{
title: "下发对象",
dataIndex: "releasePlatform",
render: (_, record) => getLabelName({ list: RELEASE_PLATFORM_ENUM, status: record.releasePlatform }),
},
{ title: "签订单位", dataIndex: "corpName" },
{ title: "签订单位", dataIndex: "corpName", hidden: query.releasePlatform === "2" },
{ title: "适用期限", render: (_, record) => `${record.promiseTermStart}${record.promiseTermEnd}` },
{ title: "涉及岗位", dataIndex: "postNames" },
{ title: "承诺人数/涉及人数", dataIndex: "signedCount", render: (_, record) => `完成${record.signedCount}/${record.peopleNumInvolved}` },
{ title: "下发时间", dataIndex: "updateTime" },
{ title: "承诺人数/涉及人数", dataIndex: "signedCount", render: (_, record) => `${record.signedCount === record.peopleNumInvolved ? "已" : "未"}完成${record.signedCount}/${record.peopleNumInvolved}` },
{ title: "下发时间", dataIndex: "updateTime", render: (_, record) => record.updateTime ? dayjs(record.updateTime).format("YYYY-MM-DD") : "" },
{
title: "状态",
render: (_, record) => getLabelName({

View File

@ -1,6 +1,5 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, Space } from "antd";
import dayjs from "dayjs";
import Search from "zy-react-library/components/Search";
import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
@ -26,7 +25,7 @@ function List(props) {
<Table
columns={[
{ title: "分公司名称", dataIndex: "corpName" },
{ title: "年份", render: record => record.createTime ? dayjs(record.createTime).format("YYYY") : "" },
{ title: "年份", dataIndex: "createTime" },
{ title: "安全承诺数", dataIndex: "promiseCount" },
{ title: "下发安全承诺人数", dataIndex: "issueCount" },
{ title: "签订安全承诺人数", dataIndex: "signCount" },
@ -39,7 +38,7 @@ function List(props) {
<Button
type="link"
onClick={() => {
props.history.push(`./ListView?id=${record.id}`);
props.history.push(`./ListView?id=${record.corpId}`);
}}
>
查看

View File

@ -1,6 +1,5 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, Space } from "antd";
import dayjs from "dayjs";
import HeaderBack from "zy-react-library/components/HeaderBack";
import Search from "zy-react-library/components/Search";
import Table from "zy-react-library/components/Table";
@ -21,7 +20,7 @@ function List(props) {
return (
<div>
<HeaderBack title="查看" />
<div style={{ padding: 20 }}>
<div style={{ padding: "0 20px 20px 20px" }}>
<Search
form={form}
options={[
@ -32,7 +31,7 @@ function List(props) {
<Table
columns={[
{ title: "安全承诺名称", dataIndex: "promiseName" },
{ title: "承诺期限", render: (record) => { return record.promiseTermStart ? `${dayjs(record.promiseTermStart).format("YYYY-MM-DD")}${dayjs(record.promiseTermEnd).format("YYYY-MM-DD")}` : ""; } },
{ title: "承诺期限", render: (_, record) => record.promiseTermStart ? `${record.promiseTermStart}${record.promiseTermEnd}` : "" },
{ title: "安全承诺级别", dataIndex: "levelName" },
{ title: "涉及人数", dataIndex: "peopleNumInvolved" },
{ title: "完成提交人数", dataIndex: "signedCount" },

View File

@ -23,7 +23,7 @@ function List(props) {
return (
<div>
<HeaderBack title="查看" />
<div style={{ padding: 20 }}>
<div style={{ padding: "0 20px 20px 20px" }}>
<Table
columns={[
{ title: "所属部门", dataIndex: "departmentName" },

View File

@ -57,56 +57,57 @@ const DetailModal = (props) => {
</div>
</div>
<h1 className="title">{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1>
<div className="promise-content">
<h1 className="title">{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1>
{form.promiseType === 0 && (
<div>
{`${form.userName ? `${form.userName + form.postName}:` : ""}` || ""}
</div>
)}
<div className="promise-content" 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">
{!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>
)}
{form.promiseType === 0 && (
<div>
{`${form.promisePeople ? `${form.promisePeople + form.promisePeoplePost}:` : ""}` || ""}
</div>
)}
<div dangerouslySetInnerHTML={{ __html: form.promiseText }} />
<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 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">
{!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>

View File

@ -3,7 +3,7 @@
line-height: normal;
.cover {
height: 841pt;
//height: 842pt;
text-align: center;
position: relative;
display: none;
@ -14,23 +14,11 @@
}
> div {
position: absolute;
bottom: 100px;
left: 50%;
transform: translateX(-50%);
}
}
@media print {
.cover {
display: block;
}
.promise-content {
word-wrap: break-word;
word-break: break-word;
white-space: pre-wrap;
overflow-wrap: break-word;
//position: absolute;
//bottom: 100px;
//left: 50%;
//transform: translateX(-50%);
margin-top: 629px;
}
}
@ -63,3 +51,27 @@
}
}
}
@media print {
.dialogContent {
font-family: unset;
font-size: 20px;
.cover {
display: block;
page-break-after: always;
}
.promise-content {
word-wrap: break-word;
word-break: break-word;
white-space: pre-wrap;
overflow-wrap: break-word;
}
.title {
margin-top: 100px;
}
}
}