From bf17f9f44b808b84d18f35fef6de9ae86b74133f Mon Sep 17 00:00:00 2001
From: cclu <1106109051@qq.com>
Date: Wed, 9 Apr 2025 16:29:40 +0800
Subject: [PATCH] =?UTF-8?q?=20feat(=E6=A8=A1=E5=9D=97):=20=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E4=BA=86=E4=B8=AA=E5=BE=88=E6=A3=92=E7=9A=84=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
config/router.ts | 5 +
src/layouts/index.tsx | 16 +-
src/models/user.ts | 11 +-
src/pages/authority.ts | 3 +
src/pages/examine/modal/index.tsx | 2 +-
.../record/components/recordDetail.tsx | 70 +-
src/pages/examine/record/index.tsx | 41 +-
src/pages/examine/recordSummary/index.tsx | 602 ++++++++++++++++++
src/pages/setting/menu/components/addMenu.tsx | 211 +++++-
src/pages/setting/menu/index.tsx | 89 ++-
src/pages/setting/menu/service.ts | 8 +-
11 files changed, 971 insertions(+), 87 deletions(-)
create mode 100644 src/pages/examine/recordSummary/index.tsx
diff --git a/config/router.ts b/config/router.ts
index 20bd1d4..f3402e1 100644
--- a/config/router.ts
+++ b/config/router.ts
@@ -44,6 +44,11 @@ export default [
path: '/examine/record',
name: '考核记录管理',
component: "@/pages/examine/record/index",
+ },
+ {
+ path: '/examine/recordSummary',
+ name: '考核记录汇总',
+ component: "@/pages/examine/recordSummary/index",
}
]
},
diff --git a/src/layouts/index.tsx b/src/layouts/index.tsx
index 128b916..e8b013c 100644
--- a/src/layouts/index.tsx
+++ b/src/layouts/index.tsx
@@ -1,11 +1,4 @@
-/*
- * @Author: cclu 1106109051@qq.com
- * @Date: 2025-02-27 15:55:46
- * @LastEditors: cclu 1106109051@qq.com
- * @LastEditTime: 2025-03-10 17:46:55
- * @FilePath: \umi4-admin-main\src\layouts\index.tsx
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- */
+
import type { FC } from 'react';
import { useState, useEffect } from 'react';
import { Dropdown, Layout, Menu, Tabs, Tooltip } from 'antd';
@@ -201,6 +194,13 @@ const BasicLayout: FC<{ user: UserModelState, global: ProfileModelState, dispatc
name: "考核记录管理",
path: "/examine/record",
},
+ {
+ SYSTEMMODULE_DESC: "",
+ guid: "7",
+ hideInMenu: false,
+ name: "考核记录汇总",
+ path: "/examine/recordSummary",
+ },
{
SYSTEMMODULE_DESC: "",
guid: "6",
diff --git a/src/models/user.ts b/src/models/user.ts
index 25e2566..48d6977 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -242,7 +242,13 @@ const UserModel: UserModelType = {
path: '/examine/record',
name: '考核记录管理',
component: "@/pages/examine/record",
- }
+ },
+ {
+ path: '/examine/recordSummary',
+ name: '考核记录汇总',
+ component: "@/pages/examine/recordSummary",
+ },
+
]
},
{
@@ -289,7 +295,8 @@ const UserModel: UserModelType = {
'/examine/modal',
'/examine/question',
'/examine/record',
- '/setting/menu'
+ '/setting/menu',
+ '/examine/recordSummary'
],
rootSubmenuKeys: handleGetRootSubmenuKeys(menuRes.data),
indexAllMenuItemById: handleGetEachDatumFromNestedDataByKey(menuRes.data, 'id'),
diff --git a/src/pages/authority.ts b/src/pages/authority.ts
index a315255..b808b9c 100644
--- a/src/pages/authority.ts
+++ b/src/pages/authority.ts
@@ -14,6 +14,9 @@ const authority: PageAuthority = {
'/examine/record': [
'/examine/record',
],
+ '/examine/recordSummary': [
+ '/examine/recordSummary',
+ ],
'/setting/menu': ['/setting/menu']
};
diff --git a/src/pages/examine/modal/index.tsx b/src/pages/examine/modal/index.tsx
index 54abaf8..2b46ade 100644
--- a/src/pages/examine/modal/index.tsx
+++ b/src/pages/examine/modal/index.tsx
@@ -481,7 +481,7 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => {
const fileData = await handleUploadFile(formData)
console.log('fileData', fileData);
- let imgUrl: string = `https://es.robot-z.cn/${fileData.data.path}`
+ let imgUrl: string = `https://es.eshangtech.com/${fileData.data.path}`
await handleUpdateTemplates({
...data.data,
qrUrl: imgUrl
diff --git a/src/pages/examine/record/components/recordDetail.tsx b/src/pages/examine/record/components/recordDetail.tsx
index 527ca35..6855234 100644
--- a/src/pages/examine/record/components/recordDetail.tsx
+++ b/src/pages/examine/record/components/recordDetail.tsx
@@ -536,33 +536,51 @@ const RecordDetail = ({ parentRow, show, detailType, currentUser, onRef, showErr
readonly
/>
-
- (
-
-
{listDom}
-
{action}
+
+ {
+ formRes?.imgsList && formRes?.imgsList.length > 0 ?
+
+
+ {
+ formRes?.imgsList && formRes?.imgsList.length > 0 ?
+ formRes?.imgsList.map((item: string) => {
+ return
+ })
+ : ''
+ }
- )}
- >
-
- {
- formRes?.imgsList && formRes?.imgsList.length > 0 ?
- formRes?.imgsList.map((item: string) => {
- return
- })
- : ''
- }
-
-
-
+
+
+ //
+ //
(
+ //
+ //
{listDom}
+ //
{action}
+ //
+ // )}
+ // >
+ //
+ // {
+ // formRes?.imgsList && formRes?.imgsList.length > 0 ?
+ // formRes?.imgsList.map((item: string) => {
+ // return
+ // })
+ // : ''
+ // }
+ //
+ //
+ //
+ : ""
+ }
>
}
diff --git a/src/pages/examine/record/index.tsx b/src/pages/examine/record/index.tsx
index ade954e..d8cb11a 100644
--- a/src/pages/examine/record/index.tsx
+++ b/src/pages/examine/record/index.tsx
@@ -39,22 +39,29 @@ const examineRecord: React.FC<{ currentUser: any }> = (props) => {
title: "统计日期",
dataIndex: "staticDate",
hideInTable: true,
- valueType: "dateRange",
- initialValue: [moment().startOf('M'), moment()],
- search: {
- transform: (value: any) => {
- return {
- startTime: moment(value[0]).format('YYYY-MM-DD'),
- endTime: moment(value[1]).format('YYYY-MM-DD')
- };
- },
- },
- fieldProps: {
- picker: "day",
- format: 'YYYY-MM-DD',
- }
+ valueType: "date",
+ initialValue: moment().subtract('1', 'd'),
},
// {
+ // title: "统计日期",
+ // dataIndex: "staticDate",
+ // hideInTable: true,
+ // valueType: "dateRange",
+ // initialValue: [moment().startOf('M'), moment()],
+ // search: {
+ // transform: (value: any) => {
+ // return {
+ // startTime: moment(value[0]).format('YYYY-MM-DD'),
+ // endTime: moment(value[1]).format('YYYY-MM-DD')
+ // };
+ // },
+ // },
+ // fieldProps: {
+ // picker: "day",
+ // format: 'YYYY-MM-DD',
+ // }
+ // },
+ // {
// title: "服务区",
// dataIndex: "serverPartId",
// hideInTable: true,
@@ -289,7 +296,7 @@ const examineRecord: React.FC<{ currentUser: any }> = (props) => {
expandRowByClick: true
}}
rowKey={(record) => {
- return `${record?.id}`
+ return `${record?.id}-${record?.code}`
}}
scroll={{ x: "100%", y: 'calc(100vh - 400px)' }}
headerTitle={
考核记录管理}
@@ -304,8 +311,8 @@ const examineRecord: React.FC<{ currentUser: any }> = (props) => {
const req: any = {
serverPartIds: selectedId && selectedId.length > 0 ? selectedId : [],
- startTime: params?.startTime ? `${params?.startTime}T00:00:00` : "",
- endTime: params?.endTime ? `${params?.endTime}T23:59:59` : "",
+ startTime: params?.staticDate ? `${params?.staticDate}T00:00:00` : "",
+ endTime: params?.staticDate ? `${params?.staticDate}T23:59:59` : "",
// serverPartId: params?.serverPartId ? params?.serverPartId : undefined,
extend: params?.inspectionType ? [{
key: "situation",
diff --git a/src/pages/examine/recordSummary/index.tsx b/src/pages/examine/recordSummary/index.tsx
new file mode 100644
index 0000000..ee820a8
--- /dev/null
+++ b/src/pages/examine/recordSummary/index.tsx
@@ -0,0 +1,602 @@
+import { ConnectState } from "@/models/global";
+import { ActionType, FormInstance, ProTable } from "@ant-design/pro-components";
+import { useRef, useState } from "react";
+import { connect } from "umi";
+import moment from "moment";
+import { Button, Drawer, Image, message, Popconfirm, Space } from "antd";
+import LeftSelectTree from "@/components/leftSelectTree/leftSelectTree";
+import { handleGetRecordTreeList } from "../record/service";
+
+const recordSummary: React.FC<{ currentUser: any }> = (props) => {
+ const { currentUser } = props
+
+ const actionRef = useRef
();
+ const formRef = useRef();
+
+ const drawerActionRef = useRef();
+ const drawerFormRef = useRef();
+ const recordDetailRef = useRef()
+ // 显示的附件数据
+ const [showImgList, setShowImgList] = useState([])
+ // 预览图片
+ const [imagePreviewVisible, setImagePreviewVisible] = useState(false)
+ // 预览的索引
+ const [previewIndex, setPreviewIndex] = useState(0)
+ // 当行数据
+ const [currentRow, setCurrentRow] = useState()
+ // 显示详情抽屉
+ const [showDetail, setShowDetail] = useState(false)
+ // 显示类型 1 巡查次数 2 正常 3 异常 4 待处理 5 处理中 6 已处理
+ const [showType, setShowType] = useState(0)
+ // 外侧表格的搜索条件
+ const [searchParams, setSearchParams] = useState()
+
+ // 判断是否点了出现的是异常处理的抽屉
+ const [showAbnormal, setShowAbnormal] = useState(false)
+ // 树相关的属性和方法
+ const [selectedId, setSelectedId] = useState()
+ const [columnsStateMap, setColumnsStateMap] = useState({
+ score: { show: false }
+ })
+ const [collapsible, setCollapsible] = useState(false)
+
+ const columns: any = [
+ {
+ title: "统计日期",
+ dataIndex: "staticDate",
+ hideInTable: true,
+ valueType: "dateRange",
+ initialValue: [moment().startOf('M'), moment()],
+ search: {
+ transform: (value: any) => {
+ return {
+ startTime: moment(value[0]).startOf('m').format('YYYY-MM-DD'),
+ endTime: moment(value[1]).format('YYYY-MM-DD')
+ };
+ },
+ },
+ fieldProps: {
+ picker: "day",
+ format: 'YYYY-MM-DD',
+ }
+ },
+ {
+ title: 服务区名称
,
+ dataIndex: "serverPartName",
+ hideInSearch: true,
+ width: 200,
+ ellipsis: true,
+ render: (_, record) => {
+ return record?.type === 'district' || record?.type === 'servicePart' ? record?.name :
+ record?.template ? record?.template.title : "-"
+ }
+ },
+ {
+ title: 巡查次数
,
+ dataIndex: "inspectionNumber",
+ align: 'center',
+ hideInSearch: true,
+ width: 150,
+ ellipsis: true,
+ render: (_, record) => {
+ return record?.template?.id && record?.inspectionNumber > 0 ? {
+ setCurrentRow(record)
+ setShowType(1)
+ setShowDetail(true)
+ }}>
+ {record?.inspectionNumber || '-'}
+ : {record?.inspectionNumber || '-'}
+ }
+ },
+ {
+ title: 正常
,
+ dataIndex: "normalNumber",
+ align: 'center',
+ hideInSearch: true,
+ width: 150,
+ ellipsis: true,
+ render: (_, record) => {
+ return record?.template?.id && record?.normalNumber > 0 ? {
+ setCurrentRow(record)
+ setShowType(2)
+ setShowDetail(true)
+ }}>
+ {record?.normalNumber || '-'}
+ : {record?.normalNumber || '-'}
+ }
+ },
+ {
+ title: 异常
,
+ dataIndex: "errorNumber",
+ align: 'center',
+ hideInSearch: true,
+ width: 150,
+ ellipsis: true,
+ render: (_, record) => {
+ return record?.template?.id && record?.errorNumber > 0 ? {
+ setCurrentRow(record)
+ setShowType(3)
+ setShowDetail(true)
+ }}>
+ {record?.errorNumber || '-'}
+ : {record?.errorNumber || '-'}
+ }
+ },
+ {
+ title: 待处理
,
+ dataIndex: "pendingProcessNumber",
+ align: 'center',
+ hideInSearch: true,
+ width: 150,
+ ellipsis: true,
+ render: (_, record) => {
+ return record?.template?.id && record?.pendingProcessNumber > 0 ? {
+ setCurrentRow(record)
+ setShowType(4)
+ setShowDetail(true)
+ }}>
+ {record?.pendingProcessNumber || '-'}
+ : {record?.pendingProcessNumber || '-'}
+ }
+ },
+ {
+ title: 处理中
,
+ dataIndex: "processingNumber",
+ align: 'center',
+ hideInSearch: true,
+ width: 150,
+ ellipsis: true,
+ render: (_, record) => {
+ return record?.template?.id && record?.processingNumber > 0 ? {
+ setCurrentRow(record)
+ setShowType(5)
+ setShowDetail(true)
+ }}>
+ {record?.processingNumber || '-'}
+ : {record?.processingNumber || '-'}
+ }
+ },
+ {
+ title: 已处理
,
+ dataIndex: "processedNumber",
+ align: 'center',
+ hideInSearch: true,
+ width: 150,
+ ellipsis: true,
+ render: (_, record) => {
+ return record?.template?.id && record?.processedNumber > 0 ? {
+ setCurrentRow(record)
+ setShowType(6)
+ setShowDetail(true)
+ }}>
+ {record?.processedNumber || '-'}
+ : {record?.processedNumber || '-'}
+ }
+ }
+ ]
+
+ const drawerColumns: any = [
+ // {
+ // title: "巡查类型",
+ // dataIndex: "inspectionType",
+ // hideInTable: true,
+ // valueType: "select",
+ // valueEnum: {
+ // "1": '异常',
+ // "0": "正常"
+ // }
+ // },
+ {
+ title: 服务区名称
,
+ dataIndex: "serverPartName",
+ hideInSearch: true,
+ width: 200,
+ ellipsis: true,
+ render: (_, record) => {
+ return record?.type === 'district' || record?.type === 'servicePart' ? record?.name :
+ record?.template ? record?.template.title : "-"
+ }
+ },
+ {
+ title: 巡查类型
,
+ dataIndex: "placeName",
+ hideInSearch: true,
+ width: 100,
+ align: 'center',
+ ellipsis: true,
+ render: (_, record) => {
+ let res: any = record.extend ? JSON.parse(record.extend) : "-"
+ return {res.situation === 1 ? '异常' : res.situation === 0 ? '正常' : ''}
+ }
+ },
+ {
+ title: 巡查内容
,
+ dataIndex: "uploadResult",
+ hideInSearch: true,
+ width: 200,
+ ellipsis: true,
+ render: (_, record) => {
+ let extendObj = record?.extend ? JSON.parse(record?.extend) : ""
+ return extendObj?.uploadResult ? extendObj?.uploadResult : "-"
+ }
+ },
+ {
+ title: 巡查结果
,
+ dataIndex: "uploadResult",
+ hideInSearch: true,
+ width: 350,
+ ellipsis: true,
+ render: (_, record) => {
+ let str: string = ''
+ if (record?.questionResponses && record?.questionResponses.length > 0) {
+ record?.questionResponses.forEach((item: any, index: number) => {
+ let anwers: string = ''
+ if (item.choiceResponse && item.choiceResponse.length > 0) {
+ item.choiceResponse.forEach((subItem: string, subIndex: number) => {
+ anwers += `${subIndex > 0 ? ',' : ''}${subItem}`
+ })
+ }
+ str += `${index > 0 ? ',' : ''}考核内容:${item.question.title},考核结果:${anwers}`
+ })
+ }
+ return str || ''
+ }
+ },
+ {
+ title: 巡查总分
,
+ dataIndex: "score",
+ hideInSearch: true,
+ valueType: 'digit',
+ width: 100,
+ align: 'center',
+ },
+ {
+ title: 巡查时间
,
+ dataIndex: "createdAt",
+ hideInSearch: true,
+ width: 150,
+ ellipsis: true,
+ align: 'center',
+ render: (_, record) => {
+ return record?.createdAt ? moment(record?.createdAt).format('YYYY-MM-DD HH:mm:ss') : '-'
+ }
+ },
+ {
+ title: 巡查人
,
+ dataIndex: "userName",
+ hideInSearch: true,
+ width: 100,
+ ellipsis: true,
+ align: 'center',
+ },
+ {
+ title: 处理状态
,
+ dataIndex: "errorStatus",
+ hideInSearch: true,
+ width: 100,
+ ellipsis: true,
+ align: 'center',
+ render: (_, record) => {
+ let res: any = record.extend ? JSON.parse(record.extend) : "-"
+ return {
+ res.errorStatus === 0
+ ? "待处理"
+ : res.errorStatus === 1
+ ? "处理中"
+ : res.errorStatus === 2
+ ? "已处理"
+ : "-"
+ }
+ }
+ },
+ {
+ title: 现场图片
,
+ dataIndex: "placeName",
+ hideInSearch: true,
+ width: 150,
+ ellipsis: true,
+ align: 'center',
+ render: (_, record) => {
+ let extendObj = record?.extend ? JSON.parse(record?.extend) : ""
+ let imgList = extendObj.imgsList
+ return imgList && imgList.length > 0 ?
+ : "-"
+ }
+ }
+ ]
+
+
+ return (
+
+
+
+
+
{
+ return `${record?.id}-${record?.code}`
+ }}
+ scroll={{ x: "100%", y: 'calc(100vh - 400px)' }}
+ headerTitle={考核记录汇总}
+ search={{ span: 6 }}
+ request={async (params) => {
+ if (!(selectedId && selectedId.length > 0)) {
+ return
+ }
+
+ const req: any = {
+ serverPartIds: selectedId && selectedId.length > 0 ? selectedId : [],
+ startTime: params?.startTime ? `${params?.startTime}T00:00:00` : "",
+ endTime: params?.endTime ? `${params?.endTime}T23:59:59` : "",
+ // serverPartId: params?.serverPartId ? params?.serverPartId : undefined,
+ extend: params?.inspectionType ? [{
+ key: "situation",
+ value: params?.inspectionType
+ }] : undefined
+ }
+
+ setSearchParams(params)
+
+ console.log('req', req);
+ const data = await handleGetRecordTreeList(req)
+ console.log('dat3a333', data);
+
+ // 处理一下 根据第三层的实际巡查记录 汇总到第二层来
+ if (data && data.length > 0) {
+ data.forEach((item: any) => {
+ if (item.children && item.children.length > 0) {
+ item.children.forEach((subItem: any) => {
+ if (subItem.children && subItem.children.length > 0) {
+ // 点位的id数据 肯定要求不重复的
+ let templateIdList: number[] = []
+ // 遍历完之后 要替换的
+ let newChildren: any = []
+
+ subItem.children.forEach((thirdItem: any) => {
+ let extendObj: any = {}
+ if (thirdItem.extend) {
+ extendObj = JSON.parse(thirdItem.extend)
+ }
+ if (templateIdList.indexOf(thirdItem.template.id) === -1) {
+ templateIdList.push(thirdItem.template.id)
+ // 没有过的点位数据 就给他默认值
+ newChildren.push({
+ template: thirdItem.template,
+ inspectionNumber: 1,
+ normalNumber: extendObj?.situation === 0 ? 1 : 0,
+ errorNumber: extendObj?.situation === 1 ? 1 : 0,
+ pendingProcessNumber: extendObj?.errorStatus === 0 ? 1 : 0,
+ processingNumber: extendObj?.errorStatus === 1 ? 1 : 0,
+ processedNumber: extendObj?.errorStatus === 2 ? 1 : 0,
+ })
+ } else {
+ // 如果已经有过了的点位 给他加当前的状态就好
+ if (newChildren && newChildren.length > 0) {
+ newChildren.forEach((fourthItem: any) => {
+ if (fourthItem.template.id === thirdItem.template.id) {
+ fourthItem.inspectionNumber += 1
+ if (extendObj?.situation === 0) {
+ fourthItem.normalNumber += 1
+ } else if (extendObj?.situation === 1) {
+ fourthItem.errorNumber += 1
+ }
+
+ if (extendObj?.errorStatus === 0) {
+ fourthItem.pendingProcessNumber += 1
+ } else if (extendObj?.errorStatus === 1) {
+ fourthItem.processingNumber += 1
+ } else if (extendObj?.errorStatus === 2) {
+ fourthItem.processedNumber += 1
+ }
+ }
+ })
+ }
+ }
+ })
+ subItem.children = newChildren
+ }
+ })
+ }
+ })
+
+
+ data.forEach((item: any) => {
+ let inspectionNumberItemSum: number = 0
+ let normalNumberItemSum: number = 0
+ let errorNumberItemSum: number = 0
+ let pendingProcessNumberItemSum: number = 0
+ let processingNumberItemSum: number = 0
+ let processedNumberItemSum: number = 0
+ if (item.children && item.children.length > 0) {
+ item.children.forEach((subItem: any) => {
+ let inspectionNumberSum: number = 0
+ let normalNumberSum: number = 0
+ let errorNumberSum: number = 0
+ let pendingProcessNumberSum: number = 0
+ let processingNumberSum: number = 0
+ let processedNumberSum: number = 0
+ if (subItem.children && subItem.children.length > 0) {
+ subItem.children.forEach((thirdItem: any) => {
+ inspectionNumberSum += thirdItem.inspectionNumber
+ normalNumberSum += thirdItem.normalNumber
+ errorNumberSum += thirdItem.errorNumber
+ pendingProcessNumberSum += thirdItem.pendingProcessNumber
+ processingNumberSum += thirdItem.processingNumber
+ processedNumberSum += thirdItem.processedNumber
+ })
+ }
+ subItem.inspectionNumber = inspectionNumberSum
+ subItem.normalNumber = normalNumberSum
+ subItem.errorNumber = errorNumberSum
+ subItem.pendingProcessNumber = pendingProcessNumberSum
+ subItem.processingNumber = processingNumberSum
+ subItem.processedNumber = processedNumberSum
+
+ inspectionNumberItemSum += subItem.inspectionNumber
+ normalNumberItemSum += subItem.normalNumber
+ errorNumberItemSum += subItem.errorNumber
+ pendingProcessNumberItemSum += subItem.pendingProcessNumber
+ processingNumberItemSum += subItem.processingNumber
+ processedNumberItemSum += subItem.processedNumber
+ })
+ item.inspectionNumber = inspectionNumberItemSum
+ item.normalNumber = normalNumberItemSum
+ item.errorNumber = errorNumberItemSum
+ item.pendingProcessNumber = pendingProcessNumberItemSum
+ item.processingNumber = processingNumberItemSum
+ item.processedNumber = processedNumberItemSum
+ }
+ })
+ }
+ console.log('resresres', data);
+
+
+ if (data && data.length > 0) {
+ return { data, success: true }
+ }
+ return { data: [], success: true }
+ }}
+ toolbar={{
+
+ }}
+ columnsState={{
+ value: columnsStateMap,
+ onChange: setColumnsStateMap,
+ }}
+
+ >
+
+
+
+ {
+ showImgList && showImgList.length > 0 &&
+
+ {
+ setImagePreviewVisible(vis)
+ },
+ current: previewIndex
+ }}>
+ {
+ showImgList.map((n) =>
+
+ )
+ }
+
+
+
+
+ }
+
+
{
+ setCurrentRow(undefined)
+ setShowType(0)
+ setShowDetail(false)
+ setShowImgList([])
+ setImagePreviewVisible(false)
+ }}
+ open={showDetail}
+ destroyOnClose
+ width={'60%'}
+ >
+ {
+ return `${record?.id}-${record?.code}`
+ }}
+ scroll={{ x: "100%", y: 'calc(100vh - 400px)' }}
+ headerTitle={考核记录管理}
+ search={{ span: 6 }}
+ request={async (params) => {
+
+ console.log('searchParams', searchParams);
+ console.log('currentRow', currentRow);
+ if (!currentRow?.template?.serverPartId) {
+ return
+ }
+
+
+ // showType 1 巡查次数 2 正常 3 异常 4 待处理 5 处理中 6 已处理
+
+
+ const req: any = {
+ serverPartIds: [currentRow?.template?.serverPartId],
+ startTime: searchParams?.startTime ? `${searchParams?.startTime}T00:00:00` : "",
+ endTime: searchParams?.endTime ? `${searchParams?.endTime}T23:59:59` : "",
+ extend: showType === 1 ? undefined : showType === 2 ? [
+ {
+ key: "situation",
+ value: 0,
+ },
+ ] : showType === 3 ? [
+ {
+ key: "situation",
+ value: 1,
+ },
+ ] : showType === 4 ? [
+ {
+ key: "errorStatus",
+ value: 0,
+ }
+ ] :
+ showType === 5 ? [
+ {
+ key: "errorStatus",
+ value: 1,
+ }
+ ] :
+ showType === 6 ? [
+ {
+ key: "errorStatus",
+ value: 2,
+ }
+ ] : undefined
+ }
+ console.log('req', req);
+ const data = await handleGetRecordTreeList(req)
+ console.log('data', data);
+
+ if (data && data.length > 0) {
+ return { data, success: true }
+ }
+ return { data: [], success: true }
+ }}
+ >
+
+
+
+ )
+}
+
+export default connect(({ user }: ConnectState) => ({
+ currentUser: user.data
+}))(recordSummary);
\ No newline at end of file
diff --git a/src/pages/setting/menu/components/addMenu.tsx b/src/pages/setting/menu/components/addMenu.tsx
index 2ba1c74..d29989b 100644
--- a/src/pages/setting/menu/components/addMenu.tsx
+++ b/src/pages/setting/menu/components/addMenu.tsx
@@ -1,26 +1,213 @@
-import { Modal } from "antd";
+import { ProForm, ProFormDigit, ProFormRadio, ProFormText, ProFormTextArea, ProFormTreeSelect } from "@ant-design/pro-components";
+import { Col, FormInstance, message, Modal, Row } from "antd";
+import { useRef, useState } from "react";
import { connect } from "umi";
+import { ConnectState } from "@/models/global";
+import { handleAddMenus, handleGetMenuList } from "../service";
type DetailProps = {
currentUser?: any // 用户详情的公参
showDrawer: boolean // 显示悬浮框的判断
parentRow?: any // 点击的行 编辑的时候有用
+ setShowDrawer: any // 改变悬浮框现实状态
+ parentTableRef?: any // 父级表格实例
}
-const AddBigType = ({ currentUser, showDrawer, parentRow }: DetailProps) => {
+const AddMenu = ({ currentUser, showDrawer, parentRow, setShowDrawer, parentTableRef }: DetailProps) => {
+ console.log('showDrawer', showDrawer);
+ // 表单实例
+ const formRef = useRef();
+ // 当前的菜单类型
+ const [currentMenuType, setCurrentMenuType] = useState(1)
- {
- }}
- onCancel={() => {
+ return (
+ {
+ formRef.current?.validateFields().then(async (res: any) => {
+ console.log('res', res);
+ const req: any = {
+ parentId: res.parentId || 1,
+ menuCode: res.menuCode,
+ menuName: res.menuName,
+ menuIcon: res.menuIcon || "",
+ menuPath: res.menuPath || "",
+ component: "",
+ permission: "",
+ menuType: res.menuType,
+ sortOrder: res.sortOrder,
+ hidden: res.hidden === 1 ? false : res.hidden === 2 ? true : '',
+ operator: currentUser.adminName
+ }
+ const data = await handleAddMenus(req)
+ console.log('datadsa', data);
+ if (data.code === 200) {
+ message.success(data.message)
+ if (parentTableRef) {
+ parentTableRef.current.reload()
+ }
- }}
- />
+ formRef.current?.resetFields()
+ setShowDrawer(false)
+ }
+ })
+ }}
+ onCancel={() => {
+ setShowDrawer(false)
+ }}
+ >
+
+
+
+
+
+
+
+
+
+
+ {
+ const req: any = {
+
+ }
+ const data = await handleGetMenuList()
+ let res: any = []
+ if (data && data.length > 0) {
+ res = data
+ }
+ return res
+ }}
+ fieldProps={{
+ fieldNames: {
+ label: "menuName",
+ value: "id"
+ }
+ }}
+ />
+
+
+ {
+ currentMenuType === 1 ?
+
+ "}
+ fieldProps={
+ {
+ addonAfter: 去复制
+ }
+ }
+
+ />
+ : ""
+ }
+
+ {
+ currentMenuType === 2 ?
+
+
+ : ''
+ }
+
+
+
+
+
+
+
+
+
+
+ {
+ console.log('e', e);
+ setCurrentMenuType(Number(e.target.value))
+ }
+ }}
+ />
+
+
+ {/*
+
+ */}
+
+
+
+ );
}
export default connect(({ user }: ConnectState) => ({
currentUser: user.data
-}))(AddBigType);
\ No newline at end of file
+}))(AddMenu);
\ No newline at end of file
diff --git a/src/pages/setting/menu/index.tsx b/src/pages/setting/menu/index.tsx
index fdfaa20..e86da33 100644
--- a/src/pages/setting/menu/index.tsx
+++ b/src/pages/setting/menu/index.tsx
@@ -1,8 +1,11 @@
+
import { ActionType, FormInstance, ProTable } from "@ant-design/pro-components";
-import { Button } from "antd";
+import { Button, Space } from "antd";
import { useRef, useState } from "react";
import { connect } from "umi";
import { handleGetMenuList } from "./service";
+import AddMenu from "./components/addMenu";
+import moment from "moment";
const menuIndex: React.FC<{ currentUser: any }> = (props) => {
const { currentUser } = props
@@ -11,48 +14,69 @@ const menuIndex: React.FC<{ currentUser: any }> = (props) => {
const formRef = useRef();
// 打开新增的悬浮框
const [openAddModal, setOpenAddModal] = useState(false)
- // 显示新增和编辑的悬浮框
-
-
+ // 行数据
+ const [currentRow, setCurrentRow] = useState()
+ // 表格默认隐藏字段
+ const [columnsStateMap, setColumnsStateMap] = useState({
+ menuCode: { show: false },
+ createdAt: { show: false },
+ })
// 表格组件
const columns: any = [
{
- title: "菜单名称",
+ title: 菜单名称
,
dataIndex: "menuName",
width: 300,
hideInSearch: true,
},
{
- title: "菜单图标",
+ title: 菜单编号
,
+ dataIndex: "menuCode",
+ width: 300,
+ hideInSearch: true,
+ },
+ {
+ title: 菜单图标
,
dataIndex: "menuIcon",
width: 120,
hideInSearch: true,
},
{
- title: "菜单索引",
- dataIndex: "id",
- width: 180,
+ title: 菜单索引
,
+ dataIndex: "sortOrder",
+ align: 'center',
+ width: 100,
hideInSearch: true,
},
{
- title: '状态',
+ title: 状态
,
dataIndex: 'hidden',
hideInSearch: true,
- width: 180,
+ width: 100,
+ render: (_, record) => {
+ return record?.hidden ? '隐藏' : '显示'
+ }
},
{
- title: '说明',
- dataIndex: 'desc',
+ title: 创建时间
,
+ dataIndex: 'createdAt',
width: 200,
- hideInSearch: true
+ hideInSearch: true,
+ render: (_, record) => {
+ return record?.createdAt ? moment(record?.createdAt).format('YYYY-MM-DD HH:mm:ss') : ""
+ }
},
{
- title: '操作',
+ title: 操作
,
dataIndex: 'option',
valueType: 'option',
hideInDescriptions: true,
- width: 260,
- render: (_, record) => { }
+ width: 100,
+ render: (_, record) => {
+ return
+
+
+ }
}
]
// 表格子集的columns
@@ -97,6 +121,23 @@ const menuIndex: React.FC<{ currentUser: any }> = (props) => {
}
]
+ // 模块列表
+ const expandedRowRender = (data: any) => {
+ console.log('data', data);
+
+ return (data && data.length > 0 ?
+
+ : [])
+ }
+
return (
= (props) => {
formRef={formRef}
columns={columns}
bordered
- expandable={{
- expandRowByClick: true
- }}
rowKey={(record) => {
return `${record?.id}`
}}
@@ -132,7 +170,18 @@ const menuIndex: React.FC<{ currentUser: any }> = (props) => {
]
}}
+ expandable={{
+ expandRowByClick: true,
+ // expandedRowRender
+ }}
+ columnsState={{
+ value: columnsStateMap,
+ onChange: setColumnsStateMap,
+ }}
/>
+
+
+
)
}
diff --git a/src/pages/setting/menu/service.ts b/src/pages/setting/menu/service.ts
index a687c7d..61383f2 100644
--- a/src/pages/setting/menu/service.ts
+++ b/src/pages/setting/menu/service.ts
@@ -1,10 +1,16 @@
import request from "@/utils/request"
-// 拿到类别列表接口
+// 拿到菜单列表数据
export async function handleGetMenuList(params?: any) {
const data = await request.get('/menus/getAll', { params })
if (data.code === 200) {
return data.data
}
return []
+}
+
+// 新增菜单
+export async function handleAddMenus(params?: any) {
+ const data = await request.post('/menus', params)
+ return data
}
\ No newline at end of file