Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
CivManage
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ReactWeb5
CivManage
Commits
981ec204
Commit
981ec204
authored
Jul 31, 2024
by
涂伟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: '维保方案配置日周期新增执行时间选择'
parent
cd608464
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
197 additions
and
5 deletions
+197
-5
AddModalNew.jsx
...s/bsmanager/patrolMaintenance/maintenance/AddModalNew.jsx
+61
-1
BaseTimeConfig.jsx
...trolMaintenance/maintenance/components/BaseTimeConfig.jsx
+112
-4
BaseTimeConfig.less
...rolMaintenance/maintenance/components/BaseTimeConfig.less
+24
-0
No files found.
src/pages/bsmanager/patrolMaintenance/maintenance/AddModalNew.jsx
View file @
981ec204
...
...
@@ -511,6 +511,56 @@ const AddModal = props => {
});
};
function
hasOverlappingIntervals
(
intervals
)
{
if
(
intervals
.
length
<
2
)
{
return
false
;
// 少于两个时间段,不可能有交集
}
// 辅助函数,将时间字符串转换为分钟数
function
timeToMinutes
(
timeStr
)
{
const
[
hours
,
minutes
]
=
timeStr
.
split
(
':'
).
map
(
Number
);
return
hours
*
60
+
minutes
;
}
// 按照开始时间排序,这里使用转换后的分钟数进行比较
intervals
.
sort
((
a
,
b
)
=>
{
const
startA
=
timeToMinutes
(
a
.
beginTime
);
const
startB
=
timeToMinutes
(
b
.
beginTime
);
if
(
startA
===
startB
)
{
// 如果开始时间相同,则按照结束时间排序(也转换为分钟数比较)
return
timeToMinutes
(
a
.
endTime
)
-
timeToMinutes
(
b
.
endTime
);
}
return
startA
-
startB
;
});
// 遍历排序后的数组,检查是否有时间交集
for
(
let
i
=
1
;
i
<
intervals
.
length
;
i
++
)
{
const
current
=
intervals
[
i
];
const
prev
=
intervals
[
i
-
1
];
// 转换当前和前一个时间段的开始和结束时间为分钟数(但这里其实只需比较开始时间)
// 因为排序已经确保了开始时间的顺序
const
currentStart
=
timeToMinutes
(
current
.
beginTime
);
const
prevEnd
=
timeToMinutes
(
prev
.
endTime
);
// 如果当前时间段的开始时间小于等于前一个时间段的结束时间,则存在交集
if
(
currentStart
<
prevEnd
)
{
return
true
;
}
}
// 没有交集
return
false
;
}
const
checkMustData
=
(
arr
)
=>
{
// 使用 some 方法来检查数组中是否有任何项不满足条件
return
arr
.
some
(
item
=>
{
// 检查每个项是否缺少必要的属性
return
!
item
.
name
||
!
item
.
beginTime
||
!
item
.
endTime
;
});
}
const
onSubmit
=
()
=>
{
formAdd
.
validateFields
().
then
(
validate1
=>
{
if
(
validate1
)
{
...
...
@@ -564,7 +614,17 @@ const AddModal = props => {
StartLen
:
Number
(
startLen
),
StartExecLen
:
StartExecLen
,
EndExecLen
:
EndExecLen
,
PlanDetails
:
data
.
PlanDetails
};
if
(
checkMustData
(
data
.
PlanDetails
))
{
message
.
warning
(
'请检查巡检名称和时间是否填写完整!'
);
return
}
if
(
hasOverlappingIntervals
(
data
.
PlanDetails
))
{
message
.
warning
(
'时间区间不可重合!'
);
return
}
console
.
log
(
data
,
hasOverlappingIntervals
(
data
.
PlanDetails
),
'时间校验'
);
obj
.
inOrder
=
obj
.
inOrder
?
1
:
0
;
obj
.
isDynamicCycle
=
obj
.
isDynamicCycle
?
1
:
0
;
if
(
!
obj
.
time
)
{
...
...
@@ -583,7 +643,7 @@ const AddModal = props => {
lastData
.
time
=
true
;
}
obj
.
docycle
=
JSON
.
stringify
(
lastData
);
console
.
log
(
obj
.
docycle
,
'ssssssssssss'
);
console
.
log
(
obj
.
docycle
,
'ssssssssssss'
);
let
arr
=
[];
dataSource
.
forEach
(
i
=>
{
arr
.
push
(
i
.
name
);
...
...
src/pages/bsmanager/patrolMaintenance/maintenance/components/BaseTimeConfig.jsx
View file @
981ec204
...
...
@@ -2,9 +2,10 @@
/* eslint-disable prefer-destructuring */
/* eslint-disable no-else-return */
// 基础信息配置
import
{
Form
,
Radio
,
Select
,
Row
,
Col
,
Switch
,
Tooltip
,
InputNumber
}
from
'antd'
;
import
{
EditOutlined
,
InfoCircleOutlined
}
from
'@ant-design/icons'
;
import
{
Form
,
Radio
,
Select
,
Row
,
Col
,
Switch
,
Tooltip
,
InputNumber
,
Input
,
DatePicker
,
Button
}
from
'antd'
;
import
{
EditOutlined
,
InfoCircleOutlined
,
CloseCircleOutlined
,
PlusCircleOutlined
}
from
'@ant-design/icons'
;
import
React
,
{
useEffect
,
useRef
,
useState
}
from
'react'
;
import
moment
from
'moment'
;
import
styles
from
'./BaseTimeConfig.less'
;
const
provinceData
=
[
'周一'
,
'周二'
,
'周三'
,
'周四'
,
'周五'
,
'周六'
,
'周日'
];
...
...
@@ -17,6 +18,9 @@ const cityData = {
周六
:
[
'周六'
,
'周日'
,
'下周一'
,
'下周二'
,
'下周三'
,
'下周四'
,
'下周五'
],
周日
:
[
'周日'
,
'下周一'
,
'下周二'
,
'下周三'
,
'下周四'
,
'下周五'
,
'下周六'
],
};
const
{
RangePicker
}
=
DatePicker
;
// const [formAdd] = Form.useForm();
// const { Item } = Form;
const
BaseConfig
=
(
props
,
ref
)
=>
{
const
Mobj
=
{
1
:
1
,
...
...
@@ -40,14 +44,37 @@ const BaseConfig = (props, ref) => {
const
[
HourType
,
setHourType
]
=
useState
(
'今'
);
const
[
HourDayType1
,
setHourDayType1
]
=
useState
(
'0'
);
// 时选择-日期
const
[
HourDayType2
,
setHourDayType2
]
=
useState
(
'1'
);
// 时选择-日期
const
[
planDetails
,
setPlanDetails
]
=
useState
([]);
// 日选择-巡检时间段
const
[
show
,
setShow
]
=
useState
(
true
);
// 日选择-巡检时间段
const
handleInputChange
=
(
value
)
=>
{
setOnlineTasks
(
value
);
}
// 生成随机ID
function
generateRandomId
()
{
const
chars
=
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
;
let
randomId
=
''
;
for
(
let
i
=
0
;
i
<
8
;
i
++
)
{
randomId
+=
chars
.
charAt
(
Math
.
floor
(
Math
.
random
()
*
chars
.
length
));
}
return
randomId
;
}
useEffect
(()
=>
{
if
(
props
.
keepTimeData
)
{
console
.
log
(
props
.
keepTimeData
,
'props.keepTimeDataprops.keepTimeData'
);
if
(
props
.
keepTimeData
.
PlanDetails
?.
length
)
{
setPlanDetails
(
props
.
keepTimeData
.
PlanDetails
.
map
((
item
,
index
)
=>
{
return
{
...
item
,
id
:
generateRandomId
()
}
}))
}
else
{
setPlanDetails
([])
}
if
(
props
.
keepTimeData
?.
time
)
{
setVisibleChecked
(
true
);
}
...
...
@@ -99,12 +126,12 @@ const BaseConfig = (props, ref) => {
setValue
(
'day'
);
setCycleLen
(
props
.
keepTimeData
.
CycleLen
);
}
else
if
(
props
.
keepTimeData
?.
Unit
===
'小时'
)
{
console
.
log
(
props
.
keepTimeData
,
'props.keepTimeDataprops.keepTimeDataprops.keepTimeData'
);
console
.
log
(
props
.
keepTimeData
,
'props.keepTimeDataprops.keepTimeDataprops.keepTimeData'
);
setValue
(
'hour'
);
setCycleLen
(
props
.
keepTimeData
.
CycleLen
);
setHourDayType1
(
props
.
keepTimeData
.
StartExecLen
)
setstartLen
(
props
.
keepTimeData
.
StartLen
)
if
(
props
.
keepTimeData
.
EndExecLen
>
23
)
{
if
(
props
.
keepTimeData
.
EndExecLen
>
23
)
{
setHourType
(
'明'
)
setHourDayType2
(
props
.
keepTimeData
.
EndExecLen
-
24
)
}
else
{
...
...
@@ -197,6 +224,7 @@ const BaseConfig = (props, ref) => {
HourDayType1
,
HourDayType2
,
HourType
,
PlanDetails
:
Unit
===
'day'
?
planDetails
:[]
},
}));
const
randerZqsz
=
value
=>
{
...
...
@@ -983,6 +1011,41 @@ const BaseConfig = (props, ref) => {
setVisibleChecked
(
e
);
};
const
changeName
=
(
e
,
item
)
=>
{
console
.
log
(
e
.
target
.
value
,
item
,
'改变咯'
);
const
updatedPlanDetails
=
planDetails
.
map
((
items
)
=>
{
if
(
items
.
id
===
item
.
id
)
{
return
{
...
items
,
name
:
e
.
target
.
value
};
}
return
items
;
});
setPlanDetails
(
updatedPlanDetails
);
}
const
changeTime
=
(
value
,
item
)
=>
{
console
.
log
(
value
,
item
,
value
?
value
[
0
].
format
(
'HH:mm'
):
''
,
'改变咯'
);
const
updatedPlanDetails
=
planDetails
.
map
((
items
)
=>
{
if
(
items
.
id
===
item
.
id
)
{
return
{
...
items
,
beginTime
:
value
?
value
[
0
].
format
(
'HH:mm'
):
''
,
endTime
:
value
?
value
[
1
].
format
(
'HH:mm'
):
''
};
}
return
items
;
});
setPlanDetails
(
updatedPlanDetails
);
}
const
handleAdd
=
()
=>
{
console
.
log
(
'添加咯'
);
setPlanDetails
([...
planDetails
,
{
name
:
``
,
beginTime
:
''
,
endTime
:
''
,
id
:
generateRandomId
()
}])
}
const
handleReduce
=
(
id
)
=>
{
console
.
log
(
id
,
'ididididid'
);
const
newData
=
planDetails
.
filter
(
item
=>
item
.
id
!==
id
)
setPlanDetails
(
newData
)
console
.
log
(
'减少咯'
,
newData
);
}
useEffect
(()
=>
{
console
.
log
(
planDetails
,
'改变咯'
);
},
[
planDetails
])
return
(
<
div
className=
{
styles
.
baseForm
}
>
{
Unit
&&
(
...
...
@@ -1042,6 +1105,51 @@ const BaseConfig = (props, ref) => {
</
Col
>
)
}
{
Unit
===
'day'
&&
(
<
Col
span=
{
24
}
>
<
Form
.
Item
labelCol=
{
{
span
:
5
}
}
name=
""
label=
"执行时间"
>
{
<
div
className=
{
styles
.
dayTime
}
>
{
planDetails
.
map
((
item
,
index
)
=>
(
<
div
key=
{
item
.
id
}
>
<
div
className=
{
styles
.
name
}
>
<
Input
placeholder=
"请输入巡检名称"
allowClear
defaultValue=
{
item
.
name
}
onChange=
{
(
e
)
=>
{
changeName
(
e
,
item
)
}
}
/>
</
div
>
<
div
className=
{
styles
.
time
}
>
<
RangePicker
picker=
"time"
format=
"HH:mm"
onChange=
{
(
value
)
=>
{
changeTime
(
value
,
item
)
}
}
showTime=
{
{
hideDisabledOptions
:
true
,
defaultValue
:
[
item
.
beginTime
?
moment
(
item
.
beginTime
,
'HH:mm'
)
:
''
,
item
.
endTime
?
moment
(
item
.
endTime
,
'HH:mm'
)
:
''
],
}
}
/>
</
div
>
<
div
className=
{
styles
.
close
}
>
<
CloseCircleOutlined
onClick=
{
()
=>
{
handleReduce
(
item
.
id
)
}
}
/>
</
div
>
</
div
>
))
}
<
Button
onClick=
{
handleAdd
}
icon=
{
<
PlusCircleOutlined
/>
}
style=
{
{
marginTop
:
10
,
// marginLeft: 114,
borderRadius
:
'5px'
,
left
:
'100%'
,
transform
:
'translateX(-100%)'
,
}
}
>
添加巡检时间
</
Button
>
</
div
>
}
</
Form
.
Item
>
</
Col
>
)
}
{
visibleChecked
&&
Unit
!==
'day'
&&
(
<
Col
span=
{
24
}
>
<
Form
.
Item
labelCol=
{
{
span
:
5
}
}
name=
"zxsj"
label=
"执行时间"
>
...
...
src/pages/bsmanager/patrolMaintenance/maintenance/components/BaseTimeConfig.less
View file @
981ec204
...
...
@@ -5,7 +5,31 @@
width: 100%;
justify-content: space-between;
margin-top: 15px;
.dayTime {
position: relative;
>div {
display: flex;
align-items: center;
justify-content: center;
gap: 5px;
margin-bottom: 5px;
.name {
flex: 1;
}
.time {
flex: 2;
}
.close:hover {
cursor: pointer;
}
}
}
}
.FormLast {
color: red;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment