From 76740bb992484140342ba9c664f9bf4e277db459 Mon Sep 17 00:00:00 2001 From: sunyu Date: Fri, 11 Jul 2025 09:06:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=93=81=E7=B1=BB=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/CategoryMaintenance.tsx | 233 +++++++++++++++++ src/pages/CategoryManagement/index.tsx | 238 ++++++++++++++++++ src/pages/CategoryManagement/service.ts | 99 ++++++++ 3 files changed, 570 insertions(+) create mode 100644 src/pages/CategoryManagement/components/CategoryMaintenance.tsx create mode 100644 src/pages/CategoryManagement/index.tsx create mode 100644 src/pages/CategoryManagement/service.ts diff --git a/src/pages/CategoryManagement/components/CategoryMaintenance.tsx b/src/pages/CategoryManagement/components/CategoryMaintenance.tsx new file mode 100644 index 0000000..908958e --- /dev/null +++ b/src/pages/CategoryManagement/components/CategoryMaintenance.tsx @@ -0,0 +1,233 @@ +import React, { useState, useRef, useEffect } from 'react'; +import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table'; +import { Button, Select, Modal, Form, Input, message, Spin, TreeSelect } from 'antd'; +import {getTreeList, addCategory, updateCategory, deleteCategory} from '../service'; +import { useLocation } from 'umi'; + +const CategoryList: React.FC = () => { + const [form] = Form.useForm(); + const [searchForm] = Form.useForm(); + const [openModal, setOpenModal] = useState(false); + const [currentRecord, setCurrentRecord] = useState(null); + const [treeData, setTreeData] = useState([]); + const [loading, setLoading] = useState(true); + const [expandedKeys, setExpandedKeys] = useState([]); + const actionRef = useRef(); + const location = useLocation(); + const versionId = location.state?.versionId; + + interface DictType { + value: string; + label: string; + } + const version_status: DictType[] = [ + { value: 1, label: '启用' }, + { value: 0, label: '停用' }, + ]; + + useEffect(() => { + fetchData(); + }, []); + + const fetchData = async () => { + try { + setLoading(true); + const response = await getTreeList({ versionId }); + setTreeData(response.data || []); + } catch (error) { + message.error('数据加载失败'); + } finally { + setLoading(false); + } + }; + + const handleSearch = () => { + const values = searchForm.getFieldsValue(); + // 实际应传递查询参数,此处简化 + fetchData(); + }; + + const handleReset = () => { + searchForm.resetFields(); + fetchData(); + }; + + const renderOperation = (_, record) => { + if (record.level === 1) return null; // 一级节点无操作 + return ( + <> + + + + ); + }; + + const handleEdit = (record: any) => { + form.setFieldsValue({ + id: record.id, + parentId: record.parentId, + categoryName: record.categoryName, + status: record.status, + code: record.code, + }); + setCurrentRecord(record); + setOpenModal(true); + }; + + const handleAdd = () => { + form.resetFields(); + setCurrentRecord(null); + setOpenModal(true); + }; + + const handleDelete = async (id: string) => { + Modal.confirm({ + title: '确认删除?', + onOk: async () => { + await deleteCategory(id).then((r: any) => { + if (r?.code == 200) { + message.success('删除成功'); + fetchData(); + } else { + message.error('删除失败'); + } + }) + .finally(() => actionRef.current?.reload()); + }, + }); + }; + + const handleSubmit = async () => { + try { + console.log("--------------"); + console.log(versionId); + const values = await form.validateFields(); + values.versionId = versionId; + console.log(values,"") + const isEdit = !!values.id; + const result = isEdit + ? await updateCategory(values) + : await addCategory({ ...values }); + if (result.code === 200) { + message.success(isEdit ? '编辑成功' : '新增成功'); + setOpenModal(false); + fetchData(); + } + } catch (error) { + console.log(error); + message.error('操作失败'); + } + }; + + // 构建父节点树形数据(递归生成) + const buildParentTree = (data: any[]): any[] => { + return data.map(node => ({ + value: node.id, + title: node.categoryName, + children: node.children && buildParentTree(node.children), + })); + }; + + return ( + + {/* 查询区域:条件靠左,按钮靠右 */} +
+
+ + + + + + +
+
+ + +
+
+ + {/* 树表格 */} + { + if (record.status === 1) { + return (<>启用) + } else { + return (<>停用) + } + } + }, + { title: '更新时间', dataIndex: 'updateDate', valueType: 'dateTime' }, + { title: '操作', valueType: 'option', render: renderOperation } + ]} + treeData={true} + dataSource={treeData} + rowKey="id" + expandedRowKeys={expandedKeys} + onExpand={(expanded, record) => { + setExpandedKeys(prev => + expanded ? [...prev, record.id] : prev.filter(key => key !== record.id) + ); + }} + toolBarRender={() => ( + + )} + pagination={false} + /> + + {/* 新增/编辑模态框 */} + setOpenModal(false)} + width={600} + > +
+ {/* 新增时显示父节点树形选择(支持搜索) */} + + + {!currentRecord && ( + + + + )} + + + + + + + + + +
+
+
+ ); +}; + +export default CategoryList; diff --git a/src/pages/CategoryManagement/index.tsx b/src/pages/CategoryManagement/index.tsx new file mode 100644 index 0000000..fff3f35 --- /dev/null +++ b/src/pages/CategoryManagement/index.tsx @@ -0,0 +1,238 @@ +import React, {useRef, useState} from 'react'; +import ProTable, {ActionType, ProColumns} from '@ant-design/pro-table'; +import { getPage,getDataById,deleteVersion,addVersion,updateVersion } from './service'; +import {Button, Form, Input, message, Modal, PageHeader, Select, Spin} from 'antd'; +import { history } from 'umi'; +import TextArea from "antd/lib/input/TextArea"; +import {getDicData} from "@/utils/session"; + +const NoticeList: React.FC<{}> = () => { + const [title, setTitle] = useState(''); + const [open, setOpen] = useState(false); + + const [spin, spinSet] = useState(false); + const actionRef = useRef(); + const [form] = Form.useForm(); + //获取字典 + const getDict: any = getDicData(); + //查询分页数据 + const [pageData, pageDataSet] = useState({ + pageNo: 1, + pageSize: 10 + }); + const layout = { + labelCol: { span: 6 }, + wrapperCol: { span: 13 }, + }; + const dictData = JSON.parse(getDict); + interface DictType { + value: string; + label: string; + } + const version_status: DictType[] = [ + { value: 1, label: '启用' }, + { value: 0, label: '停用' }, + ]; + + //委托列表 + const columns: ProColumns[] = [ + { title: '序号', valueType: 'index', width: 50, }, + { title: '名称', dataIndex: 'name',width: '10%' },//, ellipsis: true + { title: '版本', dataIndex: 'version', width: '10%' }, + { title: '创建时间', dataIndex: 'createDate', width: '10%', valueType: 'dateTime', search: false }, + { title: '创建人', dataIndex: 'createBy', width: '10%' }, + { title: '最后修改时间', dataIndex: 'updateDate', width: '10%', valueType: 'dateTime', search: false }, + { title: '修改人', dataIndex: 'updateBy', width: '10%'}, + { title: '状态', dataIndex: 'status', width: '10%', + valueEnum: { '1': { text: '启用', status: '1' }, }, + render: (_, record) => { + if (record.status === 1) { + return (<>启用) + } else { + return (<>停用) + } + } + }, + { + title: '操作', width: '9%', + valueType: 'option', + render: (_, record) => [ + , + , + + ] + }, + ]; + + const handleSubmit = async () => { + console.log("提交按钮触发") + try { + const values = await form.validateFields(); + if (values.id) { + await updateVersion(values).then((r: any) => { + if (r?.code == 200) { + message.success('修改成功'); + } else { + message.error('修改失败'); + } + }); + } else { + + await addVersion(values).then((r: any) => { + if (r?.code == 200) { + message.success('新增成功'); + } else { + message.error('新增失败'); + } + }); + } + closeModal(); + } catch (error) { + console.log("错误失败!") + console.error(error); + } + }; + + const checkSupModal = ( + setOpen(false)}>关闭} + onOk={handleSubmit} + onCancel={() => closeModal()} + > +
+ + + + + + + + + + + +