feat(mkmjPassage): 新增通道名称唯一性校验功能

- 在新增和编辑通道时增加名称重复检查
- 调整通道类型和状态字段为字符串形式
-优化表单项布局与渲染逻辑- 移除不必要的组件引用和冗余代码- 改进地图组件使用方式及位置展示逻辑- 更新列表数据显示格式并增强可读性
master
fangjiakai 2025-11-18 10:01:29 +08:00
parent aa6a44789d
commit b15c8696b7
6 changed files with 62 additions and 35 deletions

View File

@ -23,3 +23,5 @@ export const mkmjPassageBatchDelete = declareRequest(
export const mkmjPassageInfo = declareRequest('mkmjPassageLoading', 'Get > /primeport/mkmjPassage/{id}');
export const getStatistics = declareRequest('mkmjPassageLoading', 'Post > @/primeport/mkmjPassage/statistics');
export const hasName = declareRequest('mkmjPassageLoading','Get > /primeport/mkmjPassage/hasName/{name}')

View File

@ -182,8 +182,8 @@ function AddModalComponent(props) {
if (props.currentId) {
props["mkmjAreaInfo"]({id: props.currentId}).then((res) => {
form.setFieldsValue({...res.data,
areaType: Number(res.data.areaType),
areaStatus: Number(res.data.areaStatus),
areaType: res.data.areaType + "",
areaStatus: res.data.areaStatus + "",
});
});
}

View File

@ -176,9 +176,9 @@ function AddModalComponent(props) {
if (props.currentId) {
props["mkmjAreaGateInfo"]({id: props.currentId}).then((res) => {
form.setFieldsValue({...res.data,
gateType: Number(res.data.gateType),
gateStatus: Number(res.data.gateStatus),
gateCategory: Number(res.data.gateCategory),
gateType: res.data.gateType + "",
gateStatus: res.data.gateStatus + "",
gateCategory: res.data.gateCategory + "",
});
});
}

View File

@ -10,7 +10,6 @@ import { NS_MKMJGATEVIDEO } from "~/enumerate/namespace";
import AddIcon from "zy-react-library/components/Icon/AddIcon";
import DeleteIcon from "zy-react-library/components/Icon/DeleteIcon";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import Map from "zy-react-library/components/Map";
import HeaderBack from "zy-react-library/components/HeaderBack";

View File

@ -1,5 +1,5 @@
import {Connect} from "@cqsjjb/jjb-dva-runtime";
import {Button, Form, message, Modal, Space, Descriptions} from "antd";
import {Button, Descriptions, Form, message, Modal, Space} from "antd";
import {useEffect, useState} from "react";
import FormBuilder from "zy-react-library/components/FormBuilder";
import Search from "zy-react-library/components/Search";
@ -9,7 +9,6 @@ import useTable from "zy-react-library/hooks/useTable";
import {NS_MKMJPASSAGE} from "~/enumerate/namespace";
import AddIcon from "zy-react-library/components/Icon/AddIcon";
import DeleteIcon from "zy-react-library/components/Icon/DeleteIcon";
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
import Map from "zy-react-library/components/Map";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import LocationIcon from "zy-react-library/components/Icon/LocationIcon";
@ -85,11 +84,21 @@ function MkmjPassage(props) {
)}
columns={[
{dataIndex: "passageName", title: "通道名称"},
{dataIndex: "passageType", title: "通道类型",render: (_, record) => record.passageType === 1 ? "人行通道" : record.passageType === 2 ? "车行通道" : "综合通道"},
{dataIndex: "passageStatus", title: "通道状态",render: (_, record) => record.passageStatus === 0 ? "停用" : record.passageStatus === 1 ? "正常" : "暂时关闭"},
{dataIndex: "gateNum", title: "视频个数",render:(_,record)=>{
{
dataIndex: "passageType",
title: "通道类型",
render: (_, record) => record.passageType === 1 ? "人行通道" : record.passageType === 2 ? "车行通道" : "综合通道"
},
{
dataIndex: "passageStatus",
title: "通道状态",
render: (_, record) => record.passageStatus === 0 ? "停用" : record.passageStatus === 1 ? "正常" : "暂时关闭"
},
{
dataIndex: "gateNum", title: "视频个数", render: (_, record) => {
return record.gateNum || 0;
}},
}
},
{
title: "操作",
align: "center",
@ -170,12 +179,21 @@ function MkmjPassage(props) {
function AddModalComponent(props) {
const [form] = Form.useForm();
const hasName = async (rule, value) => {
const {data} = await props["hasName"]({name: value})
if (data && data.id !== props.currentId) {
return Promise.reject(new Error('通道名已存在'))
}
return Promise.resolve();
}
useEffect(() => {
if (props.currentId) {
props["mkmjPassageInfo"]({id: props.currentId}).then((res) => {
form.setFieldsValue({...res.data,
passageType: Number(res.data.passageType),
passageStatus: Number(res.data.passageStatus),
form.setFieldsValue({
...res.data,
passageType: res.data.passageType + "",
passageStatus: res.data.passageStatus + "",
});
});
}
@ -185,7 +203,11 @@ function AddModalComponent(props) {
props.onCancel();
};
const submit = async (values) => {
await props[!props.currentId ? "mkmjPassageAdd" : "mkmjPassageEdit"]({...values, areaId: props.areaId, id: props.currentId});
await props[!props.currentId ? "mkmjPassageAdd" : "mkmjPassageEdit"]({
...values,
areaId: props.areaId,
id: props.currentId
});
onCancel();
props.getData();
};
@ -205,7 +227,7 @@ function AddModalComponent(props) {
onFinish={submit}
showActionButtons={false}
options={[
{name: "passageName", label: "通道名称"},
{name: "passageName", label: "通道名称", rules: [{validator: hasName, trigger: 'blur'}]},
{name: "passageType", label: "通道类型", render: FORM_ITEM_RENDER_ENUM.SELECT, items: PASSAGE_TYPE},
{name: "passageStatus", label: "通道状态", render: FORM_ITEM_RENDER_ENUM.SELECT, items: PASSAGE_STATUS},
{key: "map", customizeRender: true, render: <Map/>}
@ -240,11 +262,19 @@ function InfoModalComponent(props) {
bordered
items={[
{children: info.passageName, label: "通道名称"},
{children: info.passageType===1?"人行通道":info.passageType===2?"车行通道":"综合通道", label: "通道类型"},
{children: info.passageStatus===0?"停用":info.passageStatus===1?"正常":"暂时关闭", label: "通道状态"},
{children: <LocationIcon onClick={() => {
{
children: info.passageType === 1 ? "人行通道" : info.passageType === 2 ? "车行通道" : "综合通道",
label: "通道类型"
},
{
children: info.passageStatus === 0 ? "停用" : info.passageStatus === 1 ? "正常" : "暂时关闭",
label: "通道状态"
},
{
children: <LocationIcon onClick={() => {
setMapVisible(true);
}}/>, label: "位置"},
}}/>, label: "位置"
},
]}
/>

View File

@ -34,10 +34,6 @@ function MkmjPassage(props) {
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [listData, setListData] = useState([]);
const getStatistics = async (ids) => {
const { data } = await props["getStatistics"]({ ids })
setStatistics(data)
}
const [form] = Form.useForm();
const {tableProps, getData} = useTable(props["mkmjPassageList"], {