fix(api):task crud

This commit is contained in:
wang_yp 2024-09-26 17:59:25 +08:00
parent ba59eadd34
commit 35ec46e38c
17 changed files with 1077 additions and 21 deletions

View File

@ -5,10 +5,12 @@ export enum FormType {
select = "select",
editor = "editor",
date = "date",
map = "map",
textarea = "textarea",
radio = "radio",
upload = "upload",
cehckbox = "checkbox",
cehckboxGroup = "checkboxGroup",
password = "password",
}
@ -19,6 +21,7 @@ export interface FormDatas {
value: any,
selectUrl?: string,
selectList?: Array<selectItem>
checkboxData?: Array<any>,
rules: Array<rules>
}

View File

@ -4,6 +4,7 @@ import { FormType, SimpleFormData } from "./interface";
import { FormSelect } from "./select";
import AliUpload from "../ali_upload";
import MyEditor from "../edittor";
import MapFrom from "../map/MapFrom";
const { TextArea } = Input;
const SimpleForm = (props: SimpleFormData) => {
const [form] = Form.useForm();
@ -28,9 +29,7 @@ const SimpleForm = (props: SimpleFormData) => {
onFinish={onFinish}
autoComplete="on"
>
{
props.children??props.children
}
{props.children ?? props.children}
{props.formDatas.map((v) => {
switch (v.type) {
case FormType.input:
@ -66,6 +65,23 @@ const SimpleForm = (props: SimpleFormData) => {
<Checkbox>Remember me</Checkbox>
</Form.Item>
);
case FormType.cehckboxGroup:
return (
<Form.Item
key={v.label}
label={v.label}
name={v.name}
rules={v.rules}
>
<Checkbox.Group
options={v.checkboxData}
defaultValue={["Pear"]}
onChange={(res) => {
form.setFieldValue(v.name, res);
}}
/>
</Form.Item>
);
case FormType.select:
return FormSelect(v);
case FormType.upload:
@ -149,6 +165,19 @@ const SimpleForm = (props: SimpleFormData) => {
<DatePicker />
</Form.Item>
);
case FormType.map:
return (
<Form.Item
key={v.label}
label={v.label}
name={v.name}
rules={v.rules}
>
<MapFrom onChange={(m)=>{
form.setFieldValue(v.name, m);
}}/>
</Form.Item>
);
default:
return (
<Form.Item
@ -162,8 +191,6 @@ const SimpleForm = (props: SimpleFormData) => {
);
}
})}
</Form>
);
};

View File

@ -0,0 +1,65 @@
import { useEffect, useState } from "react";
import AMapLoader from "@amap/amap-jsapi-loader";
export default function MapFrom(props:any) {
let [amap, setmaps] = useState<any>(null);
useEffect(() => {
loadMaps();
return () => {
amap?.destroy();
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const loadMaps = async () => {
const Amap = await AMapLoader.load({
key: "d58999d072ed7e5897d3900a769cfda0", // 申请好的Web端开发者Key首次调用 load 时必填
version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
plugins: ["AMap.Scale", "AMap.AutoComplete", "AMap.PlaceSearch"],
});
amap = new Amap.Map("mapFrom", {
viewMode: "2D", // 是否为3D地图模式
zoom: 11, // 初始化地图级别
center: [103.55, 30.34], // 初始化地图中心点位置
});
Amap.plugin(["AMap.PlaceSearch", "AMap.AutoComplete"], function () {
var auto = new Amap.AutoComplete({ input: "tipinput" });
var placeSearch = new Amap.PlaceSearch({ map: amap }); //构造地点查询类
auto.on("select", (e) => {
placeSearch.setCity(e.poi.adcode);
placeSearch.search(e.poi.name); //关键字查询查询
}); //注册监听,当选中某条记录时会触发
});
var markers = []
Amap.plugin(["AMap.MouseTool"], function () {
var mouseTool = new Amap.MouseTool(amap);
// 开启坐标选择功能
mouseTool.on("draw", function (event) {
var lnglat = event.obj.getBounds().getCenter(); // 获取图形的中心点坐标
console.log("选择的坐标是:", lnglat.lng, lnglat.lat);
markers = mouseTool.overlays.marker
props.onChange({lng:lnglat.lng,lat:lnglat.lat})
var mk = []
for (let index = 0; index < markers.length-1; index++) {
mk.push(markers[index])
}
amap.remove(mk);
});
mouseTool.marker();
});
setmaps(Amap);
};
return (
<div style={{ height: "400px", width: "400px" }}>
<div style={{ position: "relative" }}>
<div id="mapFrom" style={{ height: "400px", width: "400px" }}></div>
<input
style={{ position: "absolute", right: "5px", top: "5px" }}
id="tipinput"
/>
</div>
</div>
);
}

View File

@ -140,7 +140,7 @@ const Dep = (props: Store) => {
formRef.current?.setFieldsValue(record);
}}
formName="card_basic"
colProps={4}
colProps={25}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}

View File

@ -0,0 +1,200 @@
import { Button, Space, Modal, FormInstance } from "antd";
import { inject, observer } from "mobx-react";
import type { ColumnsType } from "antd/es/table";
import BTable from "@/components/b_table";
import { useEffect, useState } from "react";
import { UserDataType } from "@/model/userModel";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { FormType } from "@/components/form/interface";
import baseHttp from "@/service/base";
const Emergency = (props: Store) => {
const { emergencyStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
const [tagId, setId] = useState<Number | null>(null);
const [userList, setUserList] = useState<Array<any>>([]);
const columns: ColumnsType<UserDataType> = [
{ title: "应急处突名称", dataIndex: "emergency_name" },
{ title: "目标位置", dataIndex: "target_location" },
{ title: "目标精度", dataIndex: "long" },
{ title: "目标纬度", dataIndex: "lat" },
{ title: "任务描述", dataIndex: "desc" },
{
title: "完成状态",
dataIndex: "status",
render: (accomplish) =>
accomplish.status === 0 ? (
<span style={{ color: "green" }}></span>
) : (
<span style={{ color: "red" }}></span>
),
},
{
title: "操作",
dataIndex: "id",
render: (any, record) => (
<Space wrap>
<Button
type="dashed"
size="small"
onClick={() => {
edit(record);
}}
>
</Button>
<Button
type="dashed"
size="small"
onClick={() => {
emergencyStore.deleteItem(record.id);
}}
>
</Button>
<Button
type="dashed"
danger
size="small"
onClick={() => {
dele(record)
}}
>
</Button>
</Space>
),
},
];
const dele = (record)=>{
emergencyStore.deleteItem(record.identity);
}
const edit = (record) => {
setProjectConfig(defaultConfig);
setIsModalOpen(true);
formRef.current?.setFieldsValue(record);
setRecord(record);
setId(record.id);
};
const onFinish = (values: any) => {
let data = {
...values,
long: values.marker["lng"],
lat: values.marker["lat"],
};
if (!tagId) {
emergencyStore.add(data);
} else {
emergencyStore.putItem(tagId, data);
}
setIsModalOpen(false);
};
useEffect(() => {
emergencyStore.getlist();
baseHttp.get("/user/list", null).then((res) => {
let data = res.data?.record ?? [];
data.forEach((item) => {
item.label = item.account;
item.value = item.identity;
});
setUserList(data ?? []);
});
}, [emergencyStore]);
const defaultConfig = [
{
type: FormType.input,
label: "处突名称",
name: "emergency_name",
value: "",
rules: [{ required: true, message: "请输入处突名称!" }],
},
{
type: FormType.input,
label: "任务描述",
name: "desc",
value: "",
rules: [{ required: true, message: "请输入任务描述!" }],
},
{
type: FormType.input,
label: "目标位置",
name: "target_location",
value: "",
rules: [{ required: true, message: "请输入任务描述!" }],
},
{
type: FormType.map,
label: "坐标信息",
name: "marker",
value: "",
rules: [{ required: true, message: "请输入任务描述!" }],
},
{
type: FormType.cehckboxGroup,
label: "参与人员选择",
name: "user_id",
value: [],
checkboxData: userList,
rules: [{ required: true, message: "请选择参与人员!" }],
},
];
const onFinishFailed = () => {};
// 用户选择回调
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button
type="default"
onClick={() => {
setProjectConfig(defaultConfig);
setId(null);
setIsModalOpen(true);
}}
>
</Button>
</Space>
<BTable
store={emergencyStore}
columns={columns}
dataSource={emergencyStore.list}
/>
<Modal
title={!tagId ? "任务发布" : "任务编辑"}
width={1200}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={() => {
setId(null);
setIsModalOpen(false);
}}
>
<SimpleForm
formRef={formRef}
createCallback={() => {
formRef.current?.setFieldsValue(record);
}}
formName="card_basic"
colProps={25}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
/>
</Modal>
</Space>
</div>
);
};
export default inject("emergencyStore")(observer(Emergency));

224
src/pages/patrol/index.tsx Normal file
View File

@ -0,0 +1,224 @@
// const Patrol = ()=>{
// return <>
// <p>巡逻</p>
// </>
// }
// export default Patrol
import { Button, Space, Modal, FormInstance } from "antd";
import { inject, observer } from "mobx-react";
import type { ColumnsType } from "antd/es/table";
import BTable from "@/components/b_table";
import { useEffect, useState } from "react";
import { UserDataType } from "@/model/userModel";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { FormType } from "@/components/form/interface";
import baseHttp from "@/service/base";
import dayjs from "dayjs";
const Patrol = (props: Store) => {
const { patrolStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
const [tagId, setId] = useState<Number | null>(null);
const [userList, setUserList] = useState<Array<any>>([]);
const columns: ColumnsType<UserDataType> = [
{ title: "任务标题", dataIndex: "title" },
{ title: "任务描述", dataIndex: "patrol_desc" },
{ title: "任务地点", dataIndex: "address" },
{ title: "任务开始时间", dataIndex: "start_time" },
{ title: "任务结束时间", dataIndex: "end_time" },
{ title: "任务积分", dataIndex: "score" },
{
title: "完成状态",
dataIndex: "status",
render: (status) =>
status === 0 ? (
<span></span>
) : (
<span style={{ color: "red" }}></span>
),
},
{
title: "操作",
dataIndex: "id",
render: (any, record) => (
<Space wrap>
<Button
type="dashed"
size="small"
onClick={() => {
edit(record);
}}
>
</Button>
<Button
type="dashed"
size="small"
onClick={() => {
patrolStore.deleteItem(record.id);
}}
>
</Button>
<Button
type="dashed"
danger
size="small"
onClick={() => {
patrolStore.deleteItem(record.id);
}}
>
</Button>
</Space>
),
},
];
const edit = (record) => {
let data = {
...record,
start_time: dayjs(record.start_time),
end_time: dayjs(record.end_time),
};
setProjectConfig(defaultConfig);
setIsModalOpen(true);
formRef.current?.setFieldsValue(data);
setRecord(data);
setId(record.id);
};
const onFinish = (values: any) => {
let data = {
...values,
score: Number(values.score ?? 0),
};
if (!tagId) {
patrolStore.add(data);
} else {
patrolStore.putItem(tagId, data);
}
setIsModalOpen(false);
};
useEffect(() => {
patrolStore.getlist();
baseHttp.get("/user/list", null).then((res) => {
let data = res.data?.record ?? [];
data.forEach((item) => {
item.label = item.account;
item.value = item.identity;
});
setUserList(data ?? []);
});
}, [patrolStore]);
const defaultConfig = [
{
type: FormType.input,
label: "任务标题",
name: "title",
value: "",
rules: [{ required: true, message: "请输入任务标题!" }],
},
{
type: FormType.input,
label: "任务描述",
name: "patrol_desc",
value: "",
rules: [{ required: true, message: "请输入任务描述!" }],
},
{
type: FormType.input,
label: "巡逻地点",
name: "address",
value: "",
rules: [{ required: true, message: "请输入巡逻地点!" }],
},
{
type: FormType.date,
label: "开始时间",
name: "start_time",
value: "",
rules: [{ required: true, message: "请输入任务开始时间!" }],
},
{
type: FormType.date,
label: "任务结束时间",
name: "end_time",
value: "",
rules: [{ required: true, message: "请选择任务结束时间!" }],
},
{
type: FormType.input,
label: "任务积分设置",
name: "score",
value: "",
rules: [{ required: true, message: "请输入任务积分!" }],
},
{
type: FormType.cehckboxGroup,
label: "任务参与人",
name: "user_identity",
value: [],
checkboxData: userList,
rules: [{ required: true, message: "请选择参与人!" }],
},
];
const onFinishFailed = () => {};
// 用户选择回调
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button
type="default"
onClick={() => {
setProjectConfig(defaultConfig);
setId(null);
setIsModalOpen(true);
}}
>
</Button>
</Space>
<BTable
store={patrolStore}
columns={columns}
dataSource={patrolStore.list}
/>
<Modal
title={!tagId ? "任务发布" : "任务编辑"}
width={1200}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={() => {
setId(null);
setIsModalOpen(false);
}}
>
<SimpleForm
formRef={formRef}
createCallback={() => {
formRef.current?.setFieldsValue(record);
}}
formName="card_basic"
colProps={12}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
/>
</Modal>
</Space>
</div>
);
};
export default inject("patrolStore")(observer(Patrol));

View File

@ -0,0 +1,28 @@
import { Tabs, TabsProps } from "antd";
import Trainings from "./training";
import TrainingCat from "./trainingCat";
const Training = ()=>{
const onChange = (key: string) => {
console.log(key);
};
const items: TabsProps['items'] = [
{
key: '1',
label: '训练分类管理',
children: <TrainingCat />,
},
{
key: '2',
label: '训练任务管理',
children: <Trainings />
},
];
return (
<>
<Tabs defaultActiveKey="1" items={items} onChange={onChange} />
</>
);
}
export default Training

View File

@ -0,0 +1,230 @@
import { Button, Space, Modal, FormInstance, Form, Select } from "antd";
import { inject, observer } from "mobx-react";
import type { ColumnsType } from "antd/es/table";
import BTable from "@/components/b_table";
import { useEffect, useState } from "react";
import { UserDataType } from "@/model/userModel";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { FormType } from "@/components/form/interface";
import baseHttp from "@/service/base";
import dayjs from "dayjs";
const { Option } = Select;
const Trainings = (props: Store) => {
const { trainingStore, trainingCatStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
const [tagId, setId] = useState<Number | null>(null);
const [stashList, setStash] = useState<any>(null); // 仓库列表
const [userList, setUserList] = useState<Array<any>>([]);
const columns: ColumnsType<UserDataType> = [
{ title: "任务标题", dataIndex: "title" },
{ title: "任务描述", dataIndex: "desc" },
{ title: "任务地点", dataIndex: "address" },
{ title: "任务开始时间", dataIndex: "start_time" },
{ title: "任务结束时间", dataIndex: "end_time" },
{ title: "任务积分设置", dataIndex: "score" },
{ title: "任务类别", dataIndex: "category_identity" },
{
title: "操作",
dataIndex: "id",
render: (any, record) => (
<Space wrap>
<Button
type="dashed"
size="small"
onClick={() => {
edit(record);
}}
>
</Button>
<Button
type="dashed"
danger
size="small"
onClick={() => {
dele(record);
}}
>
</Button>
</Space>
),
},
];
const dele = (record) => {
trainingStore.deleteItem(record.identity);
};
const edit = (record) => {
let data = {
...record,
start_time: dayjs(record.start_time),
end_time: dayjs(record.end_time),
};
setProjectConfig(defaultConfig);
setIsModalOpen(true);
formRef.current?.setFieldsValue(data);
setRecord(data);
setId(record.id);
};
useEffect(() => {
trainingCatStore.getlist().then(() => {
setStash(trainingCatStore.list);
});
baseHttp.get("/user/list", null).then((res) => {
let data = res.data?.record ?? [];
data.forEach((item) => {
item.label = item.account;
item.value = item.identity;
});
setUserList(data ?? []);
});
}, [trainingCatStore]);
const onFinish = (values: any) => {
let data = {
...values,
score: Number(values.score),
};
if (!tagId) {
trainingStore.add(data);
} else {
trainingStore.putItem(tagId, data);
}
setIsModalOpen(false);
};
useEffect(() => {
trainingStore.getlist();
}, [trainingStore]);
const defaultConfig = [
{
type: FormType.input,
label: "任务标题",
name: "title",
value: "",
rules: [{ required: true, message: "请输入任务标题!" }],
},
{
type: FormType.input,
label: "任务描述",
name: "desc",
value: "",
rules: [{ required: true, message: "请输入任务描述!" }],
},
{
type: FormType.input,
label: "任务地点",
name: "address",
value: "",
rules: [{ required: true, message: "请输入任务地点!" }],
},
{
type: FormType.date,
label: "任务开始时间",
name: "start_time",
value: "",
rules: [{ required: true, message: "请输入任务开始时间!" }],
},
{
type: FormType.date,
label: "任务结束时间",
name: "end_time",
value: "",
rules: [{ required: true, message: "请输入任务结束时间!" }],
},
{
type: FormType.input,
label: "任务积分设置",
name: "score",
value: "",
rules: [{ required: true, message: "请输入任务积分设置!" }],
},
{
type: FormType.cehckboxGroup,
label: "参与人员选择",
name: "user_id",
value: [],
checkboxData: userList,
rules: [{ required: true, message: "请选择参与人员!" }],
},
];
const onFinishFailed = () => {};
// 用户选择回调
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button
type="default"
onClick={() => {
setProjectConfig(defaultConfig);
setId(null);
setIsModalOpen(true);
}}
>
</Button>
</Space>
<BTable
store={trainingStore}
columns={columns}
dataSource={trainingStore.list}
/>
<Modal
title={!tagId ? "任务发布" : "任务编辑"}
width={800}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={() => {
setId(null);
setIsModalOpen(false);
}}
>
<SimpleForm
formRef={formRef}
createCallback={() => {
formRef.current?.setFieldsValue(record);
}}
formName="card_basic"
colProps={25}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
>
<>
<Form.Item
key="category_identity"
label="训练类别"
name="category_identity"
rules={[{ required: true, message: "请选择训练类别!" }]}
>
<Select placeholder="">
{stashList?.map((v: any) => {
return (
<Option key={v.identity} value={v.identity}>
{v.name}
</Option>
);
})}
</Select>
</Form.Item>
</>
</SimpleForm>
</Modal>
</Space>
</div>
);
};
export default inject("trainingStore", "trainingCatStore")(observer(Trainings));

View File

@ -0,0 +1,154 @@
// const TrainingCat = () => {
// return (
// <>
// <p>训练分类管理</p>
// </>
// );
// };
// export default TrainingCat;
import { Button, Space, Modal, FormInstance } from "antd";
import { inject, observer } from "mobx-react";
import type { ColumnsType } from "antd/es/table";
import BTable from "@/components/b_table";
import { useEffect, useState } from "react";
import { UserDataType } from "@/model/userModel";
import { Store } from "antd/lib/form/interface";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { FormType } from "@/components/form/interface";
const TrainingCat = (props: Store) => {
const { trainingCatStore } = props;
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
const [projectConfig, setProjectConfig] = useState<any>([]);
const formRef = React.useRef<FormInstance>(null);
const [record, setRecord] = useState<any>(null);
const [tagId, setId] = useState<Number | null>(null);
const columns: ColumnsType<UserDataType> = [
{ title: "名称", dataIndex: "name" },
{ title: "任务描述", dataIndex: "desc" },
{
title: "操作",
dataIndex: "id",
render: (any, record) => (
<Space wrap>
<Button
type="dashed"
size="small"
onClick={() => {
edit(record);
}}
>
</Button>
<Button
type="dashed"
danger
size="small"
onClick={() => {
dele(record)
}}
>
</Button>
</Space>
),
},
];
const dele = (record)=>{
trainingCatStore.deleteItem(record.identity);
}
const edit = (record) => {
setProjectConfig(defaultConfig);
setIsModalOpen(true);
formRef.current?.setFieldsValue(record);
setRecord(record);
setId(record.id);
};
const onFinish = (values: any) => {
let data = {
...values,
};
if (!tagId) {
trainingCatStore.add(data);
} else {
trainingCatStore.putItem(tagId, data);
}
setIsModalOpen(false);
};
useEffect(() => {
trainingCatStore.getlist();
}, [trainingCatStore]);
const defaultConfig = [
{
type: FormType.input,
label: "分类名称",
name: "name",
value: "",
rules: [{ required: true, message: "请输入名称!" }],
},
{
type: FormType.input,
label: "描述",
name: "desc",
value: "",
rules: [{ required: true, message: "请输入描述!" }],
},
];
const onFinishFailed = () => {};
// 用户选择回调
return (
<div className="contentBox">
<Space direction="vertical" size="middle" style={{ display: "flex" }}>
<Space direction="horizontal" size={"middle"}>
<Button
type="default"
onClick={() => {
setProjectConfig(defaultConfig);
setId(null);
setIsModalOpen(true);
}}
>
</Button>
</Space>
<BTable
store={trainingCatStore}
columns={columns}
dataSource={trainingCatStore.list}
/>
<Modal
title={!tagId ? "任务发布" : "任务编辑"}
width={1200}
open={isModalOpen}
afterClose={() => formRef.current?.resetFields()}
onOk={() => formRef.current?.submit()}
onCancel={() => {
setId(null);
setIsModalOpen(false);
}}
>
<SimpleForm
formRef={formRef}
createCallback={() => {
formRef.current?.setFieldsValue(record);
}}
formName="card_basic"
colProps={12}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}
initialValues={true}
onFinishFailed={onFinishFailed}
/>
</Modal>
</Space>
</div>
);
};
export default inject("trainingCatStore")(observer(TrainingCat));

View File

@ -8,6 +8,7 @@ import { Store } from "antd/lib/form/interface";
import "./user.less";
import SimpleForm from "@/components/form/simple_form";
import React from "react";
import { FormType } from "@/components/form/interface";
const User = (props: Store) => {
const { usrStore } = props;
@ -106,46 +107,40 @@ const User = (props: Store) => {
}, [usrStore]);
const defaultConfig = [
{
type: "input",
type: FormType.input,
label: "用户名",
name: "acount",
value: "",
rules: [{ required: true, message: "请输入人物名称!" }],
},
{
type: "input",
type: FormType.input,
label: "年龄",
name: "age",
value: "",
rules: [{ required: true, message: "请输入卡片内容" }],
},
{
type: "input",
type: FormType.input,
label: "居住地",
name: "address",
value: "",
rules: [{ required: true, message: "请输入卡片内容" }],
},
{
type: "Radio",
type: FormType.radio,
label: "性别",
name: "sex",
value: 0,
rules: [{ required: true, message: "请输入卡片内容" }],
},
{
type: "upload",
type: FormType.upload,
label: "头像",
name: "headImg",
value: [],
rules: [{ required: true, message: "请上传头像" }],
},
{
type: "input",
label: "角色",
name: "role",
value: "",
},
];
const onFinishFailed = () => {};
return (
@ -162,7 +157,6 @@ const User = (props: Store) => {
>
</Button>
</Space>
<BTable store={usrStore} columns={columns} dataSource={usrStore.list} />
@ -183,7 +177,7 @@ const User = (props: Store) => {
formRef.current?.setFieldsValue(record);
}}
formName="card_basic"
colProps={4}
colProps={25}
subBtnName="提交"
formDatas={projectConfig}
onFinish={onFinish}

View File

@ -13,6 +13,9 @@ import User from "@/pages/user/user";
import WhseMgmt from "@/pages/whseMgmt";
import Storage from "@/pages/storage";
import WhseMgmtRoute from "@/pages/whseMgmt/whseMgmt_route";
import Emergency from "@/pages/emergency";
import Patrol from "@/pages/patrol";
import Training from "@/pages/training";
export const homeRouter = [
{
path: "/",
@ -78,6 +81,21 @@ export const homeRouter = [
index: true,
element: <TeamMgmt />,
},
{
path: "/admin/emergency",
index: true,
element: <Emergency />,
},
{
path: "/admin/patrol",
index: true,
element: <Patrol />,
},
{
path: "/admin/training",
index: true,
element: <Training />,
},
{
path: "/admin/whse",
element: <WhseMgmtRoute />,

28
src/store/emergency.ts Normal file
View File

@ -0,0 +1,28 @@
import { action, makeObservable } from "mobx";
// 档案分类
import BaseStore from "./baseStore";
import { TagDataType } from "@/model/userModel";
import baseHttp from "@/service/base";
class EmergencyConfig {
static LIST: string = "emerg/list"
static ADD: string = "emerg"
static DELETE: string = "emerg"
static EDIT: string = "emerg"
static ACCESS: string = "emerg/accept"
}
class EmergencyStore extends BaseStore<TagDataType> {
constructor() {
super(EmergencyConfig)
makeObservable(this, {
access: action
})
}
async access(id: number, param: any) {
await baseHttp.put(EmergencyConfig.ACCESS + "/" + id, param)
this.getlist()
}
}
export const emergencyStore = new EmergencyStore()

View File

@ -15,6 +15,10 @@ import { regulationsCatStore } from './regulationsCat';
import { regulationsStore } from './regulations';
import { leaveCategoryStore } from './leave_cat';
import { leaveStore } from './leave';
import { emergencyStore } from './emergency';
import { patrolStore } from './patrol';
import { trainingStore } from './training';
import { trainingCatStore } from './trainingCat';
const store = {
usrStore,
@ -33,7 +37,11 @@ const store = {
regulationsCatStore,
regulationsStore,
leaveCategoryStore,
leaveStore
leaveStore,
emergencyStore,
patrolStore,
trainingStore,
trainingCatStore
};
export default store;

28
src/store/patrol.ts Normal file
View File

@ -0,0 +1,28 @@
import { action, makeObservable } from "mobx";
// 档案分类
import BaseStore from "./baseStore";
import { TagDataType } from "@/model/userModel";
import baseHttp from "@/service/base";
class PatrolConfig {
static LIST: string = "patrol/list"
static ADD: string = "patrol"
static DELETE: string = "patrol"
static EDIT: string = "patrol"
static ACCESS: string = "patrol/accept"
}
class PatrolStore extends BaseStore<TagDataType> {
constructor() {
super(PatrolConfig)
makeObservable(this, {
access: action
})
}
async access(id: number, param: any) {
await baseHttp.put(PatrolConfig.ACCESS + "/" + id, param)
this.getlist()
}
}
export const patrolStore = new PatrolStore()

28
src/store/training.ts Normal file
View File

@ -0,0 +1,28 @@
import { action, makeObservable } from "mobx";
// 档案分类
import BaseStore from "./baseStore";
import { TagDataType } from "@/model/userModel";
import baseHttp from "@/service/base";
class TrainingConfig {
static LIST: string = "training/list"
static ADD: string = "training"
static DELETE: string = "training"
static EDIT: string = "training"
static ACCESS: string = "training/accept"
}
class TrainingStore extends BaseStore<TagDataType> {
constructor() {
super(TrainingConfig)
makeObservable(this, {
access: action
})
}
async access(id: number, param: any) {
await baseHttp.put(TrainingConfig.ACCESS + "/" + id, param)
this.getlist()
}
}
export const trainingStore = new TrainingStore()

21
src/store/trainingCat.ts Normal file
View File

@ -0,0 +1,21 @@
import { makeObservable } from "mobx";
// 分类
import BaseStore from "./baseStore";
import { TagDataType } from "@/model/userModel";
class TrainingCatConfig {
static LIST: string = "training/category/list"
static ADD: string = "training/category"
static DELETE: string = "training/category"
static EDIT: string = "training/category"
}
class TrainingCatStore extends BaseStore<TagDataType> {
constructor() {
super(TrainingCatConfig)
makeObservable(this, {
})
}
}
export const trainingCatStore = new TrainingCatStore()

View File

@ -5,7 +5,7 @@ import BaseStore from "./baseStore";
import { UserDataType, UserInfos } from "@/model/userModel";
class UserConfig {
static LOGINURI: string = "anth/login"
static LIST: string = "userMgmt/user/list"
static LIST: string = "user/list"
static ADD: string = "user"
static DELETE: string = "user"
static EDIT: string = "user"