Merge branch 'lsf-dev'
commit
aef883b6c5
|
|
@ -45,7 +45,7 @@ const SiderMenu: React.FC<{
|
|||
},[menuIndexes[1]])
|
||||
|
||||
|
||||
const onOpenChange = (keys:any) => {
|
||||
const onOpenChange = (keys: any) => {
|
||||
let openLength = 0
|
||||
if(openKeys===undefined){
|
||||
openLength = 0
|
||||
|
|
|
|||
|
|
@ -207,6 +207,19 @@ export async function loadMenu(): Promise<MenuItem[]> {
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: id(), title: '培训管理', redirect: '/mgr/sz/pxgl/pxjhgl',
|
||||
children: [
|
||||
{
|
||||
id: id(), title: '培训计划管理', path: '/mgr/sz/pxgl/pxjhgl',
|
||||
},
|
||||
{
|
||||
id: id(), title: '培训记录管理', path: '/mgr/sz/pxgl/pxjlgl',
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
id: id(), title: '水政执法', redirect: '/mgr/sz/szzf/ajdj',
|
||||
children: [
|
||||
|
|
@ -363,7 +376,7 @@ export async function loadMenu(): Promise<MenuItem[]> {
|
|||
],
|
||||
},
|
||||
{
|
||||
id: id(), title: '四全', redirect: '/mgr/sq/qfg/zcdjxx',
|
||||
id: id(), title: '四全', redirect: '/mgr/sq/qfg/zcdjxx', icon: 'fxzb',
|
||||
children: [
|
||||
{
|
||||
id: id(), title: '全覆盖', redirect: '/mgr/sq/qfg/zcdjxx',
|
||||
|
|
|
|||
|
|
@ -8,6 +8,37 @@ const service_fxdd = '/gunshiApp/tsg'
|
|||
const service_xyt = '/gunshiApp/tsg'//登陆先用小玉潭
|
||||
const service_shzh = '/shzh'
|
||||
const apiurl = {
|
||||
gbyj: {
|
||||
list: service_fxdd + "/broadcastStation/list", //广播站
|
||||
page: service_fxdd + "/broadcastWarn/page",
|
||||
mblist: service_fxdd + "/broadcastTemplate/list",
|
||||
bb: service_fxdd + "/broadcastWarn/insert",
|
||||
mbsave: service_fxdd + "/broadcastTemplate/insert",
|
||||
mbDel:service_fxdd + "/broadcastTemplate/del"
|
||||
},
|
||||
zrrgl: {
|
||||
page: service_fxdd + "/resPerson/page",
|
||||
edit: service_fxdd + "/resPerson/update",
|
||||
delete: service_fxdd + "/resPerson/del",
|
||||
save:service_fxdd + "/resPerson/insert",
|
||||
},
|
||||
pxjh: {
|
||||
page: service_fxdd + "/personnelPlan/page",
|
||||
edit: service_fxdd + "/personnelPlan/update",
|
||||
delete: service_fxdd + "/personnelPlan/del",
|
||||
save: service_fxdd + "/personnelPlan/insert",
|
||||
import: service_fxdd + '/personnelPlan/template',
|
||||
export:service_fxdd + "/personnelPlan/download"
|
||||
},
|
||||
pxjl: {
|
||||
page: service_fxdd + "/personnelPlanLog/page",
|
||||
edit: service_fxdd + "/personnelPlanLog/update",
|
||||
delete: service_fxdd + "/personnelPlanLog/del",
|
||||
save: service_fxdd + "/personnelPlanLog/insert",
|
||||
sta: service_fxdd + "/personnelPlanLog/statistics",
|
||||
list: service_fxdd + "/personnelPlan/list",
|
||||
getFile:service_fxdd + "/personnelPlanLog/get"
|
||||
},
|
||||
fxya: {
|
||||
page: service_fxdd + "/resPlanB/list",
|
||||
update: service_fxdd + "/resPlanB/update",
|
||||
|
|
@ -820,6 +851,7 @@ const apiurl = {
|
|||
//
|
||||
//实时雨情
|
||||
ssyq: {
|
||||
maxDrp:service_fxdd + "/attResBase/maxRain",
|
||||
status: service_fxdd + '/xfProjectRun/has/read',
|
||||
basNameList: service_fxdd + '/real/rain/basNameList', //流域选择
|
||||
adnmList: service_fxdd + '/real/rain/adnmList', //行政选择
|
||||
|
|
|
|||
|
|
@ -131,6 +131,17 @@ export async function StcdAndStartTimeAndEndTimeHour(params) {
|
|||
return data;
|
||||
}
|
||||
|
||||
export async function maxDrpUrl(params) {
|
||||
params.startTime=moment(params.startTime).format("YYYY-MM-DD HH:mm:ss")
|
||||
params.endTime=moment(params.endTime).format("YYYY-MM-DD HH:mm:ss")
|
||||
const { data, code, msg } = await httppost(apiurl.ssyq.maxDrp,params) || {};
|
||||
|
||||
if (code !== 200) {
|
||||
message.error(msg || '请求失败');
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
//实时雨情-弹框详情-测站编码查详细雨量
|
||||
export async function queryStPptnDetails(stcd) {
|
||||
const { data, code, msg } = await httpget(apiurl.ssyq.queryStPptnDetails,{stcd}) || {};
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ module.exports = function (app) {
|
|||
'/gunshiApp',
|
||||
createProxyMiddleware({
|
||||
target: 'http://local.gunshiiot.com:18083/',//测试
|
||||
// target: 'http://36.139.207.50:18083/',//正式
|
||||
// target: 'http://192.168.66.199:24105/',//正式
|
||||
// target: 'http://36.139.207.50:18083/',//移动云
|
||||
changeOrigin: true,
|
||||
})
|
||||
|
|
|
|||
|
|
@ -78,6 +78,8 @@ import Gstjfx from "./gxsl/gstjfx"
|
|||
// 视频监控
|
||||
import Spjk from "./video"
|
||||
import AiWarn from "./spjk/aiWarn"
|
||||
// 广播预警
|
||||
import Gbyj from "./gbyj/index"
|
||||
|
||||
|
||||
// 四全
|
||||
|
|
@ -222,6 +224,7 @@ const AppRouters: React.FC = () => {
|
|||
// 视频监控
|
||||
{ path: 'sq/qth/spjk', element: <Spjk /> },
|
||||
{ path: 'sg/gjgl/aigj', element: <AiWarn /> },
|
||||
{ path: 'sg/gjgl/gbyj', element: <Gbyj /> },
|
||||
|
||||
// { path: 'fxzb/zbb', element: <Zbb /> },
|
||||
// { path: 'fxzb/txl', element: <Txl /> },
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import clsx from "clsx";
|
|||
import './index.less'
|
||||
import TableData from './TableData'
|
||||
import drpOption from './drpOption';
|
||||
import {StcdAndStartTimeAndEndTime,StcdAndStartTimeAndEndTimeHour,queryStPptnDetails,queryStStbprpPerDayChart,queryStStbprpPerHourChart} from '../../../../../service/ssyq'
|
||||
import {StcdAndStartTimeAndEndTime,StcdAndStartTimeAndEndTimeHour,queryStPptnDetails,queryStStbprpPerDayChart,queryStStbprpPerHourChart,maxDrpUrl} from '../../../../../service/ssyq'
|
||||
|
||||
const {RangePicker} = DatePicker;
|
||||
|
||||
|
|
@ -22,7 +22,7 @@ function DrpSearch({record}) {
|
|||
const [echartData, setEchartData] = useState({});
|
||||
const [current, setCurrent] = useState(0);
|
||||
const [detail, setDetail] = useState({});
|
||||
|
||||
const [maxDrp, setMaxDrp] = useState({})
|
||||
|
||||
const option = useMemo(() => {
|
||||
return drpOption({echartData});
|
||||
|
|
@ -45,9 +45,11 @@ function DrpSearch({record}) {
|
|||
console.log("params",params);
|
||||
if(current==0){
|
||||
setData(await StcdAndStartTimeAndEndTimeHour(params));
|
||||
setMaxDrp(await maxDrpUrl(params));
|
||||
setEchartData(await queryStStbprpPerHourChart(params));
|
||||
}else{
|
||||
setData(await StcdAndStartTimeAndEndTime(params));
|
||||
setMaxDrp(await maxDrpUrl(params));
|
||||
setEchartData(await queryStStbprpPerDayChart(params));
|
||||
}
|
||||
setDetail(await queryStPptnDetails(record?.stcd))
|
||||
|
|
@ -130,35 +132,35 @@ function DrpSearch({record}) {
|
|||
<div className="footer" style={record?.height?{fontSize:15}:{}}>
|
||||
<div className="footer-row">
|
||||
<div className="footer-item">
|
||||
<div className="footer-name">近1h雨量(mm)</div>
|
||||
<div className="footer-num">{detail?.h1||0}</div>
|
||||
<div className="footer-name">最大1h雨量(mm)</div>
|
||||
<div className="footer-num">{maxDrp?.h1||0}</div>
|
||||
</div>
|
||||
<div className="footer-item">
|
||||
<div className="footer-name">近3h雨量(mm)</div>
|
||||
<div className="footer-num">{detail?.h3||0}</div>
|
||||
<div className="footer-name">最大3h雨量(mm)</div>
|
||||
<div className="footer-num">{maxDrp?.h3||0}</div>
|
||||
</div>
|
||||
<div className="footer-item">
|
||||
<div className="footer-name">近6h雨量(mm)</div>
|
||||
<div className="footer-num">{detail?.h6||0}</div>
|
||||
<div className="footer-name">最大6h雨量(mm)</div>
|
||||
<div className="footer-num">{maxDrp?.h6||0}</div>
|
||||
</div>
|
||||
<div className="footer-item">
|
||||
<div className="footer-name">近12h雨量(mm)</div>
|
||||
<div className="footer-num">{detail?.h12||0}</div>
|
||||
<div className="footer-name">最大12h雨量(mm)</div>
|
||||
<div className="footer-num">{maxDrp?.h12||0}</div>
|
||||
</div>
|
||||
<div className="footer-item">
|
||||
{/* <div className="footer-item">
|
||||
<div className="footer-name">近24h雨量(mm)</div>
|
||||
<div className="footer-num">{detail?.h24||0}</div>
|
||||
</div>
|
||||
</div> */}
|
||||
<div className="footer-item">
|
||||
<div className="footer-name">本年降雨天数</div>
|
||||
<div className="footer-num"><span style={{color:"#E69224"}}>{detail?.yearDrpDay}</span>/{days}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="footer-row">
|
||||
<div className="footer-item">
|
||||
{/* <div className="footer-item">
|
||||
<div className="footer-name">近48h雨量(mm)</div>
|
||||
<div className="footer-num">{detail?.h48||0}</div>
|
||||
</div>
|
||||
</div> */}
|
||||
<div className="footer-item">
|
||||
<div className="footer-name">今日雨量(mm)</div>
|
||||
<div className="footer-num">{detail.today}</div>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,266 @@
|
|||
import React, { useState, useEffect, useMemo,useRef } from 'react'
|
||||
import usePageTable from '../../components/crud/usePageTable2';
|
||||
import { createCrudService } from '../../components/crud/_';
|
||||
import apiurl from '../../service/apiurl';
|
||||
import { httppost2,httpget2 } from '../../utils/request';
|
||||
import CryptoJS from 'crypto-js';
|
||||
import { Card,Table,Button,Radio,Input,Select,Modal,message } from "antd"
|
||||
import ToolBar from "./toolbar"
|
||||
import "./index.less"
|
||||
export default function Gbyj() {
|
||||
const [searchValue, setSearchVal] = useState()
|
||||
const [switchVisible, setSwitchVisible] = useState(false);
|
||||
const [bbParams, setBbParams] = useState({})
|
||||
const [addOpen, setAddOpen] = useState(false)
|
||||
const [mbParams, setMbParams] = useState({})
|
||||
const columns = [
|
||||
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" },
|
||||
{ title: '广播站名称', key: 'name', dataIndex: 'name', width: 200, ellipsis: true },
|
||||
{
|
||||
title: '告警内容', key: 'warnContent', dataIndex: 'warnContent', width: 300,ellipsis: true
|
||||
},
|
||||
{ title: '播报时间', key: 'createTime', dataIndex: 'createTime', width: 200 },
|
||||
{
|
||||
title: '播报人员', key: 'createUserName', dataIndex: 'createUserName', width: 200,ellipsis: true
|
||||
},
|
||||
];
|
||||
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
|
||||
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.gbyj.page).find_noCode);
|
||||
//广播站
|
||||
const [jh, setJh] = useState([])
|
||||
const getJhList = async () => {
|
||||
try {
|
||||
const res = await httppost2(apiurl.gbyj.list)
|
||||
if (res.code == 200) {
|
||||
setJh(res.data.map(item => ({label:item.name,value:item.id})))
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
}
|
||||
}
|
||||
const [mbList, setMbList] = useState([])
|
||||
|
||||
const getMbList = async () => {
|
||||
try {
|
||||
const res = await httppost2(apiurl.gbyj.mblist);
|
||||
if(res.code === 200){
|
||||
setMbList(res.data.map(item=>({label:item.content, value:item.id})));
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 右边添加模版
|
||||
const addMb = async () => {
|
||||
try {
|
||||
const res = await httppost2(apiurl.gbyj.mbsave, { content: bbParams.warnContent });
|
||||
if (res.code == 200) {
|
||||
message.success('添加成功');
|
||||
getMbList();
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
// 左边添加模版
|
||||
const saveMb = async () => {
|
||||
try {
|
||||
const res = await httppost2(apiurl.gbyj.mbsave, mbParams);
|
||||
if (res.code == 200) {
|
||||
message.success('添加成功');
|
||||
getMbList();
|
||||
setAddOpen(false)
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除模版
|
||||
const delMb = async () => {
|
||||
try {
|
||||
const res = await httpget2(apiurl.gbyj.mbDel + `/${bbParams.checkId}`);
|
||||
if (res.code == 200) {
|
||||
message.success('删除成功');
|
||||
getMbList();
|
||||
setBbParams({...bbParams,warnContent:'' })
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
const handleCheck = (e) => {
|
||||
const text = mbList.find(item => item.value == e.target.value)?.label
|
||||
setBbParams({ ...bbParams, warnContent:text,checkId:e.target.value })
|
||||
}
|
||||
|
||||
const gbzChange = (e) => {
|
||||
setBbParams({...bbParams,stationIds:e})
|
||||
}
|
||||
|
||||
const textChange = (e) => {
|
||||
setBbParams({ ...bbParams, warnContent: e.target.value })
|
||||
}
|
||||
|
||||
// 播报
|
||||
|
||||
const playGb = () => {
|
||||
setSwitchVisible(true);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//md5加密
|
||||
const encryptData = (data) => {
|
||||
const encryptedData = CryptoJS.MD5(data).toString();
|
||||
return encryptedData;
|
||||
}
|
||||
// 确认播报
|
||||
const confirmBb = async () => {
|
||||
const name = localStorage.getItem('userName')
|
||||
const id = localStorage.getItem('userId')
|
||||
const params = {
|
||||
...bbParams,
|
||||
ctrlPass: encryptData(bbParams?.ctrlPass),
|
||||
createUserId: id,
|
||||
createUserName: name
|
||||
}
|
||||
try {
|
||||
const res = await httppost2(apiurl.gbyj.bb,params);
|
||||
if (res.code == 200) {
|
||||
setSwitchVisible(false);
|
||||
message.success('播报成功');
|
||||
refresh()
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
useEffect(()=>{
|
||||
const params = {
|
||||
search: {
|
||||
...searchValue,
|
||||
}
|
||||
};
|
||||
search(params)
|
||||
}, [searchValue])
|
||||
|
||||
useEffect(() => {
|
||||
getMbList()
|
||||
getJhList()
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<div className='content-root clearFloat xybm' style={{ paddingRight: "0", paddingBottom: "0" }}>
|
||||
<div className='gb-top'>
|
||||
<div className='gb-top-title'>
|
||||
<span className='gb-top-icon'></span>
|
||||
<span style={{fontSize:18}}>广播预警信息查询</span>
|
||||
</div>
|
||||
<Card className='nonebox'>
|
||||
<ToolBar
|
||||
setSearchVal={setSearchVal}
|
||||
jh={jh}
|
||||
/>
|
||||
</Card>
|
||||
<div className="ant-card-body" style={{padding:"20px 0 0 0"}}>
|
||||
<Table columns={columns} rowKey="inx" {...tableProps} scroll={{ x: width , y: "calc( 100vh - 700px )"}}/>
|
||||
</div>
|
||||
</div>
|
||||
<div className='gb-bottom'>
|
||||
<div className='gb-bottom-left'>
|
||||
<div className='gb-top-title'>
|
||||
<span className='gb-top-icon'></span>
|
||||
<span style={{fontSize:18,marginRight:20}}>广播模板</span>
|
||||
<Button type="primary" onClick={() => setAddOpen(true)}>添加</Button>
|
||||
<Button type="primary" onClick={delMb}>删除</Button>
|
||||
</div>
|
||||
<div className='mb-content'>
|
||||
<Radio.Group
|
||||
style={{display: 'flex', flexDirection: 'column'}}
|
||||
options={mbList}
|
||||
onChange={handleCheck}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className='gb-bottom-right'>
|
||||
<div className='gb-top-title'>
|
||||
<span className='gb-top-icon'></span>
|
||||
<span style={{fontSize:18,marginRight:20}}>编辑播报内容</span>
|
||||
<Button type="primary" onClick={addMb}>添加为模板</Button>
|
||||
</div>
|
||||
<div className='right-content'>
|
||||
<div style={{marginRight:10}}>
|
||||
<Input.TextArea
|
||||
style={{ width: '100%', minHeight: '150px' }}
|
||||
allowClear
|
||||
placeholder='请输入播报内容,或者选择广播模板'
|
||||
value={bbParams.warnContent}
|
||||
onChange={textChange}
|
||||
/>
|
||||
</div>
|
||||
<div style={{ marginTop: 20 }}>
|
||||
<div className='gb-top-title'>
|
||||
<span className='gb-top-icon'></span>
|
||||
<span style={{fontSize:18,marginRight:20}}>选择广播预警站</span>
|
||||
</div>
|
||||
<div className='station-content'>
|
||||
<span>已选择:</span>
|
||||
<Select
|
||||
mode="tags"
|
||||
style={{
|
||||
width: '70%',
|
||||
}}
|
||||
onChange={gbzChange}
|
||||
options={jh}
|
||||
/>
|
||||
<Button type="primary" style={{width:"16%"}} onClick={playGb}>播报</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/* 校验密码 */}
|
||||
<Modal
|
||||
open={switchVisible}
|
||||
width={500}
|
||||
title="输入校验密码"
|
||||
onCancel={()=>{setSwitchVisible(false);}}
|
||||
destroyOnClose
|
||||
onOk={confirmBb}
|
||||
>
|
||||
<div>
|
||||
<div style={{marginBottom:"10px"}}>请输入二次校验密码</div>
|
||||
<div>
|
||||
<Input.Password placeholder='请输入密码' allowClear onChange={(e)=>{setBbParams({...bbParams,ctrlPass:e.target.value})
|
||||
}} />
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
{/* 添加模版 */}
|
||||
<Modal
|
||||
open={addOpen}
|
||||
width={500}
|
||||
title="新增"
|
||||
onCancel={()=>{setAddOpen(false);}}
|
||||
destroyOnClose
|
||||
onOk={saveMb}
|
||||
>
|
||||
<div>
|
||||
<div style={{marginBottom:"10px"}}>请输入模版</div>
|
||||
<div>
|
||||
<Input allowClear onChange={(e)=>{setMbParams({...mbParams,content:e.target.value})
|
||||
}} />
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
|
||||
.gb-top-title{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
column-gap: 10px;
|
||||
margin-bottom: 20px;
|
||||
.gb-top-icon{
|
||||
width: 5px;
|
||||
height: 20px;
|
||||
background-color: #0079fe;
|
||||
}
|
||||
}
|
||||
.gb-bottom{
|
||||
display: flex;
|
||||
// align-items: center;
|
||||
column-gap: 20px;
|
||||
margin-top: 20px;
|
||||
.gb-bottom-left{
|
||||
flex: 1;
|
||||
.mb-content{
|
||||
width: 100%;
|
||||
margin-top: 10px;
|
||||
padding: 10px;
|
||||
height: 300px;
|
||||
overflow-y: auto;
|
||||
border: 1px solid #dfdfdf;
|
||||
.ant-radio-wrapper{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.gb-bottom-right{
|
||||
flex: 1;
|
||||
.right-content{
|
||||
.station-content{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
column-gap: 10px;
|
||||
margin-top: 25px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
import React, { useEffect,useState } from 'react';
|
||||
import { Form, Upload, Button,Row, Col, Input, DatePicker, message,Modal } from 'antd';
|
||||
import apiurl from '../../service/apiurl';
|
||||
import { httppost2 } from '../../utils/request';
|
||||
import moment from 'moment';
|
||||
import NormalSelect from '../../components/Form/NormalSelect';
|
||||
const { RangePicker } = DatePicker;
|
||||
const ToolBar = ({ setSearchVal,jh}) => {
|
||||
const [form] = Form.useForm();
|
||||
|
||||
const onFinish = (values) => {
|
||||
let timeRangeSo;
|
||||
if (values.tm) {
|
||||
timeRangeSo = {
|
||||
start: moment(values.tm[0]).format('YYYY-MM-DD HH:mm:ss'),
|
||||
end: moment(values.tm[1]).format('YYYY-MM-DD HH:mm:ss')
|
||||
}
|
||||
}
|
||||
delete values.tm
|
||||
setSearchVal({...values, timeRangeSo});
|
||||
}
|
||||
return (
|
||||
<>
|
||||
<div style={{display:'flex',justifyContent:'space-between'}}>
|
||||
<Form form={form} className='toolbarBox' layout="inline" onFinish={onFinish}>
|
||||
<Form.Item label="告警内容" name="warnContent">
|
||||
<Input allowClear style={{width:'180px'}}/>
|
||||
</Form.Item>
|
||||
<Form.Item label="告警时间" name="tm">
|
||||
<RangePicker
|
||||
allowClear
|
||||
showTime
|
||||
style={{ width: "350px" }}
|
||||
format={"YYYY-MM-DD HH:mm:ss" }
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="广播站名称" name="stationId">
|
||||
<NormalSelect allowClear style={{ width: '150px' }} options={jh} />
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
<Button type="primary" htmlType="submit">查询</Button>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item>
|
||||
<Button onClick={() => form.resetFields()}>重置</Button>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</div>
|
||||
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default ToolBar;
|
||||
|
|
@ -22,7 +22,7 @@ export default function Sksq() {
|
|||
setSwTableData(await zqrl(stcd));
|
||||
};
|
||||
useEffect(() => {
|
||||
getData({args: "",sources: ["SH", "SW"],})
|
||||
getData({args: "",sources: ["SH", "SW"]})
|
||||
}, [])
|
||||
return (
|
||||
<div className='lf' style={{ height: 'calc(100vh - 168px)', width: "100%" }}>
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import NormalSelect from '../../../components/Form/NormalSelect';
|
|||
import "./index.less"
|
||||
import moment from 'moment';
|
||||
import { createCrudService } from '../../../components/crud/_';
|
||||
import { httpget2, httppost2 } from '../../../utils/request';
|
||||
|
||||
const { RangePicker } = DatePicker
|
||||
const { Dragger } = Upload;
|
||||
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
|
||||
|
|
@ -91,7 +93,18 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
setPdfViewOPen(true)
|
||||
}
|
||||
|
||||
const [jh, setJh] = useState([])
|
||||
const getJhList = async () => {
|
||||
try {
|
||||
const res = await httppost2(apiurl.pxjl.list)
|
||||
if (res.code == 200) {
|
||||
setJh(res.data.map(item => ({label:item.name,value:item.id})))
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -102,17 +115,22 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
}, [record])
|
||||
|
||||
useEffect(() => {
|
||||
if (mode !== "save") {
|
||||
let dataSo = [
|
||||
record.validStartDate? moment(record.validStartDate):'',
|
||||
record.validEndDate? moment(record.validEndDate): ''
|
||||
]
|
||||
getJhList()
|
||||
}, [])
|
||||
|
||||
form.setFieldsValue({...record,dateRangeSo:dataSo})
|
||||
|
||||
}
|
||||
// useEffect(() => {
|
||||
// if (mode !== "save") {
|
||||
// let dataSo = [
|
||||
// record.validStartDate? moment(record.validStartDate):'',
|
||||
// record.validEndDate? moment(record.validEndDate): ''
|
||||
// ]
|
||||
|
||||
}, [record,mode])
|
||||
// form.setFieldsValue({...record,dateRangeSo:dataSo})
|
||||
|
||||
// }
|
||||
|
||||
// }, [record,mode])
|
||||
|
||||
return (
|
||||
<div style={{height:"65vh",overflowY:"auto"}}>
|
||||
|
|
@ -121,21 +139,21 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Form
|
||||
form={form}
|
||||
{...formItemLayout}
|
||||
// initialValues={record}
|
||||
initialValues={record}
|
||||
>
|
||||
<Row>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训计划"
|
||||
name="teamName"
|
||||
name="planId"
|
||||
>
|
||||
<Input disabled={true} style={{width:'100%'}} allowClear />
|
||||
<NormalSelect disabled={mode==='view'} style={{width:'100%'}} allowClear options={jh}/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训分类"
|
||||
name="teamName"
|
||||
name="type"
|
||||
>
|
||||
<NormalSelect disabled={true} style={{ width: '100%' }} allowClear options={types} />
|
||||
</Form.Item>
|
||||
|
|
@ -145,7 +163,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训日期"
|
||||
name="startDate"
|
||||
name="planDate"
|
||||
rules={[{ required: true }]}
|
||||
getValueFromEvent={(e,dateString) => dateString}
|
||||
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
|
||||
|
|
@ -157,7 +175,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="标题名称"
|
||||
name="teamName"
|
||||
name="name"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input disabled={true} style={{width:'100%'}} allowClear />
|
||||
|
|
@ -167,52 +185,59 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
|
||||
<Row>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
<Form.Item
|
||||
label="培训时段"
|
||||
name="address"
|
||||
name="tm"
|
||||
>
|
||||
<Input disabled={true} style={{width:'100%'}} allowClear />
|
||||
<TimePicker.RangePicker
|
||||
disabled={mode === 'view'}
|
||||
style={{ width: '100%' }}
|
||||
allowClear
|
||||
format={"HH:mm:ss"}
|
||||
// value={timeValue}
|
||||
// onChange={(e) => setTimeValue(e)}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
<Form.Item
|
||||
label="培训时长(小时)"
|
||||
name="address"
|
||||
name="hour"
|
||||
>
|
||||
<Input disabled={true} style={{width:'100%'}} allowClear />
|
||||
<InputNumber min={0} disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
<Form.Item
|
||||
label="培训地点"
|
||||
name="remark"
|
||||
name="addr"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input disabled={true} style={{width:'100%'}} allowClear />
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
<Form.Item
|
||||
label="主办单位"
|
||||
name="remark"
|
||||
rules={[{ required: true }]}
|
||||
name="unit"
|
||||
>
|
||||
<Input disabled={true} style={{width:'100%'}} allowClear />
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row>
|
||||
<Col span={24}>
|
||||
<Form.Item
|
||||
<Form.Item
|
||||
label="培训内容"
|
||||
name="remark"
|
||||
name="content"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input.TextArea disabled={true} style={{width:'100%',minHeight:'50px'}} allowClear />
|
||||
<Input.TextArea disabled={mode==='view'} style={{width:'100%',minHeight:'50px'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
@ -220,7 +245,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="培训范围"
|
||||
name="remark"
|
||||
name="scope"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
|
||||
|
|
@ -231,41 +256,41 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
</Row>
|
||||
<Row>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
<Form.Item
|
||||
label="参训人员"
|
||||
name="remark"
|
||||
name="trainees"
|
||||
>
|
||||
<Input min={0} disabled={true} style={{width:'100%'}} allowClear />
|
||||
<InputNumber min={0} disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="参加人数"
|
||||
name="address"
|
||||
label="参训人数"
|
||||
name="numPeople"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input disabled={true} style={{width:'100%'}} allowClear />
|
||||
<InputNumber min={0} disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row>
|
||||
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
<Form.Item
|
||||
label="填报人"
|
||||
name="address"
|
||||
rules={[{ required: true }]}
|
||||
name="applicant"
|
||||
>
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
<Input disabled={true} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="登记日期"
|
||||
name="startDate"
|
||||
name="regDate"
|
||||
rules={[{ required: true }]}
|
||||
getValueFromEvent={(e,dateString) => dateString}
|
||||
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
|
||||
|
||||
>
|
||||
<DatePicker disabled={true} format={'YYYY-MM-DD'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
|
|
|
|||
|
|
@ -47,40 +47,14 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
const [pdfViewOPen, setPdfViewOPen] = useState(false)
|
||||
|
||||
const [loading, setLoading] = useState(false)
|
||||
/**
|
||||
* @description 获取查看时文件
|
||||
* @param {*} type
|
||||
* @returns
|
||||
*/
|
||||
const getFileInfo = (params) => {
|
||||
createCrudService(apiurl.fxzb.qsdw.zq.getFile).delGet({ teamId: params.teamId }).then(res => {
|
||||
if (res.code === 200) {
|
||||
let fileArr = res.data?.files.map(item => {
|
||||
return {
|
||||
name: item.fileName,
|
||||
response: {
|
||||
data: {
|
||||
filePath: item.filePath,
|
||||
fileId:item.fileId
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
setFileList(fileArr)
|
||||
const result = res.data?.details.map(item => ({ ...item, key: item.detailId }))
|
||||
console.log("resss",result);
|
||||
|
||||
setDetails(result)
|
||||
}
|
||||
})
|
||||
}
|
||||
/**
|
||||
* @description 文件下载
|
||||
* @param {String} params 文件fileId
|
||||
*/
|
||||
const download = (params) => {
|
||||
let downloadLink = document.createElement("a");
|
||||
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/rescue/team/file/download/${params}`;
|
||||
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/tsg/personnelPlan/file/download/${params}`;
|
||||
downloadLink.download = `${params.fileName}`;
|
||||
downloadLink.style.display = "none";
|
||||
// 将链接添加到页面中
|
||||
|
|
@ -120,20 +94,18 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
}
|
||||
|
||||
|
||||
const onfinish = () => {
|
||||
let values = form.getFieldsValue();
|
||||
values.details = details;
|
||||
values.validStartDate = values.dateRangeSo&&moment(values.dateRangeSo[0]).format("YYYY-MM-DD")
|
||||
values.validEndDate = values.dateRangeSo&&moment(values.dateRangeSo[1]).format("YYYY-MM-DD")
|
||||
const onfinish = (values) => {
|
||||
values.regDate = moment(values.regDate).format('YYYY-MM-DD')
|
||||
let oldFiles = fileList.map(item => ({fileId:item.response?.data?.fileId }))
|
||||
values.files = oldFiles;
|
||||
if (mode === 'edit') {
|
||||
let oldFiles = fileList.map(item => item.response?.data?.fileId )
|
||||
values.fileIds = oldFiles;
|
||||
values.teamId = record.teamId;
|
||||
onEdit(apiurl.fxzb.qsdw.zq.edit,values)
|
||||
onEdit(apiurl.pxjh.edit,{...record,...values})
|
||||
}
|
||||
if (mode === 'save') {
|
||||
values.fileIds = fileIds
|
||||
onSave(apiurl.fxzb.qsdw.zq.save,values)
|
||||
onSave(apiurl.pxjh.save,values)
|
||||
}
|
||||
if (mode === "similarSave") {
|
||||
onSave(apiurl.pxjh.save,values)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -146,24 +118,31 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
let filterFile = fileList.filter(item => item.response?.data?.fileId !== fileId);
|
||||
setFileList(filterFile)
|
||||
}
|
||||
useEffect(()=>{
|
||||
if (record.teamId ) {
|
||||
getFileInfo(record)
|
||||
}
|
||||
}, [record])
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
if (mode !== "save") {
|
||||
let dataSo = [
|
||||
record.validStartDate? moment(record.validStartDate):'',
|
||||
record.validEndDate? moment(record.validEndDate): ''
|
||||
]
|
||||
|
||||
form.setFieldsValue({...record,dateRangeSo:dataSo})
|
||||
|
||||
if (mode!== "save") {
|
||||
let fileArr = record?.files.map(item => {
|
||||
return {
|
||||
name: item.fileName,
|
||||
response: {
|
||||
data: {
|
||||
filePath: item.filePath,
|
||||
fileId:item.fileId
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
setFileList(fileArr)
|
||||
}
|
||||
}, [mode, record])
|
||||
|
||||
useEffect(() => {
|
||||
const userName = localStorage.getItem('userName')
|
||||
form.setFieldValue("regDate", moment())
|
||||
form.setFieldValue("applicant",userName)
|
||||
}, [])
|
||||
|
||||
}, [record,mode])
|
||||
|
||||
return (
|
||||
<div style={{height:"65vh",overflowY:"auto"}}>
|
||||
|
|
@ -172,13 +151,14 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Form
|
||||
form={form}
|
||||
{...formItemLayout}
|
||||
// initialValues={record}
|
||||
initialValues={record}
|
||||
onFinish={onfinish}
|
||||
>
|
||||
<Row>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训班名称"
|
||||
name="teamName"
|
||||
name="name"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
|
|
@ -187,7 +167,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训班分类"
|
||||
name="teamName"
|
||||
name="type"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<NormalSelect disabled={mode === 'view'} style={{ width: '100%' }} allowClear options={types} />
|
||||
|
|
@ -198,7 +178,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="主办单位"
|
||||
name="remark"
|
||||
name="unit"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
rules={[{ required: true }]}
|
||||
|
|
@ -211,7 +191,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="开始培训日期"
|
||||
name="startDate"
|
||||
name="stm"
|
||||
rules={[{ required: true }]}
|
||||
getValueFromEvent={(e,dateString) => dateString}
|
||||
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
|
||||
|
|
@ -223,7 +203,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="结束培训日期"
|
||||
name="startDate"
|
||||
name="etm"
|
||||
rules={[{ required: true }]}
|
||||
getValueFromEvent={(e,dateString) => dateString}
|
||||
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
|
||||
|
|
@ -238,7 +218,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训天数(天)"
|
||||
name="address"
|
||||
name="day"
|
||||
>
|
||||
<InputNumber min={0} disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -246,7 +226,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训期数(期)"
|
||||
name="address"
|
||||
name="num"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<InputNumber min={0} disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
|
|
@ -257,7 +237,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="培训地点"
|
||||
name="remark"
|
||||
name="addr"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
rules={[{ required: true }]}
|
||||
|
|
@ -270,12 +250,12 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="培训内容"
|
||||
name="remark"
|
||||
name="content"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input.TextArea disabled={mode==='view'} style={{width:'100%',minHeight:'50px'}} allowClear />
|
||||
<Input.TextArea disabled={mode==='view'} style={{width:'100%',minHeight:'100px'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
@ -283,7 +263,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="培训范围"
|
||||
name="remark"
|
||||
name="scope"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
rules={[{ required: true }]}
|
||||
|
|
@ -296,7 +276,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="参训人员"
|
||||
name="remark"
|
||||
name="trainees"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
>
|
||||
|
|
@ -308,7 +288,8 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="参训人数(人)"
|
||||
name="address"
|
||||
name="numPeople"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<InputNumber min={0} disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -316,7 +297,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="联系人"
|
||||
name="address"
|
||||
name="contacts"
|
||||
>
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -326,7 +307,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="联系电话"
|
||||
name="address"
|
||||
name="contactNumber"
|
||||
>
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -334,7 +315,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="填报人"
|
||||
name="address"
|
||||
name="applicant"
|
||||
>
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -344,7 +325,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="状态"
|
||||
name="address"
|
||||
name="status"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<NormalSelect disabled={mode==='view'} style={{width:'100%'}} allowClear options={[{label:"有效",value:1},{label:"无效",value:2}]} />
|
||||
|
|
@ -353,7 +334,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="登记日期"
|
||||
name="startDate"
|
||||
name="regDate"
|
||||
rules={[{ required: true }]}
|
||||
getValueFromEvent={(e,dateString) => dateString}
|
||||
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
|
||||
|
|
@ -378,7 +359,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Dragger
|
||||
name='file'
|
||||
// multiple
|
||||
action="/gunshiApp/xyt/rescue/team/file/upload/singleSimple"
|
||||
action="/gunshiApp/tsg/personnelPlan/file/upload/singleSimple"
|
||||
onChange={fileChange}
|
||||
onDrop={(info) => { console.log(info.dataTransfer.files); }}
|
||||
fileList={fileList}
|
||||
|
|
@ -480,7 +461,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
border: 0,
|
||||
marginTop: 20,
|
||||
}}
|
||||
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xyt/rescue/goods/file/download/${iframeSrc}`)}`}
|
||||
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/tsg/personnelPlan/file/download/${iframeSrc}`)}`}
|
||||
/>
|
||||
</Modal>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -4,13 +4,13 @@ import BasicCrudModal from '../../../components/crud/BasicCrudModal';
|
|||
import { Table, Card,Modal,Image,Input,Button,Row,Col,message } from 'antd';
|
||||
import ToolBar from './toolbar';
|
||||
import ModalForm from './form';
|
||||
import RecordDetails from "./RecordForm"
|
||||
import RecordDetails from "../pxjlgl/form"
|
||||
import apiurl from '../../../service/apiurl';
|
||||
import usePageTable from '../../../components/crud/usePageTable2';
|
||||
import { createCrudService } from '../../../components/crud/_';
|
||||
import { CrudOpRender_text } from '../../../components/crud/CrudOpRender';
|
||||
import { exportFile } from '../../../utils/tools.js';
|
||||
import { httppost5 } from '../../../utils/request';
|
||||
import { httppost5,httpget2 } from '../../../utils/request';
|
||||
|
||||
const Page = () => {
|
||||
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
|
||||
|
|
@ -21,18 +21,21 @@ const Page = () => {
|
|||
const refModal = useRef();
|
||||
const [searchVal, setSearchVal] = useState(false)
|
||||
const [pxRecordOpen, setPxRecordOpen] = useState(false)
|
||||
|
||||
const [qdItem, setQdItem] = useState()
|
||||
const columns = [
|
||||
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" },
|
||||
{ title: '培训班名称', key: 'teamName', dataIndex: 'teamName', width: 200, ellipsis: true },
|
||||
{ title: '培训班名称', key: 'name', dataIndex: 'name', width: 200, ellipsis: true },
|
||||
{
|
||||
title: '计划培训周期', key: 'personCount', dataIndex: 'personCount', width: 200,
|
||||
title: '计划培训周期', key: 'num1', dataIndex: 'num1', width: 200,
|
||||
render: (value, record) => <span>{(record?.stm && record?.etm) ? `${record?.stm}至${record?.etm}` : ''}</span>,
|
||||
},
|
||||
{ title: '主办单位', key: 'address', dataIndex: 'address', width: 200 },
|
||||
{ title: '主办单位', key: 'unit', dataIndex: 'unit', width: 200 },
|
||||
{
|
||||
title: '培训内容', key: 'managementUnit', dataIndex: 'managementUnit', width: 200,ellipsis: true
|
||||
title: '培训内容', key: 'content', dataIndex: 'content', width: 200,ellipsis: true
|
||||
},
|
||||
{ title: '培训地点', key: 'teamLeader', dataIndex: 'teamLeader', width: 150, ellipsis: true },
|
||||
{ title: '填报人', key: 'phone', dataIndex: 'phone', width: 150, ellipsis: true },
|
||||
{ title: '培训地点', key: 'addr', dataIndex: 'addr', width: 150, ellipsis: true },
|
||||
{ title: '填报人', key: 'applicant', dataIndex: 'applicant', width: 150, ellipsis: true },
|
||||
|
||||
{
|
||||
title: '操作', key: 'operation', width: 300, fixed: 'right',align: 'center',
|
||||
|
|
@ -48,23 +51,24 @@ const Page = () => {
|
|||
];
|
||||
const columns1 = [
|
||||
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" },
|
||||
{ title: '培训日期', key: 'teamName', dataIndex: 'teamName', width: 150, ellipsis: true },
|
||||
{ title: '培训日期', key: 'planDate', dataIndex: 'planDate', width: 150, ellipsis: true },
|
||||
{
|
||||
title: '培训时段', key: 'personCount', dataIndex: 'personCount', width: 150,
|
||||
render: (value, record) => <span>{(record?.stm && record?.etm) ? `${record?.stm}至${record?.etm}` : ''}</span>,
|
||||
},
|
||||
{ title: '参加人数', key: 'address', dataIndex: 'address', width: 100 },
|
||||
{ title: '参加人数', key: 'trainees', dataIndex: 'trainees', width: 100 },
|
||||
{
|
||||
title: '参训人员', key: 'managementUnit', dataIndex: 'managementUnit', width: 200,ellipsis: true
|
||||
title: '参训人员', key: 'numPeople', dataIndex: 'numPeople', width: 200,ellipsis: true
|
||||
},
|
||||
{
|
||||
title: '培训签到表', key: 'teamLeader', dataIndex: 'teamLeader', width: 150,
|
||||
render: (value) => <div>{value ? <a onClick={()=>reviewPic(value)}> {value} </a>: ''}</div>
|
||||
render: (value,record) => <div><a onClick={()=>reviewPic(record.files1)}> {record?.files1[0]?.fileName} </a></div>
|
||||
},
|
||||
|
||||
{
|
||||
title: '操作', key: 'operation', width: 100, fixed: 'right',align: 'center',
|
||||
render: (value, row, index) => (
|
||||
<a onClick={() => {setPxRecordOpen(true)}}>查看</a>
|
||||
<a onClick={() => { setPxRecordOpen(true); setQdItem(row)}}>查看</a>
|
||||
)
|
||||
},
|
||||
];
|
||||
|
|
@ -74,6 +78,10 @@ const Page = () => {
|
|||
const [pxOpen, setPxOpen] = useState(false)
|
||||
const [imgVisible, setImgVisible] = useState(false)
|
||||
const [imgList, setImgList] = useState([])
|
||||
const [fileList1, setFileList1] = useState([]) //上传文件列表
|
||||
const [fileList2, setFileList2] = useState([]) //上传文件列表
|
||||
|
||||
|
||||
const reviewPic = (arrPic) => {
|
||||
if (arrPic.length > 0) {
|
||||
setImgVisible(true)
|
||||
|
|
@ -88,19 +96,26 @@ const Page = () => {
|
|||
} else if (type === 'view') {
|
||||
refModal.current.showView(params);
|
||||
} else if (type === 'del') {
|
||||
refModal.current.onDeleteGet(apiurl.fxzb.qsdw.zq.delete + `/${params.teamId}`);
|
||||
refModal.current.onDeleteGet(apiurl.pxjh.delete + `/${params.id}`);
|
||||
}else if (type === 'similarAdd') {
|
||||
refModal.current.showSimilarSave(params);
|
||||
} else {
|
||||
// 培训记录
|
||||
const params1 = {
|
||||
search: {
|
||||
...searchVal,
|
||||
planId:params.id
|
||||
}
|
||||
};
|
||||
setPxOpen(true);
|
||||
// setPxItem
|
||||
search1(params1)
|
||||
// getFileInfo(params)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.fxzb.qsdw.zq.page).find_noCode);
|
||||
const { tableProps:tableProps1, search:search1 } = usePageTable(createCrudService(apiurl.fxzb.qsdw.zq.page).find_noCode);
|
||||
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.pxjh.page).find_noCode);
|
||||
const { tableProps:tableProps1, search:search1 } = usePageTable(createCrudService(apiurl.pxjl.page).find_noCode);
|
||||
|
||||
/**
|
||||
* @description 处理成功的回调
|
||||
|
|
@ -110,14 +125,51 @@ const Page = () => {
|
|||
}
|
||||
|
||||
|
||||
// const getFileInfo = async (params) => {
|
||||
// try {
|
||||
// const res = await httpget2(apiurl.pxjl.getFile + `/${params.id}`)
|
||||
// if (res.code === 200) {
|
||||
// if (res.data?.files1) {
|
||||
// let fileArr1 = res.data?.files1.map(item => {
|
||||
// return {
|
||||
// name: item.fileName,
|
||||
// response: {
|
||||
// data: {
|
||||
// filePath: item.filePath,
|
||||
// fileId: item.fileId
|
||||
// }
|
||||
// },
|
||||
// }
|
||||
// })
|
||||
// setFileList1(fileArr1)
|
||||
// }
|
||||
// if (res.data?.files2) {
|
||||
// let fileArr2 = res.data?.files2.map(item => {
|
||||
// return {
|
||||
// name: item.fileName,
|
||||
// response: {
|
||||
// data: {
|
||||
// filePath: item.filePath,
|
||||
// fileId: item.fileId
|
||||
// }
|
||||
// },
|
||||
// }
|
||||
// })
|
||||
// setFileList2(fileArr2)
|
||||
// }
|
||||
// }
|
||||
// } catch (error) {
|
||||
// console.log(error);
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// 导出
|
||||
const exportExcel = () => {
|
||||
let params = {
|
||||
...searchVal,
|
||||
|
||||
id:1
|
||||
}
|
||||
httppost5(apiurl.gcaqjc.gcaqfx.jrx.export, params).then(res => {
|
||||
httppost5(apiurl.pxjh.export, params).then(res => {
|
||||
exportFile(`培训计划管理.xlsx`,res.data)
|
||||
})
|
||||
}
|
||||
|
|
@ -130,6 +182,18 @@ const Page = () => {
|
|||
search(params)
|
||||
}, [searchVal])
|
||||
|
||||
// const dataSource = useMemo(() => {
|
||||
// if (tableProps1.dataSource.length > 0) {
|
||||
// return tableProps1.dataSource.map(item => ({
|
||||
// ...item,
|
||||
// files1: fileList1,
|
||||
// files2: fileList2,
|
||||
// }))
|
||||
// } else {
|
||||
// return []
|
||||
// }
|
||||
// },[tableProps1.dataSource,fileList1,fileList2])
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
|
|
@ -141,7 +205,7 @@ const Page = () => {
|
|||
onSave={command('save')}
|
||||
role={role}
|
||||
callback={refresh}
|
||||
exportFile={exportExcel}
|
||||
exportFile1={exportExcel}
|
||||
/>
|
||||
</Card>
|
||||
<div className="ant-card-body" style={{padding:"20px 0 0 0"}}>
|
||||
|
|
@ -155,7 +219,6 @@ const Page = () => {
|
|||
title=""
|
||||
component={ModalForm}
|
||||
onCrudSuccess={successCallback}
|
||||
// onCrudSuccess={()=>{refresh({addvcd:localStorage.getItem('ADCD6')})}}
|
||||
/>
|
||||
</div>
|
||||
{/* 培训记录 */}
|
||||
|
|
@ -173,7 +236,7 @@ const Page = () => {
|
|||
columns={columns1}
|
||||
rowKey="inx"
|
||||
{...tableProps1}
|
||||
dataSource={[{teamName:1}]}
|
||||
// dataSource={dataSource}
|
||||
scroll={{ x: width1, y: "calc( 100vh - 400px )" }} />
|
||||
</Modal>
|
||||
|
||||
|
|
@ -189,7 +252,7 @@ const Page = () => {
|
|||
setPxRecordOpen(false);
|
||||
}}
|
||||
>
|
||||
<RecordDetails mode={"view"} record={{}} />
|
||||
<RecordDetails mode={"view"} record={qdItem} />
|
||||
</Modal>
|
||||
<div style={{ display: "none" }}>
|
||||
<Image.PreviewGroup
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@ import { Form, Upload, Button,Row, Col, Input, DatePicker, message,Modal } from
|
|||
import {RightOutlined,LeftOutlined,FileExcelOutlined,DeleteOutlined} from '@ant-design/icons';
|
||||
import { createCrudService } from '../../../components/crud/_';
|
||||
import apiurl from '../../../service/apiurl';
|
||||
import { httppost5 } from '../../../utils/request';
|
||||
import { httpgetExport, httppost5 } from '../../../utils/request';
|
||||
import { exportFile } from '../../../utils/tools';
|
||||
import moment from 'moment';
|
||||
const { Dragger } = Upload;
|
||||
const { RangePicker } = DatePicker;
|
||||
const ToolBar = ({ setSearchVal, onSave, storeData, role = [],callback,exportFile }) => {
|
||||
const ToolBar = ({ setSearchVal, onSave, storeData, role = [],callback,exportFile1 }) => {
|
||||
const [form] = Form.useForm();
|
||||
const addBtn = role?.rule?.find(item => item.menuName == "新增")|| true;
|
||||
const searchBtn = role?.rule?.find(item => item.menuName == "查询") || true;
|
||||
|
|
@ -20,12 +20,12 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role = [],callback,exportFil
|
|||
let dateSo;
|
||||
if (values.tm) {
|
||||
dateSo = {
|
||||
start: moment(values.tm[0]).format('YYYY'),
|
||||
end: moment(values.tm[1]).format('YYYY')
|
||||
stm: moment(values.tm[0]).format('YYYY'),
|
||||
etm: moment(values.tm[1]).format('YYYY')
|
||||
}
|
||||
}
|
||||
delete values.tm
|
||||
setSearchVal({...values, dateSo});
|
||||
setSearchVal({...values, ...dateSo});
|
||||
}
|
||||
|
||||
const beforeUpload = (file) => {
|
||||
|
|
@ -58,7 +58,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role = [],callback,exportFil
|
|||
}
|
||||
|
||||
const downTemplate = ()=>{
|
||||
httppost5(apiurl.rcgl.zbgl.zbb.import, {}).then(res => {
|
||||
httpgetExport(apiurl.pxjh.import, {}).then(res => {
|
||||
exportFile(`培训计划管理.xlsx`,res.data)
|
||||
})
|
||||
}
|
||||
|
|
@ -76,10 +76,10 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role = [],callback,exportFil
|
|||
picker='year'
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="填报人" name="teamName">
|
||||
<Form.Item label="填报人" name="applicant">
|
||||
<Input allowClear style={{width:'150px'}}/>
|
||||
</Form.Item>
|
||||
<Form.Item label="培训班名称" name="teamName">
|
||||
<Form.Item label="培训班名称" name="name">
|
||||
<Input allowClear style={{width:'150px'}}/>
|
||||
</Form.Item>
|
||||
{searchBtn ? <Form.Item>
|
||||
|
|
@ -99,7 +99,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role = [],callback,exportFil
|
|||
<Form.Item>
|
||||
<Button onClick={() => {setExportOPen(true)}}>导入</Button>
|
||||
</Form.Item><Form.Item>
|
||||
<Button onClick={()=>exportFile()}>导出</Button>
|
||||
<Button onClick={()=>exportFile1()}>导出</Button>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</div>
|
||||
|
|
@ -117,7 +117,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role = [],callback,exportFil
|
|||
<Dragger
|
||||
name='file'
|
||||
// multiple
|
||||
action="/gunshiApp/xyt/rota/importData"
|
||||
action="/gunshiApp/tsg/personnelPlan/upload"
|
||||
onChange={fileChange}
|
||||
beforeUpload={beforeUpload}
|
||||
onDrop={(info) => { console.log(info); }}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import React, { useEffect,useState } from 'react';
|
||||
import { Form, Upload, Button,Row, Col, Input, DatePicker, message,Modal } from 'antd';
|
||||
import NormalSelect from '../../../components/Form/NormalSelect';
|
||||
import moment from 'moment';
|
||||
|
||||
const ToolBar = ({ setSearchVal }) => {
|
||||
const [form] = Form.useForm();
|
||||
|
|
@ -14,15 +15,24 @@ const ToolBar = ({ setSearchVal }) => {
|
|||
value: 2
|
||||
},
|
||||
]
|
||||
const valuesChange = (e,allvalue) => {
|
||||
setSearchVal({ ...allvalue,year:moment(allvalue.year).format("YYYY") })
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const value = {teamName:1,year:moment()}
|
||||
form.setFieldsValue(value)
|
||||
setSearchVal({...value,year:moment().format("YYYY")})
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<>
|
||||
<div style={{display:'flex',justifyContent:'space-between'}}>
|
||||
<Form form={form} className='toolbarBox' layout="inline" onValuesChange={(e) => {setSearchVal(e)}}>
|
||||
<Form form={form} className='toolbarBox' layout="inline" onValuesChange={valuesChange}>
|
||||
<Form.Item label="统计维度" name="teamName">
|
||||
<NormalSelect allowClear style={{ width: '150px' }} options={types} />
|
||||
</Form.Item>
|
||||
<Form.Item label="选择年份" name="tm">
|
||||
<Form.Item label="选择年份" name="year">
|
||||
<DatePicker
|
||||
allowClear
|
||||
showTime
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
import React,{useEffect,useState,useMemo,useRef} from 'react';
|
||||
import { Form, Button, Input, Row,Upload, Col, Table, DatePicker, InputNumber,message,Image,Modal,Typography ,Popconfirm } from 'antd';
|
||||
import { Form, Button, Input, Row,Upload, Col, TimePicker, DatePicker, InputNumber,message,Image,Modal,Typography ,Popconfirm } from 'antd';
|
||||
import { DeleteOutlined,FileWordOutlined,FilePdfOutlined,FileZipOutlined,FileExcelOutlined } from '@ant-design/icons';
|
||||
import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps';
|
||||
import apiurl from '../../../service/apiurl';
|
||||
import NormalSelect from '../../../components/Form/NormalSelect';
|
||||
import "./index.less"
|
||||
import moment from 'moment';
|
||||
import dayjs from "dayjs"
|
||||
import { createCrudService } from '../../../components/crud/_';
|
||||
import { httpget2, httppost2 } from '../../../utils/request';
|
||||
const { RangePicker } = DatePicker
|
||||
const { Dragger } = Upload;
|
||||
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
|
||||
|
|
@ -32,22 +34,6 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
value:5
|
||||
},
|
||||
]
|
||||
const jh = [
|
||||
{
|
||||
label: "工程测量业务知识",
|
||||
value:1
|
||||
},
|
||||
{
|
||||
label: "工程管理标准化业务知识",
|
||||
value:2
|
||||
},{
|
||||
label: "消防安全知识培训",
|
||||
value:3
|
||||
},{
|
||||
label: "水雨情测报培训",
|
||||
value:4
|
||||
}
|
||||
]
|
||||
|
||||
const [details, setDetails] = useState([])
|
||||
|
||||
|
|
@ -73,27 +59,43 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
* @param {*} type
|
||||
* @returns
|
||||
*/
|
||||
const getFileInfo = (params) => {
|
||||
createCrudService(apiurl.fxzb.qsdw.zq.getFile).delGet({ teamId: params.teamId }).then(res => {
|
||||
const getFileInfo = async (params) => {
|
||||
try {
|
||||
const res = await httpget2(apiurl.pxjl.getFile + `/${params.id}`)
|
||||
if (res.code === 200) {
|
||||
let fileArr = res.data?.files.map(item => {
|
||||
return {
|
||||
name: item.fileName,
|
||||
response: {
|
||||
data: {
|
||||
filePath: item.filePath,
|
||||
fileId:item.fileId
|
||||
}
|
||||
},
|
||||
if (res.data?.files1) {
|
||||
let fileArr1 = res.data?.files1.map(item => {
|
||||
return {
|
||||
name: item.fileName,
|
||||
response: {
|
||||
data: {
|
||||
filePath: item.filePath,
|
||||
fileId: item.fileId
|
||||
}
|
||||
})
|
||||
setFileList(fileArr)
|
||||
const result = res.data?.details.map(item => ({ ...item, key: item.detailId }))
|
||||
console.log("resss",result);
|
||||
|
||||
setDetails(result)
|
||||
},
|
||||
}
|
||||
})
|
||||
setFileList1(fileArr1)
|
||||
}
|
||||
if (res.data?.files2) {
|
||||
let fileArr = res.data?.files2.map(item => {
|
||||
return {
|
||||
name: item.fileName,
|
||||
response: {
|
||||
data: {
|
||||
filePath: item.filePath,
|
||||
fileId: item.fileId
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
setFileList(fileArr)
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* @description 文件下载
|
||||
|
|
@ -101,7 +103,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
*/
|
||||
const download = (params) => {
|
||||
let downloadLink = document.createElement("a");
|
||||
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/rescue/team/file/download/${params}`;
|
||||
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/tsg/personnelPlanLog/file/download/${params}`;
|
||||
downloadLink.download = `${params.fileName}`;
|
||||
downloadLink.style.display = "none";
|
||||
// 将链接添加到页面中
|
||||
|
|
@ -113,7 +115,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
|
||||
const download1 = (params) => {
|
||||
let downloadLink = document.createElement("a");
|
||||
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/rescue/team/file/download/${params}`;
|
||||
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/tsg/personnelPlanLog/file/download/${params}`;
|
||||
downloadLink.download = `${params.fileName}`;
|
||||
downloadLink.style.display = "none";
|
||||
// 将链接添加到页面中
|
||||
|
|
@ -160,6 +162,8 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
})
|
||||
setFileIds1(fileIds)
|
||||
setFileList1(info.fileList)
|
||||
console.log(info.fileList);
|
||||
|
||||
}
|
||||
/**
|
||||
* @description pdf文件预览
|
||||
|
|
@ -174,20 +178,19 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
setIframeSrc1(params)
|
||||
setPdfViewOPen1(true)
|
||||
}
|
||||
const onfinish = () => {
|
||||
let values = form.getFieldsValue();
|
||||
values.details = details;
|
||||
values.validStartDate = values.dateRangeSo&&moment(values.dateRangeSo[0]).format("YYYY-MM-DD")
|
||||
values.validEndDate = values.dateRangeSo&&moment(values.dateRangeSo[1]).format("YYYY-MM-DD")
|
||||
const onfinish = (values) => {
|
||||
values.stm = values.tm ? values.tm[0].format("HH:mm:ss") : ''
|
||||
values.etm = values.tm ? values.tm[1].format("HH:mm:ss") : ''
|
||||
values.regDate = moment(values.regDate).format('YYYY-MM-DD')
|
||||
const files1 = fileList1.map(item => ({fileId:item.response?.data?.fileId }));
|
||||
const files = fileList.map(item => ({ fileId: item.response?.data?.fileId }));
|
||||
values.files1 = files1;
|
||||
values.files2 = files;
|
||||
if (mode === 'edit') {
|
||||
let oldFiles = fileList.map(item => item.response?.data?.fileId )
|
||||
values.fileIds = oldFiles;
|
||||
values.teamId = record.teamId;
|
||||
onEdit(apiurl.fxzb.qsdw.zq.edit,values)
|
||||
onEdit(apiurl.pxjl.edit,{...record,...values});
|
||||
}
|
||||
if (mode === 'save') {
|
||||
values.fileIds = fileIds
|
||||
onSave(apiurl.fxzb.qsdw.zq.save,values)
|
||||
onSave(apiurl.pxjl.save,values)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -206,24 +209,51 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
let filterFile = fileList1.filter(item => item.response?.data?.fileId !== fileId);
|
||||
setFileList1(filterFile)
|
||||
}
|
||||
useEffect(()=>{
|
||||
if (record.teamId ) {
|
||||
getFileInfo(record)
|
||||
const [jh, setJh] = useState([])
|
||||
const getJhList = async () => {
|
||||
try {
|
||||
const res = await httppost2(apiurl.pxjl.list)
|
||||
if (res.code == 200) {
|
||||
setJh(res.data.map(item => ({label:item.name,value:item.id})))
|
||||
}
|
||||
}, [record])
|
||||
|
||||
useEffect(() => {
|
||||
if (mode !== "save") {
|
||||
let dataSo = [
|
||||
record.validStartDate? moment(record.validStartDate):'',
|
||||
record.validEndDate? moment(record.validEndDate): ''
|
||||
]
|
||||
|
||||
form.setFieldsValue({...record,dateRangeSo:dataSo})
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
const imgbeforeUpload = (file) => {
|
||||
const isJpgOrPng =
|
||||
file.type === 'image/jpeg' ||
|
||||
file.type === 'image/jpg' ||
|
||||
file.type === 'image/png';
|
||||
|
||||
if (!isJpgOrPng) {
|
||||
message.error('请上传图片格式的文件!');
|
||||
}
|
||||
const isLt2M = file.size / 1024 / 1024 < 5;
|
||||
if (!isLt2M) {
|
||||
message.error('图片大小需小于5M!');
|
||||
}
|
||||
return isJpgOrPng && isLt2M ? true : Upload.LIST_IGNORE;
|
||||
};
|
||||
useEffect(()=>{
|
||||
if (mode !== "save") {
|
||||
getFileInfo(record)
|
||||
const momentArr = (record?.stm && record.etm) ? [dayjs("2024-05-06" + record.stm), dayjs("2024-05-06" +record.etm)] : ''
|
||||
form.setFieldValue("tm",momentArr)
|
||||
}
|
||||
}, [record,mode])
|
||||
|
||||
useEffect(() => {
|
||||
const userName = localStorage.getItem('userName')
|
||||
form.setFieldValue("regDate", moment())
|
||||
form.setFieldValue("applicant",userName)
|
||||
getJhList()
|
||||
}, [])
|
||||
|
||||
|
||||
|
||||
}, [record,mode])
|
||||
|
||||
return (
|
||||
<div style={{height:"65vh",overflowY:"auto"}}>
|
||||
|
|
@ -232,13 +262,14 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Form
|
||||
form={form}
|
||||
{...formItemLayout}
|
||||
// initialValues={record}
|
||||
initialValues={record}
|
||||
onFinish={onfinish}
|
||||
>
|
||||
<Row>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训计划"
|
||||
name="teamName"
|
||||
name="planId"
|
||||
>
|
||||
<NormalSelect disabled={mode==='view'} style={{width:'100%'}} allowClear options={jh}/>
|
||||
</Form.Item>
|
||||
|
|
@ -246,7 +277,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训分类"
|
||||
name="teamName"
|
||||
name="type"
|
||||
>
|
||||
<NormalSelect disabled={mode === 'view'} style={{ width: '100%' }} allowClear options={types} />
|
||||
</Form.Item>
|
||||
|
|
@ -256,7 +287,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训日期"
|
||||
name="startDate"
|
||||
name="planDate"
|
||||
rules={[{ required: true }]}
|
||||
getValueFromEvent={(e,dateString) => dateString}
|
||||
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
|
||||
|
|
@ -267,7 +298,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="标题名称"
|
||||
name="teamName"
|
||||
name="name"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input disabled={mode === 'view'} style={{width:'100%'}} allowClear />
|
||||
|
|
@ -279,15 +310,22 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训时段"
|
||||
name="address"
|
||||
name="tm"
|
||||
>
|
||||
<Input disabled={mode === 'view'} style={{width:'100%'}} allowClear />
|
||||
<TimePicker.RangePicker
|
||||
disabled={mode === 'view'}
|
||||
style={{ width: '100%' }}
|
||||
allowClear
|
||||
format={"HH:mm:ss"}
|
||||
// value={timeValue}
|
||||
// onChange={(e) => setTimeValue(e)}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训时长(小时)"
|
||||
name="address"
|
||||
name="hour"
|
||||
>
|
||||
<InputNumber min={0} disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -297,7 +335,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="培训地点"
|
||||
name="remark"
|
||||
name="addr"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
|
|
@ -307,7 +345,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Form.Item
|
||||
label="主办单位"
|
||||
rules={[{ required: true }]}
|
||||
name="remark"
|
||||
name="unit"
|
||||
>
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -317,7 +355,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="培训内容"
|
||||
name="remark"
|
||||
name="content"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
rules={[{ required: true }]}
|
||||
|
|
@ -327,31 +365,21 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
</Col>
|
||||
</Row>
|
||||
<Row>
|
||||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="培训范围"
|
||||
name="remark"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="参训人员"
|
||||
name="remark"
|
||||
name="trainees"
|
||||
>
|
||||
<InputNumber min={0} disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="参加人数"
|
||||
name="address"
|
||||
label="参训人数"
|
||||
name="numPeople"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<InputNumber min={0} disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -363,15 +391,15 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Form.Item
|
||||
label="填报人"
|
||||
rules={[{ required: true }]}
|
||||
name="address"
|
||||
name="applicant"
|
||||
>
|
||||
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
||||
<Input disabled={true} style={{width:'100%'}} allowClear />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="登记日期"
|
||||
name="startDate"
|
||||
name="regDate"
|
||||
rules={[{ required: true }]}
|
||||
getValueFromEvent={(e,dateString) => dateString}
|
||||
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
|
||||
|
|
@ -384,24 +412,25 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="培训签到表"
|
||||
name="fieldId"
|
||||
name="fieldId1"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
>
|
||||
{mode !== "view" &&
|
||||
<Dragger
|
||||
name='file'
|
||||
// multiple
|
||||
action="/gunshiApp/xyt/rescue/team/file/upload/singleSimple"
|
||||
beforeUpload={imgbeforeUpload}
|
||||
action="/gunshiApp/tsg/personnelPlanLog/file/upload/singleSimple"
|
||||
onChange={fileChange1}
|
||||
onDrop={(info) => { console.log(info.dataTransfer.files); }}
|
||||
fileList={fileList1}
|
||||
disabled={loading1}
|
||||
maxCount={1}
|
||||
// onSuccess={handleSuccess}
|
||||
>
|
||||
<p className="ant-upload-text">点击或拖拽文件到此区域上传</p>
|
||||
<p className="ant-upload-text">点击或拖拽文件到此区域上传</p>
|
||||
<p className="ant-upload-hint">
|
||||
支持扩展名:.rar .zip .doc .docx .pdf .jpg .png .ppt
|
||||
支持扩展名:.jpg .png
|
||||
</p>
|
||||
</Dragger>
|
||||
}
|
||||
|
|
@ -450,7 +479,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
}
|
||||
<span>{file.name}</span>
|
||||
</div>
|
||||
<div className={mode == "view" ? 'delete-icon disable-icon' : 'delete-icon'} onClick={() => deleteFile(file.response?.data?.fileId)}>
|
||||
<div className={mode == "view" ? 'delete-icon disable-icon' : 'delete-icon'} onClick={() => deleteFile1(file.response?.data?.fileId)}>
|
||||
<DeleteOutlined />
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -477,7 +506,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
<Dragger
|
||||
name='file'
|
||||
// multiple
|
||||
action="/gunshiApp/xyt/rescue/team/file/upload/singleSimple"
|
||||
action="/gunshiApp/tsg/personnelPlanLog/file/upload/singleSimple"
|
||||
onChange={fileChange}
|
||||
onDrop={(info) => { console.log(info.dataTransfer.files); }}
|
||||
fileList={fileList}
|
||||
|
|
@ -579,7 +608,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
border: 0,
|
||||
marginTop: 20,
|
||||
}}
|
||||
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xyt/rescue/goods/file/download/${iframeSrc}`)}`}
|
||||
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/tsg/personnelPlanLog/file/download/${iframeSrc}`)}`}
|
||||
/>
|
||||
</Modal>
|
||||
|
||||
|
|
@ -600,7 +629,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
border: 0,
|
||||
marginTop: 20,
|
||||
}}
|
||||
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xyt/rescue/goods/file/download/${iframeSrc1}`)}`}
|
||||
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/tsg/personnelPlanLog/file/download/${iframeSrc1}`)}`}
|
||||
/>
|
||||
</Modal>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ import usePageTable from '../../../components/crud/usePageTable2';
|
|||
import { createCrudService } from '../../../components/crud/_';
|
||||
import { CrudOpRender_text } from '../../../components/crud/CrudOpRender';
|
||||
import "./index.less"
|
||||
import { httpget2 } from '../../../utils/request';
|
||||
import moment from 'moment';
|
||||
|
||||
const Page = () => {
|
||||
const role = useSelector(state => state.auth.role);
|
||||
|
|
@ -23,18 +25,18 @@ const Page = () => {
|
|||
const [searchChartVal, setSearchChartVal] = useState(false)
|
||||
const columns = [
|
||||
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" },
|
||||
{ title: '培训日期', key: 'teamName', dataIndex: 'teamName', width: 200, ellipsis: true },
|
||||
{ title: '培训日期', key: 'planDate', dataIndex: 'planDate', width: 200, ellipsis: true },
|
||||
{
|
||||
title: '标题', key: 'personCount', dataIndex: 'personCount', width: 200,ellipsis: true
|
||||
title: '标题', key: 'name', dataIndex: 'name', width: 200,ellipsis: true
|
||||
},
|
||||
{ title: '主办单位', key: 'address', dataIndex: 'address', width: 150 },
|
||||
{ title: '主办单位', key: 'unit', dataIndex: 'unit', width: 150 },
|
||||
{
|
||||
title: '培训内容', key: 'managementUnit', dataIndex: 'managementUnit', width: 200,ellipsis: true
|
||||
title: '培训内容', key: 'content', dataIndex: 'content', width: 200,ellipsis: true
|
||||
},
|
||||
{ title: '参训人员', key: 'teamName', dataIndex: 'teamName', width: 200, ellipsis: true },
|
||||
{ title: '培训地点', key: 'teamLeader', dataIndex: 'teamLeader', width: 150, ellipsis: true },
|
||||
{ title: '填报人', key: 'phone', dataIndex: 'phone', width: 150, ellipsis: true },
|
||||
{ title: '登记日期', key: 'teamLeader', dataIndex: 'teamLeader', width: 150, ellipsis: true },
|
||||
{ title: '参训人员', key: 'trainees', dataIndex: 'trainees', width: 200, ellipsis: true },
|
||||
{ title: '培训地点', key: 'addr', dataIndex: 'addr', width: 150, ellipsis: true },
|
||||
{ title: '填报人', key: 'applicant', dataIndex: 'applicant', width: 150, ellipsis: true },
|
||||
{ title: '登记日期', key: 'regDate', dataIndex: 'regDate', width: 150, ellipsis: true },
|
||||
|
||||
{
|
||||
title: '操作', key: 'operation', width: 200, fixed: 'right',align: 'center',
|
||||
|
|
@ -48,9 +50,7 @@ const Page = () => {
|
|||
];
|
||||
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
|
||||
|
||||
const pxOptions = useMemo(() => {
|
||||
return options()
|
||||
}, [])
|
||||
|
||||
const command = (type) => (params) => {
|
||||
if (type === 'save') {
|
||||
refModal.current.showSave();
|
||||
|
|
@ -59,12 +59,12 @@ const Page = () => {
|
|||
} else if (type === 'view') {
|
||||
refModal.current.showView(params);
|
||||
} else if (type === 'del') {
|
||||
refModal.current.onDeleteGet(apiurl.fxzb.qsdw.zq.delete + `/${params.teamId}`);
|
||||
refModal.current.onDeleteGet(apiurl.pxjl.delete + `/${params.id}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.fxzb.qsdw.zq.page).find_noCode);
|
||||
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.pxjl.page).find_noCode);
|
||||
|
||||
/**
|
||||
* @description 处理成功的回调
|
||||
|
|
@ -73,7 +73,29 @@ const Page = () => {
|
|||
refresh()
|
||||
}
|
||||
|
||||
|
||||
// 获取统计数据
|
||||
const [staData, setStaData] = useState()
|
||||
const pxOptions = useMemo(() => {
|
||||
if (staData) {
|
||||
return options(staData)
|
||||
} else {
|
||||
return options({})
|
||||
}
|
||||
}, [staData])
|
||||
const getStaData = async (params) => {
|
||||
try {
|
||||
const res = await httpget2(apiurl.pxjl.sta + `/${params.year}`)
|
||||
if (res.code == 200) {
|
||||
if (params.teamName == 1) {
|
||||
setStaData({...res.data,list:res.data.list1})
|
||||
} else {
|
||||
setStaData({...res.data,list:res.data.list2})
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(()=>{
|
||||
const params = {
|
||||
|
|
@ -84,6 +106,13 @@ const Page = () => {
|
|||
search(params)
|
||||
}, [searchVal])
|
||||
|
||||
useEffect(() => {
|
||||
if (searchChartVal) {
|
||||
getStaData(searchChartVal)
|
||||
}
|
||||
|
||||
}, [searchChartVal])
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
|
|
@ -96,8 +125,8 @@ const Page = () => {
|
|||
<div className='children-itm'>
|
||||
<span>本年培训期数</span>
|
||||
<span>计划/实际</span>
|
||||
<span><span style={{fontSize:22,fontWeight:"bold"}}>26</span> 期/
|
||||
<span style={{fontSize:22,fontWeight:"bold"}}>26</span> 期</span>
|
||||
<span><span style={{ fontSize: 22, fontWeight: "bold" }}>{ staData?.numberOfPeriods2 ?? 1}</span> 期/
|
||||
<span style={{fontSize:22,fontWeight:"bold"}}>{ staData?.numberOfPeriods1 ?? 1}</span> 期</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
@ -106,15 +135,15 @@ const Page = () => {
|
|||
<div className='children-itm'>
|
||||
<span>本年培训期数</span>
|
||||
<span>计划/实际</span>
|
||||
<span><span style={{fontSize:22,fontWeight:"bold"}}>26</span> 人次/
|
||||
<span style={{fontSize:22,fontWeight:"bold"}}>26</span> 人次</span>
|
||||
<span><span style={{fontSize:22,fontWeight:"bold"}}>{ staData?.personNum2 ?? 1}</span> 人次/
|
||||
<span style={{fontSize:22,fontWeight:"bold"}}>{ staData?.personNum1 ?? 1}</span> 人次</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className='pxrecord-title-right'>
|
||||
<div className='chart-tool'>
|
||||
<ChartToolBar
|
||||
setSearchVal={setSearchVal}
|
||||
setSearchVal={setSearchChartVal}
|
||||
/>
|
||||
</div>
|
||||
<div className='chart-box'>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,25 @@
|
|||
export default function options() {
|
||||
var dataGDP = [900, 500, 1632.33, 1100, 400]
|
||||
var dataGrowth = [2, 2.1, 3, 2.5, 2.1]
|
||||
var xAxisData = ['2019年', '2020年', '2021年', '2022年', '2023年']
|
||||
export default function options(data={}) {
|
||||
const xAxisData = data?.list?.map(item => item.month + "月")
|
||||
const maxCount = data?.list ? Math.ceil(Math.max(...data?.list?.map(obj => [obj.num1,obj.num2]).flat())) : 0
|
||||
const minCount = data?.list ? Math.floor(Math.min(...data?.list?.map(obj => [obj.num1, obj.num2]).flat())) : 100
|
||||
|
||||
const maxRate = data?.list ? Math.ceil(Math.max(...data?.list?.map(obj => obj.rate))) : 0
|
||||
const minRate = data?.list ? Math.floor(Math.min(...data?.list?.map(obj => obj.rate))) : 100
|
||||
return {
|
||||
animation: true,
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
formatter: function (params) {
|
||||
var tooltipText = params[0].name + '<br/>';
|
||||
params.forEach(function (item) {
|
||||
if (item.seriesName === '完成率') {
|
||||
tooltipText += item.marker + ' ' + item.seriesName + ': ' + item.value.toFixed(2) + '%<br/>';
|
||||
} else {
|
||||
tooltipText += item.marker + ' ' + item.seriesName + ': ' + item.value + '<br/>';
|
||||
}
|
||||
});
|
||||
return tooltipText;
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
top: '15%',
|
||||
|
|
@ -32,13 +46,15 @@ export default function options() {
|
|||
axisLabel: {
|
||||
show: true,
|
||||
margin: 14,
|
||||
|
||||
// formatter: '{value}月'
|
||||
}
|
||||
},
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value',
|
||||
offset: 10,
|
||||
min: minCount,
|
||||
max: maxCount,
|
||||
axisTick: {
|
||||
show: false
|
||||
},
|
||||
|
|
@ -55,6 +71,9 @@ export default function options() {
|
|||
{
|
||||
type: 'value',
|
||||
name: '(%)',
|
||||
|
||||
min: minRate,
|
||||
max: maxRate,
|
||||
offset: 10,
|
||||
nameTextStyle: {
|
||||
color: 'rgba(255,255,255,0.5)',
|
||||
|
|
@ -71,7 +90,6 @@ export default function options() {
|
|||
fontSize: 18,
|
||||
formatter: '{value}%'
|
||||
}
|
||||
|
||||
}
|
||||
],
|
||||
series: [
|
||||
|
|
@ -79,7 +97,7 @@ export default function options() {
|
|||
name: '计划期数',
|
||||
type: 'bar',
|
||||
barWidth: 25,
|
||||
data: dataGDP,
|
||||
data: data?.list?.map(item =>item.num2),
|
||||
itemStyle:{
|
||||
color:"#6295fa"
|
||||
}
|
||||
|
|
@ -88,7 +106,7 @@ export default function options() {
|
|||
name: '实际期数',
|
||||
type: 'bar',
|
||||
barWidth: 25,
|
||||
data: dataGDP,
|
||||
data: data?.list?.map(item =>item.num1),
|
||||
itemStyle:{
|
||||
color:"#62daab"
|
||||
}
|
||||
|
|
@ -110,7 +128,7 @@ export default function options() {
|
|||
borderColor: '#5d7092',
|
||||
borderWidth: 2
|
||||
},
|
||||
data: dataGrowth,
|
||||
data: data?.list?.map(item => item.rate),
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,12 +36,12 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role = [],callback,exportFil
|
|||
let dateSo;
|
||||
if (values.tm) {
|
||||
dateSo = {
|
||||
start: moment(values.tm[0]).format('YYYY'),
|
||||
end: moment(values.tm[1]).format('YYYY')
|
||||
stm: moment(values.tm[0]).format('YYYY'),
|
||||
etm: moment(values.tm[1]).format('YYYY')
|
||||
}
|
||||
}
|
||||
delete values.tm
|
||||
setSearchVal({...values, dateSo});
|
||||
setSearchVal({...values, ...dateSo});
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
@ -57,13 +57,13 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role = [],callback,exportFil
|
|||
format={"YYYY-MM-DD"}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="参训人员" name="teamName">
|
||||
<Form.Item label="参训人员" name="trainees">
|
||||
<Input allowClear style={{width:'150px'}}/>
|
||||
</Form.Item>
|
||||
<Form.Item label="主办单位" name="teamName">
|
||||
<Form.Item label="主办单位" name="unit">
|
||||
<Input allowClear style={{width:'150px'}}/>
|
||||
</Form.Item>
|
||||
<Form.Item label="培训分类" name="teamName">
|
||||
<Form.Item label="培训分类" name="type">
|
||||
<NormalSelect allowClear style={{ width: '150px' }} options={types} />
|
||||
</Form.Item>
|
||||
{searchBtn ? <Form.Item>
|
||||
|
|
|
|||
|
|
@ -27,13 +27,12 @@ const ModalForm = ({ mode, record, onEdit, onSave }) => {
|
|||
},
|
||||
]
|
||||
const onFinish = (values) => {
|
||||
|
||||
if (mode === 'edit') {
|
||||
values.id = record.id
|
||||
onEdit(apiurl.fxzb.sxfd.fxtj.edit, values)
|
||||
onEdit(apiurl.zrrgl.edit, values)
|
||||
}
|
||||
if (mode === 'save') {
|
||||
onSave(apiurl.fxzb.sxfd.fxtj.save, values)
|
||||
onSave(apiurl.zrrgl.save, values)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -45,7 +44,7 @@ const ModalForm = ({ mode, record, onEdit, onSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="责任类型"
|
||||
name="title"
|
||||
name="type"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<NormalSelect allowClear style={{ width: '100%' }} options={types} />
|
||||
|
|
@ -54,7 +53,7 @@ const ModalForm = ({ mode, record, onEdit, onSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="姓名"
|
||||
name="period"
|
||||
name="name"
|
||||
rules={[{ required: true }]}
|
||||
>
|
||||
<Input disabled={mode === 'view'} style={{ width: '100%' }} allowClear />
|
||||
|
|
@ -65,7 +64,7 @@ const ModalForm = ({ mode, record, onEdit, onSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="单位"
|
||||
name="org"
|
||||
name="unit"
|
||||
>
|
||||
<Input disabled={mode === 'view'} style={{ width: '100%' }} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -73,7 +72,7 @@ const ModalForm = ({ mode, record, onEdit, onSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="职务"
|
||||
name="tmPred"
|
||||
name="duty"
|
||||
>
|
||||
<Input disabled={mode === 'view'} style={{ width: '100%' }} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -83,7 +82,7 @@ const ModalForm = ({ mode, record, onEdit, onSave }) => {
|
|||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="联系方式"
|
||||
name="tmPred"
|
||||
name="contactInfo"
|
||||
>
|
||||
<Input disabled={mode === 'view'} style={{ width: '100%' }} allowClear />
|
||||
</Form.Item>
|
||||
|
|
@ -92,8 +91,8 @@ const ModalForm = ({ mode, record, onEdit, onSave }) => {
|
|||
<Row>
|
||||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="接收时间"
|
||||
name="tmRecv"
|
||||
label="主要职责"
|
||||
name="dutyBound"
|
||||
labelCol={{ span: 3 }}
|
||||
wrapperCol={{ span: 19 }}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,14 +24,14 @@ const Page = () => {
|
|||
const columns = [
|
||||
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" },
|
||||
{
|
||||
title: '责任类型', key: 'title', dataIndex: 'title', width: 200,
|
||||
title: '责任类型', key: 'type', dataIndex: 'type', width: 200,
|
||||
render: (value) => <span>{types[value]}</span>
|
||||
},
|
||||
{ title: '姓名', key: 'period', dataIndex: 'period', width: 140 },
|
||||
{ title: '单位', key: 'org', dataIndex: 'org', width: 200},
|
||||
{ title: '职务', key: 'tmPred', dataIndex: 'tmPred', width: 150, },
|
||||
{ title: '联系方式', key: 'tmRecv', dataIndex: 'tmRecv', width: 150, },
|
||||
{ title: '主要职责', key: 'tmRecv', dataIndex: 'tmRecv', width: 250,ellipsis: true},
|
||||
{ title: '姓名', key: 'name', dataIndex: 'name', width: 140 },
|
||||
{ title: '单位', key: 'unit', dataIndex: 'unit', width: 200},
|
||||
{ title: '职务', key: 'duty', dataIndex: 'duty', width: 150, },
|
||||
{ title: '联系方式', key: 'contactInfo', dataIndex: 'contactInfo', width: 150, },
|
||||
{ title: '主要职责', key: 'dutyBound', dataIndex: 'dutyBound', width: 250,ellipsis: true},
|
||||
{
|
||||
title: '操作', key: 'operation', width: 150, fixed: 'right',align: 'center',
|
||||
render: (value, row, index) => (<CrudOpRender_text edit={true} del={true} command={(cmd) => () => command(cmd)(row)} />)
|
||||
|
|
@ -48,19 +48,17 @@ const Page = () => {
|
|||
} else if (type === 'view') {
|
||||
refModal.current.showView(params);
|
||||
} else if (type === 'del') {
|
||||
refModal.current.onDeleteGet(apiurl.fxzb.sxfd.fxtj.del + params.id);
|
||||
refModal.current.onDeleteGet(apiurl.zrrgl.delete + `/${params.id}`);
|
||||
}
|
||||
}
|
||||
|
||||
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.hsyb.skhs.page).find_noCode);
|
||||
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.zrrgl.page).find_noCode);
|
||||
|
||||
useEffect(() => {
|
||||
if (searchVal) {
|
||||
const params = {
|
||||
search: {
|
||||
title: searchVal.title || undefined,
|
||||
dateTimeRangeSo: searchVal.dateTimeRangeSo || undefined,
|
||||
tp:2
|
||||
...searchVal
|
||||
}
|
||||
};
|
||||
console.log(searchVal);
|
||||
|
|
@ -85,7 +83,7 @@ const Page = () => {
|
|||
ref={refModal}
|
||||
title=""
|
||||
component={ModalForm}
|
||||
// onCrudSuccess={() => { refresh({ addvcd: localStorage.getItem('ADCD6') }) }}
|
||||
onCrudSuccess={refresh}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
|
|
|
|||
|
|
@ -48,13 +48,13 @@ const ToolBar = ({ setSearchVal, onSave }) => {
|
|||
<>
|
||||
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
||||
<Form form={form} className='toolbarBox' layout="inline" onFinish={onFinish}>
|
||||
<Form.Item label="责任类型" name="title">
|
||||
<Form.Item label="责任类型" name="type">
|
||||
<NormalSelect allowClear style={{ width: '150px' }} options={types} />
|
||||
</Form.Item>
|
||||
<Form.Item label="姓名" name="title">
|
||||
<Form.Item label="姓名" name="name">
|
||||
<Input allowClear style={{ width: '150px' }} />
|
||||
</Form.Item>
|
||||
<Form.Item label="联系方式" name="title">
|
||||
<Form.Item label="联系方式" name="contactInfo">
|
||||
<Input allowClear style={{ width: '150px' }} />
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
|
|
|
|||
Loading…
Reference in New Issue