fix(api):task crud
This commit is contained in:
parent
ba59eadd34
commit
35ec46e38c
|
@ -5,10 +5,12 @@ export enum FormType {
|
||||||
select = "select",
|
select = "select",
|
||||||
editor = "editor",
|
editor = "editor",
|
||||||
date = "date",
|
date = "date",
|
||||||
|
map = "map",
|
||||||
textarea = "textarea",
|
textarea = "textarea",
|
||||||
radio = "radio",
|
radio = "radio",
|
||||||
upload = "upload",
|
upload = "upload",
|
||||||
cehckbox = "checkbox",
|
cehckbox = "checkbox",
|
||||||
|
cehckboxGroup = "checkboxGroup",
|
||||||
password = "password",
|
password = "password",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +21,7 @@ export interface FormDatas {
|
||||||
value: any,
|
value: any,
|
||||||
selectUrl?: string,
|
selectUrl?: string,
|
||||||
selectList?: Array<selectItem>
|
selectList?: Array<selectItem>
|
||||||
|
checkboxData?: Array<any>,
|
||||||
rules: Array<rules>
|
rules: Array<rules>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import { FormType, SimpleFormData } from "./interface";
|
||||||
import { FormSelect } from "./select";
|
import { FormSelect } from "./select";
|
||||||
import AliUpload from "../ali_upload";
|
import AliUpload from "../ali_upload";
|
||||||
import MyEditor from "../edittor";
|
import MyEditor from "../edittor";
|
||||||
|
import MapFrom from "../map/MapFrom";
|
||||||
const { TextArea } = Input;
|
const { TextArea } = Input;
|
||||||
const SimpleForm = (props: SimpleFormData) => {
|
const SimpleForm = (props: SimpleFormData) => {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
|
@ -28,9 +29,7 @@ const SimpleForm = (props: SimpleFormData) => {
|
||||||
onFinish={onFinish}
|
onFinish={onFinish}
|
||||||
autoComplete="on"
|
autoComplete="on"
|
||||||
>
|
>
|
||||||
{
|
{props.children ?? props.children}
|
||||||
props.children??props.children
|
|
||||||
}
|
|
||||||
{props.formDatas.map((v) => {
|
{props.formDatas.map((v) => {
|
||||||
switch (v.type) {
|
switch (v.type) {
|
||||||
case FormType.input:
|
case FormType.input:
|
||||||
|
@ -66,6 +65,23 @@ const SimpleForm = (props: SimpleFormData) => {
|
||||||
<Checkbox>Remember me</Checkbox>
|
<Checkbox>Remember me</Checkbox>
|
||||||
</Form.Item>
|
</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:
|
case FormType.select:
|
||||||
return FormSelect(v);
|
return FormSelect(v);
|
||||||
case FormType.upload:
|
case FormType.upload:
|
||||||
|
@ -149,6 +165,19 @@ const SimpleForm = (props: SimpleFormData) => {
|
||||||
<DatePicker />
|
<DatePicker />
|
||||||
</Form.Item>
|
</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:
|
default:
|
||||||
return (
|
return (
|
||||||
<Form.Item
|
<Form.Item
|
||||||
|
@ -162,8 +191,6 @@ const SimpleForm = (props: SimpleFormData) => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
})}
|
})}
|
||||||
|
|
||||||
|
|
||||||
</Form>
|
</Form>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>
|
||||||
|
);
|
||||||
|
}
|
|
@ -140,7 +140,7 @@ const Dep = (props: Store) => {
|
||||||
formRef.current?.setFieldsValue(record);
|
formRef.current?.setFieldsValue(record);
|
||||||
}}
|
}}
|
||||||
formName="card_basic"
|
formName="card_basic"
|
||||||
colProps={4}
|
colProps={25}
|
||||||
subBtnName="提交"
|
subBtnName="提交"
|
||||||
formDatas={projectConfig}
|
formDatas={projectConfig}
|
||||||
onFinish={onFinish}
|
onFinish={onFinish}
|
||||||
|
|
|
@ -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));
|
|
@ -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));
|
|
@ -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
|
|
@ -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));
|
|
@ -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));
|
|
@ -8,6 +8,7 @@ import { Store } from "antd/lib/form/interface";
|
||||||
import "./user.less";
|
import "./user.less";
|
||||||
import SimpleForm from "@/components/form/simple_form";
|
import SimpleForm from "@/components/form/simple_form";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
import { FormType } from "@/components/form/interface";
|
||||||
|
|
||||||
const User = (props: Store) => {
|
const User = (props: Store) => {
|
||||||
const { usrStore } = props;
|
const { usrStore } = props;
|
||||||
|
@ -106,46 +107,40 @@ const User = (props: Store) => {
|
||||||
}, [usrStore]);
|
}, [usrStore]);
|
||||||
const defaultConfig = [
|
const defaultConfig = [
|
||||||
{
|
{
|
||||||
type: "input",
|
type: FormType.input,
|
||||||
label: "用户名",
|
label: "用户名",
|
||||||
name: "acount",
|
name: "acount",
|
||||||
value: "",
|
value: "",
|
||||||
rules: [{ required: true, message: "请输入人物名称!" }],
|
rules: [{ required: true, message: "请输入人物名称!" }],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "input",
|
type: FormType.input,
|
||||||
label: "年龄",
|
label: "年龄",
|
||||||
name: "age",
|
name: "age",
|
||||||
value: "",
|
value: "",
|
||||||
rules: [{ required: true, message: "请输入卡片内容" }],
|
rules: [{ required: true, message: "请输入卡片内容" }],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "input",
|
type: FormType.input,
|
||||||
label: "居住地",
|
label: "居住地",
|
||||||
name: "address",
|
name: "address",
|
||||||
value: "",
|
value: "",
|
||||||
rules: [{ required: true, message: "请输入卡片内容" }],
|
rules: [{ required: true, message: "请输入卡片内容" }],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "Radio",
|
type: FormType.radio,
|
||||||
label: "性别",
|
label: "性别",
|
||||||
name: "sex",
|
name: "sex",
|
||||||
value: 0,
|
value: 0,
|
||||||
rules: [{ required: true, message: "请输入卡片内容" }],
|
rules: [{ required: true, message: "请输入卡片内容" }],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "upload",
|
type: FormType.upload,
|
||||||
label: "头像",
|
label: "头像",
|
||||||
name: "headImg",
|
name: "headImg",
|
||||||
value: [],
|
value: [],
|
||||||
rules: [{ required: true, message: "请上传头像" }],
|
rules: [{ required: true, message: "请上传头像" }],
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type: "input",
|
|
||||||
label: "角色",
|
|
||||||
name: "role",
|
|
||||||
value: "",
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
const onFinishFailed = () => {};
|
const onFinishFailed = () => {};
|
||||||
return (
|
return (
|
||||||
|
@ -162,7 +157,6 @@ const User = (props: Store) => {
|
||||||
>
|
>
|
||||||
添加用户
|
添加用户
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
</Space>
|
</Space>
|
||||||
|
|
||||||
<BTable store={usrStore} columns={columns} dataSource={usrStore.list} />
|
<BTable store={usrStore} columns={columns} dataSource={usrStore.list} />
|
||||||
|
@ -183,7 +177,7 @@ const User = (props: Store) => {
|
||||||
formRef.current?.setFieldsValue(record);
|
formRef.current?.setFieldsValue(record);
|
||||||
}}
|
}}
|
||||||
formName="card_basic"
|
formName="card_basic"
|
||||||
colProps={4}
|
colProps={25}
|
||||||
subBtnName="提交"
|
subBtnName="提交"
|
||||||
formDatas={projectConfig}
|
formDatas={projectConfig}
|
||||||
onFinish={onFinish}
|
onFinish={onFinish}
|
||||||
|
|
|
@ -13,6 +13,9 @@ import User from "@/pages/user/user";
|
||||||
import WhseMgmt from "@/pages/whseMgmt";
|
import WhseMgmt from "@/pages/whseMgmt";
|
||||||
import Storage from "@/pages/storage";
|
import Storage from "@/pages/storage";
|
||||||
import WhseMgmtRoute from "@/pages/whseMgmt/whseMgmt_route";
|
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 = [
|
export const homeRouter = [
|
||||||
{
|
{
|
||||||
path: "/",
|
path: "/",
|
||||||
|
@ -78,6 +81,21 @@ export const homeRouter = [
|
||||||
index: true,
|
index: true,
|
||||||
element: <TeamMgmt />,
|
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",
|
path: "/admin/whse",
|
||||||
element: <WhseMgmtRoute />,
|
element: <WhseMgmtRoute />,
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -15,6 +15,10 @@ import { regulationsCatStore } from './regulationsCat';
|
||||||
import { regulationsStore } from './regulations';
|
import { regulationsStore } from './regulations';
|
||||||
import { leaveCategoryStore } from './leave_cat';
|
import { leaveCategoryStore } from './leave_cat';
|
||||||
import { leaveStore } from './leave';
|
import { leaveStore } from './leave';
|
||||||
|
import { emergencyStore } from './emergency';
|
||||||
|
import { patrolStore } from './patrol';
|
||||||
|
import { trainingStore } from './training';
|
||||||
|
import { trainingCatStore } from './trainingCat';
|
||||||
|
|
||||||
const store = {
|
const store = {
|
||||||
usrStore,
|
usrStore,
|
||||||
|
@ -33,7 +37,11 @@ const store = {
|
||||||
regulationsCatStore,
|
regulationsCatStore,
|
||||||
regulationsStore,
|
regulationsStore,
|
||||||
leaveCategoryStore,
|
leaveCategoryStore,
|
||||||
leaveStore
|
leaveStore,
|
||||||
|
emergencyStore,
|
||||||
|
patrolStore,
|
||||||
|
trainingStore,
|
||||||
|
trainingCatStore
|
||||||
};
|
};
|
||||||
|
|
||||||
export default store;
|
export default store;
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -5,7 +5,7 @@ import BaseStore from "./baseStore";
|
||||||
import { UserDataType, UserInfos } from "@/model/userModel";
|
import { UserDataType, UserInfos } from "@/model/userModel";
|
||||||
class UserConfig {
|
class UserConfig {
|
||||||
static LOGINURI: string = "anth/login"
|
static LOGINURI: string = "anth/login"
|
||||||
static LIST: string = "userMgmt/user/list"
|
static LIST: string = "user/list"
|
||||||
static ADD: string = "user"
|
static ADD: string = "user"
|
||||||
static DELETE: string = "user"
|
static DELETE: string = "user"
|
||||||
static EDIT: string = "user"
|
static EDIT: string = "user"
|
||||||
|
|
Loading…
Reference in New Issue