diff --git a/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx b/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx index caf5c09..d1d7fb1 100644 --- a/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx +++ b/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx @@ -97,7 +97,7 @@ function ModalAreaAdd(props) { rules={[ { required: true }, { max: 20, message: "编码长度不能大于20位" }, - { pattern: new RegExp('/^[a-zA-Z0-9]+$/', 'g'), message: '编码为英文大小写或数字' } + { pattern: new RegExp(/^[a-zA-Z0-9]+$/, 'g'), message: '编码为英文大小写或数字' } ]}> @@ -108,7 +108,7 @@ function ModalAreaAdd(props) { rules={[ { required: true }, { max: 20, message: "编码长度不能大于20位" }, - { pattern: new RegExp('/^[a-zA-Z0-9]+$/', 'g'), message: '编码为英文大小写或数字' } + { pattern: new RegExp(/^[a-zA-Z0-9]+$/, 'g'), message: '编码为英文大小写或数字' } ]}> diff --git a/src/pages/SystemMgm/AreaManage/loadable.jsx b/src/pages/SystemMgm/AreaManage/loadable.jsx index e457fec..88cfcf8 100644 --- a/src/pages/SystemMgm/AreaManage/loadable.jsx +++ b/src/pages/SystemMgm/AreaManage/loadable.jsx @@ -178,7 +178,7 @@ function AreaManage() { level > 2 ? <> {/* handleAreaAdd({level, pid, isCity: false})} /> */} handleAreaDel({ name, id, children })} /> - handleAreaEdit({ name, id, virtually_code, code, lng_lat })} /> + handleAreaEdit({ name, id, virtually_code, code, lng_lat, type })} /> > : null } > diff --git a/src/pages/SystemMgm/OrgnizationMgm/loadable.jsx b/src/pages/SystemMgm/OrgnizationMgm/loadable.jsx index e47b385..a5d0e31 100644 --- a/src/pages/SystemMgm/OrgnizationMgm/loadable.jsx +++ b/src/pages/SystemMgm/OrgnizationMgm/loadable.jsx @@ -1,6 +1,7 @@ import React, { useState, useRef, useEffect, useMemo } from "react"; import { message, Input, Upload, Modal, Space, Tree, Tabs, Form, Select, Button, Cascader } from "antd"; import { DeleteOutlined, EditOutlined, PlusCircleOutlined, LoadingOutlined, PlusOutlined } from '@ant-design/icons'; +import cloneDeep from 'lodash/cloneDeep' import ajax from "@/services" import "./index.scss"; @@ -16,6 +17,7 @@ function OrgnizationMgm() { const [imgUrl, setImgUrl] = useState("") const [orgTree, setOrgTree] = useState([]) const [areaTree, setAreaTree] = useState([]) + const [defaultAreaTree, setDefaultAreaTree] = useState([]) const [activeOrg, setActiveOrg] = useState({}) const [roleTree, setRoleTree] = useState([]) const [roleCheckedKeys, setRoleCheckedKeys] = useState([]) @@ -23,18 +25,33 @@ function OrgnizationMgm() { const [orgModalVisible, setOrgModalVisible] = useState(false) //组织树新增&修改弹窗 const [orgEditStatus, setOrgEditStatus] = useState(true) //组织树新增修改状态 const [activeOrgTree, setActiveOrgTree] = useState({ isTop: true }) + const [departTree, setDepartTree] = useState([]) const [baseForm] = Form.useForm() const [orgForm] = Form.useForm() + const [areaTreeUpdate, setAreaTreeUpdate] = useState(1) const imgUploadUrl = () => { - return isDev ? `http://10.10.128.65:3001/mock/11/v1/controlalarm/upload_image` : `${baseApi}/v1/controlalarm/upload_image` + // https://acb-pre.xihaianparking.com:28181/PMS/api/manage/com/get_depart_menu_tree?id=1777877974658410516 + // return isDev ? `http://10.10.128.65:3001/mock/11/v1/controlalarm/upload_image` : `${baseApi}/v1/controlalarm/upload_image` + return isDev ? `http://10.10.128.65:3001/mock/11/v1/controlalarm/upload_image` : `${baseApi}/api/controlalarm/upload_image` } const getAreaTree = () => { - ajax.getDepartName().then((e) => { + ajax.getAreaTree().then((e) => { if (e.status == 20000) { - setAreaTree(e.data) + setAreaTree([...e.data]) + setDefaultAreaTree([...e.data]) setDefaultTreeActiveKey([e.data[0].id]) + getRoleTree(e.data[0].id) + } + }) + } + + const getDepartTree = () => { + ajax.getDepartName().then((e) => { + if (e.status == 20000) { + setDepartTree(e.data) + // setDefaultTreeActiveKey([e.data[0].id]) } }) } @@ -63,6 +80,7 @@ function OrgnizationMgm() { } const getOrgTree = () => { + setOrgTree([]) ajax.getOrgTree().then((e) => { if (e.status == 20000) { testTemp = e.data @@ -77,7 +95,8 @@ function OrgnizationMgm() { e.nativeEvent.stopImmediatePropagation() orgForm.setFieldsValue({ id: undefined, - 'depart_id': pid ? [pid, id] : [id], + // 'depart_id': pid ? [pid, id] : [id+""], + "depart_id": recursionFindIdPath([...departTree], id), name: '', level: Number(level) + 1 }) @@ -104,12 +123,11 @@ function OrgnizationMgm() { }) } const handleOrgEdit = (e, { isTop, level, pid, id, name }) => { - console.log(isTop); e.stopPropagation() e.nativeEvent.stopImmediatePropagation() orgForm.setFieldsValue({ id: id, - 'depart_id': pid ? [pid, id] : [id], + 'depart_id': recursionFindIdPath([...departTree], id), 'name': name }) setActiveOrgTree({ isTop: isTop }) @@ -117,6 +135,29 @@ function OrgnizationMgm() { setOrgEditStatus(true) } + const recursionFindIdPath = (data, id, path=[]) => { + for (let item of data) { + if (item.id === id) { + // 如果找到目标id,则返回当前路径 + return path + } + path.push(item.id); // 将当前节点的name添加到路径中 + + if (Array.isArray(item.children) && item.children.length > 0) { + // 如果当前节点有子节点,则递归搜索子节点 + const result = recursionFindIdPath(item.children, id, path); + if (result) { + // 如果在子节点中找到目标id,则返回结果 + return result; + } + } + + path.pop(); // 如果当前节点及其子节点中没有找到目标id,则从路径中移除当前节点 + } + + return null; // 如果在数组中未找到目标id,则返回null + } + const ajaxOrgDetailSave = (data) => { return new Promise((resolved, rejected) => { ajax.orgDetailEdit(data).then((e) => { @@ -154,7 +195,6 @@ function OrgnizationMgm() { ajax.saveAreaTree(data).then((e) => { if (e.status == 20000) { resolved(e.message) - message.success(e.message) }else{ message.error(e.message) } @@ -205,7 +245,7 @@ function OrgnizationMgm() { }) baseForm.setFieldsValue({ platform: data.platform, - control_type: data.control_type, + control_type: data.control_type || "", control_area: data.control_area, img_url: data.img_url }) @@ -296,12 +336,35 @@ function OrgnizationMgm() { }) } + const handleControlTypeChange = (val) => { + const copyData = cloneDeep([...defaultAreaTree]) + let data = recursionAreaTree([...copyData], val) + setAreaTree(data) + setAreaTreeUpdate(areaTreeUpdate+1) + } + + const recursionAreaTree = (treeData, controlType) => { + const data = [...treeData] + return data.map(item => { + if (item.children) { + if ((controlType == 1 && item.level < 2) || (controlType == 2 && item.level < 3)) { + item.children = recursionAreaTree(item.children, controlType) + } else { + item.children = [] + } + } + return item + }) + } + const formatAreaTree = (data, controlType) => { + const copyData = [...data] + recursionAreaTree(copyData, controlType) + return copyData + } + const handleOrgConfirm = () => { orgForm.validateFields().then((data) => { let arr =data.depart_id - console.log(arr); - // let strArr=arr.map(num=>parseInt(num)) - console.log(arr.at(-2)); if (data.id) { ajaxAreaEdit(Object.assign({}, { id: data.id, @@ -311,6 +374,7 @@ function OrgnizationMgm() { message.success(msg) setOrgModalVisible(false) getAreaTree() + getOrgTree() }).catch((err) => { message.error(err) }) @@ -323,10 +387,13 @@ function OrgnizationMgm() { message.success(msg) setOrgModalVisible(false) getAreaTree() + getOrgTree() }).catch((err) => { message.error(err) }) } + }).catch((err) => { + console.error(err) }) } @@ -335,6 +402,7 @@ function OrgnizationMgm() { } const tabRender = useMemo(() => { + // console.log(areaTree) return [ { label: `基础配置`, @@ -389,7 +457,7 @@ function OrgnizationMgm() { { activeOrg.level > 1 ? <> - + handleControlTypeChange(v)}> 按区管理 按街管理 @@ -399,7 +467,7 @@ function OrgnizationMgm() { disabled={!editStatus} checkable defaultCheckedKeys={getAreaDefaultKeys()} - treeData={areaTree} + treeData={[...areaTree]} onCheck={handleAreaTreeChange} fieldNames={{ title: 'name', @@ -436,11 +504,16 @@ function OrgnizationMgm() { ), } : undefined ] - }, [JSON.stringify(activeOrg), editStatus, imgUrl, roleCheckedKeys]) + }, [JSON.stringify(activeOrg), editStatus, imgUrl, roleCheckedKeys, areaTreeUpdate]) + + useEffect(() => { + setAreaTreeUpdate(areaTreeUpdate+1) + }, [JSON.stringify(areaTree)]) useEffect(() => { getOrgTree() getAreaTree() + getDepartTree() // getRoleTree() }, []) @@ -466,17 +539,22 @@ function OrgnizationMgm() { return <> - - + { + orgTree.length ? ( + + + ) : (<>>) + } - + { !orgEditStatus || (orgEditStatus && !activeOrgTree.isTop) ? ( { return [...labelArr].pop() }} + changeOnSelect multiple={false} onChange={(v) => console.log(v)} fieldNames={{