fix(staff)

This commit is contained in:
wang_yp 2025-03-18 23:59:00 +08:00
parent 7415fc8312
commit bf8ae54585
17 changed files with 279 additions and 316 deletions

View File

@ -44,19 +44,3 @@ You dont have to ever use `eject`. The curated feature set is suitable for sm
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
添加的数据
1、队伍属性管理 添加队伍
2、个人身份管理 添加身份
3、组织架构通过部门来组织
首页:
1、组织架构 用户数量统计,党员数量统计
2、武装力量 根据队伍统计
3、年度训练 按照年度统计类别,次数 (任务发布时,可选择多个类别)
4、物资管理
5、档案管理
6、评优争先

View File

@ -93,7 +93,7 @@
"build": "node scripts/build.js",
"test": "node scripts/test.js"
},
"proxy":"https://www.hswzct.cn:12016",
"proxy":"http://127.0.0.1:12214",
"eslintConfig": {
"extends": [
"react-app",

View File

@ -14,6 +14,7 @@ const DebounceSelect = <
key?: string;
label: React.ReactNode;
value: string | number;
head_img?: string;
} = any
>({
fetchOptions,
@ -35,7 +36,6 @@ const DebounceSelect = <
if (fetchId !== fetchRef.current) {
return;
}
setOptions(newOptions);
setFetching(false);
});
@ -51,7 +51,6 @@ const DebounceSelect = <
onSearch={debounceFetcher}
notFoundContent={fetching ? <Spin size="small" /> : null}
{...props}
options={options}
/>
);

View File

@ -95,6 +95,7 @@
.ec_right_end{
position: absolute;
left: 0;
cursor: pointer;
right: 0;
bottom: 20px;
color: #fff;

View File

@ -1,4 +1,4 @@
import { Modal } from "antd";
import { Modal, Space } from "antd";
import { Store } from "antd/es/form/interface";
import { inject, observer } from "mobx-react";
import { useState } from "react";
@ -9,6 +9,10 @@ import DebounceSelect from "@/components/form/featch_select";
interface UserValue {
label: string;
value: string;
head_img: string;
age: number;
grid_letter_user: number;
pos_held: string;
}
const Ec = (props: Store) => {
const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
@ -27,6 +31,8 @@ const Ec = (props: Store) => {
return res.data.record.map((item) => ({
label: item.user_name,
value: item.identity,
identity: item.identity,
head_img:item.head_img,
}));
});
}
@ -60,13 +66,18 @@ const Ec = (props: Store) => {
onChange={(newValue) => {
setValue(newValue as UserValue[]);
}}
optionRender={(item:any) => {
return <Space key={item.key}>
<span>{item.label}</span>
<img src={item.data.head_img} alt="" width={40} height={40} />
</Space>
}}
style={{ width: "100%" }}
/>
<p></p>
{value.map((item: any) => {
return (
<div key={item.key}>
<div>{item.label} : 线</div>
<div>{item.label}</div>
<div>
<PhoneTwoTone
@ -84,10 +95,10 @@ const Ec = (props: Store) => {
</div>
<div className="ec_right">
<div style={{ display: "flex" }}>
<video
{/* <video
id="rtcVideo"
style={{ width: "300px", height: "300px" }}
></video>
></video> */}
<video
id="remoteVideo"
style={{ width: "300px", height: "300px" }}

View File

@ -46,6 +46,7 @@ const WhichVideo = (props) => {
return () => {
clearInterval(timer);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<>

View File

@ -62,7 +62,7 @@ const Turn = (props: Store) => {
setImageUrl(item.file_url);
}}
key={item.identity}
style={{ width: "80px", height: "80px" }}
style={{ width: "100%", height: "100px" }}
src={item.file_url}
alt=""
/>
@ -72,11 +72,29 @@ const Turn = (props: Store) => {
let fileType = getFileTypeFromUrl(imageUrl);
switch (fileType) {
case "jpeg":
return <img style={{ width: "100%",objectFit:"fill" }} src={imageUrl} alt="" />;
return (
<img
style={{ width: "100%", height: "500px", objectFit: "fill" }}
src={imageUrl}
alt=""
/>
);
case "jpg":
return <img style={{ width: "100%" ,objectFit:"fill"}} src={imageUrl} alt="" />;
return (
<img
style={{ width: "100%", height: "500px", objectFit: "fill" }}
src={imageUrl}
alt=""
/>
);
case "png":
return <img style={{ width: "100%",objectFit:"fill" }} src={imageUrl} alt="" />;
return (
<img
style={{ width: "100%", height: "500px", objectFit: "fill" }}
src={imageUrl}
alt=""
/>
);
case "pdf":
return (
<div style={{ width: "100%", height: "500px" }}>
@ -90,17 +108,17 @@ const Turn = (props: Store) => {
);
case "mp4":
return (
<div key={imageUrl} style={{ width: "100%", height: "600px" }}>
<div key={imageUrl} style={{ width: "100%", height: "500px" }}>
<video
controls
style={{ width: "100%", height: "600px" }}
style={{ width: "100%", height: "500px" }}
src={imageUrl}
></video>
</div>
);
case "docx":
return (
<div key={imageUrl} style={{ width: "100%", height: "600px" }}>
<div key={imageUrl} style={{ width: "100%", height: "500px" }}>
<FileViewer
loader={undefined}
src={imageUrl}
@ -112,9 +130,9 @@ const Turn = (props: Store) => {
</div>
);
case "":
return <div style={{ width: "100%", height: "600px" }}></div>;
return <div style={{ width: "100%", height: "500px" }}></div>;
default:
return <div style={{ width: "100%", height: "600px" }}></div>;
return <div style={{ width: "100%", height: "500px" }}></div>;
}
};
return (
@ -139,15 +157,15 @@ const Turn = (props: Store) => {
>
<div>
<Row>
<Col span={2}>
<Col span={3}>
<div style={{ color: "#fff" }}>
<div
style={{
height: "500px",
overflowY: "hidden",
border: "1px solid #fff",
border: "1px solid rgb(51, 51, 51)",
padding: "10px",
margin: "5px",
overflowY: "scroll",
}}
>
<p></p>
@ -172,11 +190,12 @@ const Turn = (props: Store) => {
</div>
</div>
</Col>
<Col span={2}>
<Col span={3}>
<div
style={{
height: "500px",
color: "#fff",
border: "1px solid #fff",
border: "1px solid rgb(51, 51, 51)",
padding: "10px",
margin: "5px",
}}
@ -201,13 +220,17 @@ const Turn = (props: Store) => {
})}
</div>
</Col>
<Col span={2}>
<div style={{ color: "#fff", border: "1px solid #fff",
padding: "10px",
margin: "5px", }}>
<Col span={3}>
<div
style={{
color: "#fff",
border: "1px solid rgb(51, 51, 51)",
padding: "10px",
margin: "5px",
}}
>
<div style={{ height: "500px", overflowY: "scroll" }}>
<p></p>
<p></p>
{imageList?.map((item) => {
let fileType = getFileTypeFromUrl(item.file_url);
switch (fileType) {
@ -270,7 +293,7 @@ const Turn = (props: Store) => {
</div>
</div>
</Col>
<Col span={18}>
<Col span={15}>
<div
style={{
color: "#fff",
@ -278,7 +301,7 @@ const Turn = (props: Store) => {
display: "flex",
alignItems: "center",
justifyContent: "center",
padding:"10px"
padding: "10px",
}}
>
{preView()}

View File

@ -179,7 +179,7 @@ const Ac = (props: Store) => {
<div style={{ display: "flex", alignItems: "flex-start" }}>
<div
style={{
border: "1px solid #fff",
border: "1px solid rgb(51, 51, 51)",
width: "200px",
overflow: "auto",
height: "480px",
@ -207,9 +207,10 @@ const Ac = (props: Store) => {
);
})}
</div>
<div style={{ width: '10px' }}></div>
<div
style={{
border: "1px solid #fff",
border: "1px solid rgb(51, 51, 51)",
width: "200px",
height: "480px",
overflow: "auto",
@ -234,6 +235,7 @@ const Ac = (props: Store) => {
);
})}
</div>
<div style={{ width: '10px' }}></div>
<div style={{height:"400px",flex:4}}>
{preView()}
</div>

View File

@ -4,5 +4,6 @@
display: flex;
align-items: center;
justify-content: center;
border: 1px solid;
border: 1px solid rgba(255, 255, 255, 0.3);
box-sizing: border-box;
}

View File

@ -1,11 +1,13 @@
import Col from "antd/es/col";
import { Row } from "antd/lib/grid";
import * as echarts from "echarts";
import "./kanban.less";
import { useEffect } from "react";
import Timer from "../homeLeft/timer";
import { inject, observer } from "mobx-react";
import { Store } from "antd/es/form/interface";
const KanBan = () => {
const KanBan = (props: Store) => {
const { homeStore } = props;
const initChart = () => {
var myChart = echarts.init(document.getElementById("yibiaopan"));
var option = {
@ -15,30 +17,20 @@ const KanBan = () => {
center: ["50%", "70%"],
startAngle: 200,
endAngle: -20,
radius:70,
radius: 100,
min: 0,
max: 30,
splitNumber: 12,
itemStyle: {
color: "#FFAB91",
},
axisLabel: {
distance: -20,
color: "#999",
fontSize: 20,
},
anchor: {
show: false,
},
title: {
show: true,
},
detail: {
valueAnimation: true,
width: "40%",
lineHeight: 40,
lineHeight: 80,
borderRadius: 8,
offsetCenter: [0, "-10%"],
offsetCenter: [0, "10%"],
fontSize: 20,
fontWeight: "bolder",
formatter: "{value} °C",
@ -54,12 +46,12 @@ const KanBan = () => {
type: "gauge",
center: ["50%", "70%"],
startAngle: 200,
radius:70,
endAngle: -20,
radius: 80,
endAngle: 10,
min: 0,
max: 60,
itemStyle: {
color: "#FD7347",
color: "#FD7347"
},
progress: {
show: true,
@ -74,12 +66,8 @@ const KanBan = () => {
axisTick: {
show: false,
},
splitLine: {
show: false,
},
axisLabel: {
show: false,
},
splitLine: { show: false },
axisLabel: { show: false },
detail: {
show: false,
},
@ -93,7 +81,8 @@ const KanBan = () => {
};
option && myChart.setOption(option);
};
const sourece = (id: string) => {
const guoqi = (id: string, list: any) => {
var myChart = echarts.init(document.getElementById(id));
var option = {
legend: {
@ -115,92 +104,19 @@ const KanBan = () => {
formatter: "{b}:{c}",
},
},
data: [
{ value: 40, name: "第三方" },
{ value: 18, name: "购买" },
{ value: 18, name: "自有" },
],
data: list,
},
],
};
option && myChart.setOption(option);
};
const guoqi = (id: string) => {
var myChart = echarts.init(document.getElementById(id));
var option = {
legend: {
top: "bottom",
show: false,
},
series: [
{
type: "pie",
radius: [30, 80],
center: ["50%", "50%"],
itemStyle: {
borderRadius: 2,
},
label: {
normal: {
show: true,
position: "inner",
formatter: "{b}:{c}",
},
},
data: [
{ value: 40, name: "即将过期" },
{ value: 18, name: "已经过期" },
{ value: 18, name: "未过期" },
],
},
],
};
option && myChart.setOption(option);
};
const outin = (id: string) => {
var myChart = echarts.init(document.getElementById(id));
var option = {
legend: {
top: "bottom",
show: false,
},
series: [
{
type: "pie",
radius: [30, 80],
center: ["50%", "50%"],
itemStyle: {
borderRadius: 2,
},
label: {
normal: {
show: true,
position: "inner",
formatter: "{b}:{c}",
},
},
data: [
{ value: 40, name: "出库" },
{ value: 18, name: "入库" },
],
},
],
};
option && myChart.setOption(option);
};
const gailan = () => {
const gailan = (list) => {
var myChart = echarts.init(document.getElementById("gailan"));
var option = {
xAxis: {
type: "category",
data: [
"个人携行",
"反恐维稳",
"反恐维稳",
"地震救援",
"防汛抗洪",
"灭火救援",
],
data: list.map((item) => item.name),
axisLabel: {
show: true,
interval: 0,
@ -216,7 +132,7 @@ const KanBan = () => {
},
series: [
{
data: [820, 932, 901, 934, 1290, 1330],
data: list.map((item) => item.value),
type: "line",
smooth: true,
areaStyle: {
@ -239,44 +155,73 @@ const KanBan = () => {
};
useEffect(() => {
initChart();
sourece("sourece");
guoqi("yujing");
outin("baozhiqi");
sourece("level");
gailan();
}, []);
homeStore.getMm().then((res) => {
gailan(res.data?.record ?? []);
});
homeStore.getmmb().then((res) => {
guoqi("yujing", [
{ value: res.data?.record?.other_num??0, name: "第三方" },
{ value: res.data?.record?.own_num??0, name: "自有" },
]);
guoqi("sourece", [
{ value: res.data?.record?.jygq??0, name: "即将过期" },
{ value: res.data?.record?.gq??0, name: "已经过期" },
{ value: res.data?.record?.bgq??0, name: "未过期" },
]);
guoqi("level", [
{ value: res.data?.record?.drck??0, name: "当日出库" },
{ value: res.data?.record?.drrk??0, name: "当日入库" },
]);
});
}, [homeStore]);
return (
<>
<Row style={{ margin: "10px" }}>
<Col className="gutter-row" span={6}>
<div style={{ marginBottom: "10px" }}>
<div style={{ display: "flex" }} className="gutter-row">
<div
style={{
flex: 1,
}}
>
<div
className="kanban-item"
style={{ backgroundColor: "rgba(37, 52, 70, 0.4)" }}
style={{
height: "240px",
width: "100%",
backgroundColor: "rgba(37, 52, 70, 0.4)",
border: "1px solid rgba(255, 255, 255, 0.3)",
boxSizing: "border-box",
}}
>
<div>
<p
style={{
backgroundColor: "#29ecb4",
width: "100%",
padding: "10px",
}}
>
</p>
<p
style={{
fontSize: "30px",
margin: "0px",
fontWeight: "800",
color: "#29ecb4",
}}
>
109
</p>
<p style={{ color: "#29ecb4" }}>2024 / 12 / 12 09:10</p>
</div>
<p
style={{
backgroundColor: "#29ecb4",
width: "100%",
padding: "5px",
color: "#fff",
boxSizing: "border-box",
fontSize: "30px",
fontWeight: "800",
}}
>
</p>
<p
style={{
fontSize: "30px",
padding: "5px",
fontWeight: "800",
color: "#29ecb4",
}}
>
109
</p>
<p style={{ color: "#29ecb4", padding: "5px" }}>
<Timer />
</p>
</div>
<div className="kanban-item" style={{ margin: "10px 0px" }}>
<div className="kanban-item">
<div>
<div
id="yibiaopan"
@ -284,44 +229,30 @@ const KanBan = () => {
></div>
</div>
</div>
<div className="kanban-item">
<div>
<div
id="sourece"
style={{ width: "240px", height: "240px" }}
></div>
</div>
</div>
</Col>
</div>
<Col className="gutter-row" span={12}>
<div className="kanban-item">
<div></div>
</div>
<div className="kanban-item" style={{ margin: "10px 0px" }}>
<div></div>
</div>
<div className="kanban-item">
<div id="gailan" style={{ width: "100%", height: "240px" }}></div>
</div>
</Col>
<Col className="gutter-row" span={6}>
<div style={{ flex: 2 }}>
<div style={{ color: "#fff", textAlign: "center" }}></div>
</div>
<div style={{ flex: 1 }}>
<div className="kanban-item">
<div id="yujing" style={{ width: "240px", height: "240px" }}></div>
</div>
<div className="kanban-item" style={{ margin: "10px 0px" }}>
<div
id="baozhiqi"
style={{ width: "240px", height: "240px" }}
></div>
</div>
<div className="kanban-item">
<div id="level" style={{ width: "240px", height: "240px" }}></div>
</div>
</Col>
</Row>
</>
</div>
</div>
<div style={{ display: "flex" }}>
<div className="kanban-item" style={{ flex: 1 }}>
<div id="sourece" style={{ width: "240px", height: "240px" }}></div>
</div>
<div className="kanban-item" style={{ flex: 3 }}>
<div id="gailan" style={{ width: "100%", height: "240px" }}></div>
</div>
</div>
</div>
);
};
export default KanBan;
export default inject("homeStore")(observer(KanBan));

View File

@ -118,6 +118,7 @@ const Material = (props: Store) => {
const edit = (record) => {
setIsModalOpen(true);
record.expiry_date = dayjs(record.expiry_date);
record.supplie_piker=record.supplie_piker===""?[]:record.supplie_piker
setRecord(record);
};
@ -130,7 +131,6 @@ const Material = (props: Store) => {
...values,
pid: values.pid ?? 0,
storage_cloumn: Number(values.storage_cloumn),
// supplie_piker: values.supplie_piker[0].name,
};
if (values.supplie_piker.length > 0) {
data.supplie_piker = values.supplie_piker[0].name;

View File

@ -77,5 +77,6 @@ export const defaultConfig = [
label: "物资图片",
name: "supplie_piker",
value: [],
rules: [{ required: true, message: "请上传物资图片!" }],
},
];

View File

@ -1,5 +1,4 @@
import { useEffect, useState } from "react";
import * as echarts from "echarts";
import "./pv.less";
import { SnippetsTwoTone } from "@ant-design/icons";
import { inject, observer } from "mobx-react";
@ -9,61 +8,13 @@ import PoverDetail from "../poverDetail";
const PoverPage = (props: Store) => {
const { usrStore } = props;
const [poverData, setPover] = useState<any>();
const [config, setConfig] = useState<any>({
militia_type: 1,
vet: 1,
o_type: "",
});
const initChart = (id: string, count: number, total: number) => {
var myChart = echarts.init(document.getElementById(id));
var option = {
title: {
text: count,
left: "center",
top: "center",
textStyle: {
color: "#fff",
fontSize: "18px",
},
},
series: [
{
type: "pie",
radius: ["70%", "100%"],
center: ["50%", "50%"],
color: "#000",
data: [
{
value: count,
itemStyle: { color: "#254e99", borderRadius: 100 },
emphasis: { scale: false },
},
{
value: total,
itemStyle: { color: "#f5f5f5" },
emphasis: { scale: false },
},
],
label: {
show: false,
},
animationDelay: function (idx) {
return Math.random() * 200;
},
},
],
};
myChart.setOption(option);
};
useEffect(() => {
usrStore.getPover().then((e) => {
initChart("pover_jg", e.data.o_type, e.data.total);
initChart("pover_jgs", e.data.o_types, e.data.total);
setPover(e.data);
});
}, [usrStore]);
const serch = () => {
usrStore.getPoverList(config);
const serch = (configs) => {
usrStore.getPoverList(configs);
};
return (
<div
@ -75,34 +26,52 @@ const PoverPage = (props: Store) => {
}}
>
<div className="nav-header">
<div style={{ textAlign: "center", marginBottom: "20px" ,cursor:"pointer" }}>
<div className="pv-head-item">
<SnippetsTwoTone style={{ fontSize: 30 }} />
<div
style={{ width: "150px", height: "100px" }}
id="pover_jgs"
onClick={() => {
setConfig({
serch({
o_type: "01JAZB1GVJED5R34V6Z8MBWER4",
size: 30,
offset: 1,
});
}}
>
<div>{poverData?.o_types}</div>
<span></span>
</div>
</div>
<div style={{ height: "10px" }}></div>
<div className="pv-head-item">
<SnippetsTwoTone style={{ fontSize: 30 }} />
<div
onClick={() => {
serch({
o_type: "01JAZAZDTHJE8FZ24GY9AJ758N",
size: 30,
offset: 1,
});
serch();
}}
></div>
<span style={{ color: "#fff" }}></span>
>
<div>{poverData?.o_type}</div>
<span></span>
</div>
</div>
<div
style={{ textAlign: "center", marginBottom: "20px" }}
onClick={() => {
setConfig({
o_type: "01JAZB1GVJED5R34V6Z8MBWER4",
size: 30,
offset: 1,
});
serch();
}}
>
<div style={{ width: "150px", height: "100%" }} id="pover_jg"></div>
<span style={{ color: "#fff" }}></span>
<div style={{ height: "10px" }}></div>
<div className="pv-head-item">
<SnippetsTwoTone style={{ fontSize: 30 }} />
<div
onClick={() => {
serch({
o_type: "01JAZB1QSM13C7PHZBTSDE1VXE",
size: 30,
offset: 1,
});
}}
>
<div>{poverData?.news_num}</div>
<span></span>
</div>
</div>
</div>
<div className="nav-content">
@ -115,12 +84,11 @@ const PoverPage = (props: Store) => {
<div
className="pv-head-item"
onClick={(e) => {
setConfig({
serch({
militia_type: 1,
size: 30,
offset: 1,
});
serch();
}}
>
<SnippetsTwoTone style={{ fontSize: 30 }} />
@ -133,12 +101,11 @@ const PoverPage = (props: Store) => {
<SnippetsTwoTone style={{ fontSize: 30 }} />
<div
onClick={() => {
setConfig({
serch({
militia_type: 2,
size: 30,
offset: 1,
});
serch();
}}
>
<div>{poverData?.easy_meber}</div>
@ -149,18 +116,32 @@ const PoverPage = (props: Store) => {
<SnippetsTwoTone style={{ fontSize: 30 }} />
<div
onClick={() => {
setConfig({
serch({
vet: 1,
size: 30,
offset: 1,
});
serch();
}}
>
<div>{poverData?.vet_meber}</div>
<span>退</span>
</div>
</div>
<div className="pv-head-item">
<SnippetsTwoTone style={{ fontSize: 30 }} />
<div
onClick={() => {
serch({
grid_user: 1,
size: 30,
offset: 1,
});
}}
>
<div>{poverData?.grid_meber}</div>
<span></span>
</div>
</div>
</div>
<div className="content-right">

View File

@ -14,7 +14,6 @@
justify-content: start;
}
.content-right {
width: 85%;
height: 100%;
overflow: auto;
text-align: center;

View File

@ -16,16 +16,32 @@ export const studyColumns: ColumnsType<UserDataType> = [
dataIndex: "tel",
},
{
title: "签到时间",
title: "上午签到时间",
dataIndex: "created_at",
render(leave_start_time) {
if (!leave_start_time){
return "未签到";
}
return dayjs(leave_start_time).format("YYYY-MM-DD HH:mm");
},
},
{
title: "签到地址",
title: "下午签到时间",
render(record) {
if (record.created_at === record.updated_at){
return "未签到";
}
return dayjs(record.created_at).format("YYYY-MM-DD HH:mm");
},
},
{
title: "上午签到地址",
dataIndex: "address",
},
{
title: "下午签到地址",
dataIndex: "pm_address",
},
// {
// title: "经度",
// dataIndex: "long",
@ -65,5 +81,4 @@ export const serchConfig = [
value: "",
rules: [],
},
];

View File

@ -1,10 +1,9 @@
import { FormType } from "@/components/form/interface";
import { UserDataType } from "@/model/userModel";
import { ColumnsType } from "antd/lib/table";
import { Avatar, Image } from "antd";
import { Avatar, Image, Tooltip } from "antd";
import { getAgeByIDCard, getBirthDateAndGender } from "@/util/util";
export const defaultConfig =(team,per)=>
[
export const defaultConfig = (team, per) => [
{
type: FormType.input,
label: "用户名",
@ -158,7 +157,7 @@ export const defaultConfig =(team,per)=>
type: FormType.cehckboxGroup,
label: "所属队伍",
name: "team_link_user",
checkboxData:team,
checkboxData: team,
value: "",
rules: [{ required: true, message: "请选择所属队伍" }],
},
@ -166,7 +165,7 @@ export const defaultConfig =(team,per)=>
type: FormType.cehckboxGroup,
label: "个人身份属性",
name: "pers_link_user",
checkboxData:per,
checkboxData: per,
value: "",
rules: [{ required: true, message: "请选择个人身份属性" }],
},
@ -206,7 +205,6 @@ export const defaultConfig =(team,per)=>
value: "",
},
{
type: FormType.date,
label: "入伍时间",
@ -279,7 +277,9 @@ export const columns: ColumnsType<UserDataType> = [
{
title: "性别",
width: 100,
render: (render) => <span>{getBirthDateAndGender(render.id_card)?.gender}</span>,
render: (render) => (
<span>{getBirthDateAndGender(render.id_card)?.gender}</span>
),
},
{
title: "年龄",
@ -290,8 +290,10 @@ export const columns: ColumnsType<UserDataType> = [
title: "头像",
dataIndex: "head_img",
width: 150,
render: (head_img) =>{
return <Avatar size={64} shape="square" src={<Image src={head_img}></Image>} />
render: (head_img) => {
return (
<Avatar size={64} shape="square" src={<Image src={head_img}></Image>} />
);
},
},
{
@ -351,7 +353,15 @@ export const columns: ColumnsType<UserDataType> = [
},
{
title: "备注",
width: 300,
dataIndex: "remark",
ellipsis: {
showTitle: false,
},
width:200,
render: (remark) => (
<Tooltip placement="topLeft" title={remark}>
{remark}
</Tooltip>
),
},
];

View File

@ -10,6 +10,7 @@ class HomeConfig {
static tr: string = "/v1/public/tr"
static af: string = "/v1/public/af"
static mm: string = "/v1/public/mm"
static mmb: string = "/v1/public/mmb"
static rm: string = "/v1/public/rm"
static ae: string = "/v1/public/ae"
static todo: string = "/v1/public/todo"
@ -63,6 +64,9 @@ class HomeStore extends BaseStore<TagDataType> {
async getRm() {
return await baseHttp.get(HomeConfig.rm, {});
}
async getmmb() {
return await baseHttp.get(HomeConfig.mmb, {});
}
async getAe() {
return await baseHttp.get(HomeConfig.ae, {});
}