Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
CivWeb
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
CivWeb
Commits
3830185b
Commit
3830185b
authored
1 year ago
by
周宏民
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 熊猫智慧水务一体化解决方案数据接入
parent
3310254d
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
149 additions
and
44 deletions
+149
-44
base.js
src/api/service/base.js
+10
-4
index.js
src/pages/system/demonstration/components/Bottom/index.js
+62
-21
index.less
src/pages/system/demonstration/components/Bottom/index.less
+17
-3
index.js
src/pages/system/demonstration/components/Left/index.js
+4
-5
index.js
src/pages/system/demonstration/components/Right/index.js
+8
-7
index.js
src/pages/system/demonstration/components/VideoItem/index.js
+1
-1
index.js
src/pages/system/demonstration/index.js
+47
-3
No files found.
src/api/service/base.js
View file @
3830185b
...
...
@@ -42,6 +42,7 @@ export const API = {
IS_OPEN_YANSHI
:
'/PandaCore/GCK/Demonstrate/IsOpenYanshi'
,
// 获取是否开启演示模式服务
GET_WEB_CONFIG
:
'/PandaOMS/OMS/GetIntegratedLoginbyName'
,
GET_WEB_TICKET
:
'/PandaOMS/OMS/GetTicketByToken'
,
GET_ACCOUNT_PAGE_LIST
:
'/PandaWorkFlow/WorkFlow/AccountManage/GetAccountPageList'
,
};
const
services
=
{
...
...
@@ -151,8 +152,8 @@ const services = {
generateToken
:
{
url
:
()
=>
window
.
globalConfig
&&
(
window
.
globalConfig
.
loginTemplate
===
'Dark - IOTMultiLogin.html'
||
window
.
globalConfig
.
loginTemplate
===
'新春 - 智联.html'
)
(
window
.
globalConfig
.
loginTemplate
===
'Dark - IOTMultiLogin.html'
||
window
.
globalConfig
.
loginTemplate
===
'新春 - 智联.html'
)
?
API
.
GENERATE_IOT_TOKEN
:
API
.
GENERATE_TOKEN
,
method
:
constants
.
REQUEST_METHOD_GET
,
...
...
@@ -161,8 +162,8 @@ const services = {
changePassword
:
{
url
:
()
=>
window
.
globalConfig
&&
(
window
.
globalConfig
.
loginTemplate
===
'Dark - IOTMultiLogin.html'
||
window
.
globalConfig
.
loginTemplate
===
'新春 - 智联.html'
)
(
window
.
globalConfig
.
loginTemplate
===
'Dark - IOTMultiLogin.html'
||
window
.
globalConfig
.
loginTemplate
===
'新春 - 智联.html'
)
?
API
.
IOT_CHANGE_PASSWORD
:
API
.
CHANGE_PASSWORD
,
method
:
constants
.
REQUEST_METHOD_GET
,
...
...
@@ -219,6 +220,11 @@ const services = {
method
:
constants
.
REQUEST_METHOD_GET
,
type
:
constants
.
REQUEST_HTTP
,
},
getAccountPageList
:
{
url
:
API
.
GET_ACCOUNT_PAGE_LIST
,
method
:
constants
.
REQUEST_METHOD_POST
,
type
:
constants
.
REQUEST_METHOD_POST
,
},
};
export
const
searchAutoCity
=
keywords
=>
{
...
...
This diff is collapsed.
Click to expand it.
src/pages/system/demonstration/components/Bottom/index.js
View file @
3830185b
...
...
@@ -3,15 +3,16 @@
* @Author: hongmye
* @Date: 2023-12-26 18:34:42
*/
import
{
FullscreenExitOutlined
,
FullscreenOutlined
}
from
'@ant-design/icons'
;
import
{
Button
,
Image
}
from
'antd'
;
import
{
ConfigProvider
,
Image
,
Tooltip
}
from
'antd'
;
import
React
,
{
useMemo
,
useEffect
,
useState
}
from
'react'
;
import
classNames
from
'classnames'
;
import
zhCN
from
'antd/es/locale/zh_CN'
;
import
DataCarousel
from
'../DataCarousel'
;
import
styles
from
'./index.less'
;
const
BottomItem
=
props
=>
{
const
{
title
=
''
,
list
=
[]
}
=
props
;
const
[
listData
,
setListData
]
=
useState
([]);
const
{
title
=
''
,
listData
=
[],
configData
=
[]
}
=
props
;
const
[
list
,
setList
]
=
useState
([]);
const
[
infoData
,
setInfoData
]
=
useState
({});
const
renderNum
=
(
num
,
type
)
=>
{
const
numStr
=
num
?
num
.
toString
()
:
'0'
;
const
arr
=
numStr
.
split
(
''
);
...
...
@@ -29,17 +30,26 @@ const BottomItem = props => {
{
row
.
map
((
col
,
cIndex
)
=>
(
<
div
key
=
{
`
${
rindex
}
-
${
cIndex
}
`
}
className
=
{
styles
.
list_item
}
>
<
div
className
=
{
styles
.
list_item_img_wrap
}
>
<
div
className
=
{
styles
.
list_item_img
}
>
<
Image
/>
<
div
className
=
{
classNames
(
styles
.
list_item_img
,
'list_item_img'
)}
>
<
ConfigProvider
locale
=
{
zhCN
}
>
<
Image
src
=
{
`https://panda-water.cn/CityInterface/rest/services/filedownload.svc/download/
${
col
[
'项目图片'
]
}
`
}
style
=
{{
height
:
'100px'
,
width
:
'100%'
,
overflow
:
'hidden'
}}
/
>
<
/ConfigProvider
>
<
/div
>
<
div
className
=
{
styles
.
list_item_img_tip
}
/
>
{
col
[
'重要程度'
]
===
'样板'
?
<
div
className
=
{
styles
.
list_item_img_tip
}
/> : null
}
<
/div
>
<
div
className
=
{
styles
.
list_item_info_wrap
}
>
<
div
className
=
{
styles
.
list_item_info_tip
}
type
=
"节水"
>
节水
<
div
className
=
{
styles
.
list_item_info_tip
}
type
=
{
col
[
'所属行业'
]}
>
{
col
[
'所属行业'
]}
<
/div
>
<
div
className
=
{
styles
.
list_item_info_name
}
>
崇左市自来水厂崇左市自来水厂
<
/div
>
<
div
className
=
{
styles
.
list_item_info_address
}
>
广西
<
/div
>
<
div
className
=
{
styles
.
list_item_info_name
}
>
<
Tooltip
title
=
{
col
[
'客户名称'
]}
>
{
col
[
'客户名称'
]}
<
/Tooltip
>
<
/div
>
<
div
className
=
{
styles
.
list_item_info_address
}
>
{
col
[
'城市'
]}
<
/div
>
<
/div
>
<
/div
>
))}
...
...
@@ -62,11 +72,40 @@ const BottomItem = props => {
return
reArr
;
};
useEffect
(()
=>
{
setTimeout
(()
=>
{
const
arr
=
Array
(
44
).
fill
({});
setListData
(
spliceArr
(
arr
,
2
));
},
1000
);
},
[]);
const
arr
=
[];
listData
.
forEach
(
i
=>
{
let
str
=
i
[
'所属城市'
];
if
(
i
[
'所属城市'
])
{
const
temp
=
i
[
'所属城市'
].
split
(
'/'
);
str
=
temp
[
1
];
if
(
str
[
str
.
length
-
1
]
===
'市'
)
{
str
=
str
.
slice
(
0
,
str
.
length
-
1
);
}
else
{
str
=
temp
[
0
];
}
}
if
(
str
[
str
.
length
-
1
]
===
'市'
)
{
str
=
str
.
slice
(
0
,
str
.
length
-
1
);
}
i
[
'城市'
]
=
str
;
arr
.
push
(
i
);
});
setList
(
spliceArr
(
arr
,
2
));
},
[
listData
]);
useEffect
(()
=>
{
const
obj
=
{
项目数量
:
''
,
服务客户
:
''
,
覆盖省份
:
''
,
};
configData
.
forEach
(
c
=>
{
if
(
obj
[
c
[
'名称'
]]
===
''
)
{
obj
[
c
[
'名称'
]]
=
c
[
'数值'
];
}
});
setInfoData
(
obj
);
},
[
configData
]);
return
(
<
div
className
=
{
classNames
(
styles
.
bottom_item
,
'demo_bottom_item'
)}
>
<
div
className
=
{
styles
.
left
}
>
...
...
@@ -79,14 +118,14 @@ const BottomItem = props => {
<
div
className
=
{
styles
.
l_item_title
}
type
=
"项目数量"
>
项目数量:
<
/div
>
<
div
className
=
{
styles
.
l_item_num_list
}
>
{
renderNum
(
198
,
'项目数量'
)}
<
/div
>
<
div
className
=
{
styles
.
l_item_num_list
}
>
{
renderNum
(
infoData
[
'项目数量'
]
,
'项目数量'
)}
<
/div
>
<
div
className
=
{
styles
.
l_item_num_unit
}
>
个
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
l_item
}
>
<
div
className
=
{
styles
.
l_item_title
}
type
=
"服务客户"
>
服务客户:
<
/div
>
<
div
className
=
{
styles
.
l_item_num_list
}
>
{
renderNum
(
255
,
'服务客户'
)}
<
/div
>
<
div
className
=
{
styles
.
l_item_num_list
}
>
{
renderNum
(
infoData
[
'服务客户'
]
,
'服务客户'
)}
<
/div
>
<
div
className
=
{
styles
.
l_item_num_unit
}
type
=
"add"
>
+
<
/div
>
...
...
@@ -95,23 +134,25 @@ const BottomItem = props => {
<
div
className
=
{
styles
.
l_item_title
}
type
=
"覆盖省份"
>
覆盖省份:
<
/div
>
<
div
className
=
{
styles
.
l_item_num_list
}
>
{
renderNum
(
30
,
'覆盖省份'
)}
<
/div
>
<
div
className
=
{
styles
.
l_item_num_list
}
>
{
renderNum
(
infoData
[
'覆盖省份'
]
,
'覆盖省份'
)}
<
/div
>
<
div
className
=
{
styles
.
l_item_num_unit
}
type
=
"add"
>
+
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
center
}
>
<
DataCarousel
gap
=
{
1
}
autoplay
=
{
3
000
}
autoplay
=
{
5
000
}
itemHeight
=
{
270
}
list
=
{
list
Data
}
list
=
{
list
}
renderItem
=
{
renderCol
}
config
=
{{
direction
:
'horizontal'
,
width
:
212
,
loop
:
false
,
}}
/
>
<
/div
>
...
...
This diff is collapsed.
Click to expand it.
src/pages/system/demonstration/components/Bottom/index.less
View file @
3830185b
...
...
@@ -142,7 +142,7 @@
.list_item_img_wrap {
width: 100%;
height: 100px;
background: #2474B8
;
overflow: hidden
;
position: relative;
.list_item_img_tip {
...
...
@@ -174,11 +174,11 @@
background: url('@{imgSrc}/供水.png') no-repeat center/100% 100%;
}
.list_item_info_tip[type='农水'] {
.list_item_info_tip[type='农
饮
水'] {
background: url('@{imgSrc}/农水.png') no-repeat center/100% 100%;
}
.list_item_info_tip[type='
节水
'] {
.list_item_info_tip[type='
水利
'] {
background: url('@{imgSrc}/节水.png') no-repeat center/100% 100%;
}
...
...
@@ -234,5 +234,18 @@
width: 212px;
}
}
.list_item_img {
.panda-console-base-image {
width: 100%;
}
img {
width: 100%;
height: 100%;
}
}
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/pages/system/demonstration/components/Left/index.js
View file @
3830185b
...
...
@@ -5,17 +5,16 @@
*/
import
{
Button
}
from
'antd'
;
import
React
,
{
useMemo
,
useEffect
,
useState
,
memo
}
from
'react'
;
import
LoginAction
from
'@/pages/user/login/login'
;
import
{
schemeData
}
from
'../configData'
;
import
styles
from
'./index.less'
;
let
timer
;
const
LeftItem
=
props
=>
{
const
{
title
=
''
,
setSelectKey
,
selectKey
}
=
props
;
const
[
loginAction
,
setAction
]
=
useState
(()
=>
new
LoginAction
(
props
));
const
onSelect
=
row
=>
{
if
(
row
.
title
&&
row
.
title
!==
selectKey
)
{
setSelectKey
(
row
.
title
);
}
};
const
onSelect
=
row
=>
{};
const
onMouseEnter
=
(
item
,
index
)
=>
{
if
(
timer
)
{
...
...
This diff is collapsed.
Click to expand it.
src/pages/system/demonstration/components/Right/index.js
View file @
3830185b
...
...
@@ -3,23 +3,24 @@
* @Author: hongmye
* @Date: 2023-12-26 18:34:42
*/
import
{
Button
}
from
'antd'
;
import
React
,
{
useMemo
,
useEffect
,
useState
,
memo
}
from
'react'
;
import
{
productData
}
from
'../configData'
;
import
styles
from
'./index.less'
;
const
RightItem
=
props
=>
{
const
{
title
=
''
}
=
props
;
const
[
selectKey
,
setSelectKey
]
=
useState
(
''
);
const
{
listData
}
=
props
;
const
renderRow
=
(
row
,
index
)
=>
{
const
rIndex
=
`r_
${
index
%
7
}
`
;
return
(
<
div
className
=
{
styles
.
r_list_item
}
key
=
{
row
.
title
}
rIndex
=
{
rIndex
}
>
<
div
className
=
{
styles
.
r_list_item_title
}
>
{
row
.
title
}
<
/div
>
<
div
className
=
{
styles
.
r_list_item
}
key
=
{
row
[
'产品名称'
]
}
rIndex
=
{
rIndex
}
>
<
div
className
=
{
styles
.
r_list_item_title
}
>
{
row
[
'产品名称'
]
}
<
/div
>
<
div
className
=
{
styles
.
r_list_item_tip
}
/
>
<
/div
>
);
};
const
renderList
=
useMemo
(
()
=>
<
div
className
=
{
styles
.
r_list
}
>
{
listData
.
map
((
row
,
index
)
=>
renderRow
(
row
,
index
))}
<
/div>
,
[
listData
],
);
useEffect
(()
=>
{},
[]);
return
(
<
div
className
=
{
styles
.
right_item
}
>
...
...
@@ -27,7 +28,7 @@ const RightItem = props => {
<
div
className
=
{
styles
.
r_title_sub
}
>
熊猫智慧水务
<
/div
>
<
div
className
=
{
styles
.
r_title
}
>
新产品动态:
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
r_list
}
>
{
productData
.
map
((
row
,
index
)
=>
renderRow
(
row
,
index
))}
<
/div
>
{
renderList
}
<
/div
>
);
};
...
...
This diff is collapsed.
Click to expand it.
src/pages/system/demonstration/components/VideoItem/index.js
View file @
3830185b
...
...
@@ -17,7 +17,7 @@ import 'swiper/components/pagination/pagination.min.css';
import
'swiper/components/effect-coverflow/effect-coverflow.min.css'
;
import
'swiper/swiper.min.css'
;
import
styles
from
'./index.less'
;
const
autoplay
=
0
;
const
autoplay
=
1500
0
;
SwiperCore
.
use
([
Autoplay
,
Pagination
,
Navigation
,
Mousewheel
,
EffectCoverflow
]);
const
VideoItem
=
(
props
,
ref
)
=>
{
const
{
selectKey
=
''
}
=
props
;
...
...
This diff is collapsed.
Click to expand it.
src/pages/system/demonstration/index.js
View file @
3830185b
...
...
@@ -11,6 +11,7 @@ import enterImg from '@/assets/demonstration/进入.png';
import
{
Button
}
from
'antd'
;
import
React
,
{
useMemo
,
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
cloneDeep
,
debounce
}
from
'lodash'
;
import
{
appService
}
from
'@/api'
;
import
useFullScreen
from
'./components/useFullScreen'
;
import
styles
from
'./index.less'
;
import
LeftItem
from
'./components/Left'
;
...
...
@@ -20,6 +21,7 @@ import BottomItem from './components/Bottom';
import
{
platformData
}
from
'./components/configData'
;
const
boxWidth
=
1920
;
const
boxHeight
=
911
;
const
projectType
=
[
'供水'
,
'排水'
,
'农饮水'
,
'水利'
];
const
Demonstration
=
props
=>
{
const
onLineUrl
=
window
.
globalConfig
?.
mainserver
||
'https://panda-water.cn/'
;
const
showFullScreen
=
true
;
...
...
@@ -29,7 +31,10 @@ const Demonstration = props => {
scale
:
1
,
boxHeight
:
911
,
});
const
[
pattern
,
setPattern
]
=
useState
(
false
);
const
[
projectData
,
setProjectData
]
=
useState
([]);
const
[
configData
,
setConfigData
]
=
useState
([]);
const
[
productData
,
setProductData
]
=
useState
([]);
const
[
pattern
,
setPattern
]
=
useState
(
true
);
const
[
ref
,
isFullscreen
,
handleFullScreen
,
handleExitFullScreen
]
=
useFullScreen
(
false
);
// 退出
const
exit
=
()
=>
{
...
...
@@ -85,7 +90,46 @@ const Demonstration = props => {
});
}
};
const
getData
=
()
=>
{
const
req1
=
appService
.
getAccountPageList
({
accountName
:
'项目案例配置表'
,
isAll
:
true
,
sortFields
:
'重要程度'
,
direction
:
'desc'
,
});
const
req2
=
appService
.
getAccountPageList
({
accountName
:
'首页配置台账'
,
isAll
:
true
,
});
const
req3
=
appService
.
getAccountPageList
({
accountName
:
'新产品配置'
,
isAll
:
true
,
sortFields
:
'排序'
,
direction
:
'asc'
,
queryWheres
:
[
{
field
:
'是否显示'
,
type
:
'等于'
,
value
:
'是'
,
},
],
});
Promise
.
all
([
req1
,
req2
,
req3
]).
then
(
result
=>
{
const
dataStr1
=
result
[
0
]?.
data
?.
jsonData
||
''
;
let
data1
=
dataStr1
?
JSON
.
parse
(
dataStr1
)
:
[];
data1
=
data1
.
filter
(
d
=>
projectType
.
includes
(
d
[
'所属行业'
]));
const
dataStr2
=
result
[
1
]?.
data
?.
jsonData
||
''
;
const
data2
=
dataStr2
?
JSON
.
parse
(
dataStr2
)
:
[];
const
dataStr3
=
result
[
2
]?.
data
?.
jsonData
||
''
;
const
data3
=
dataStr3
?
JSON
.
parse
(
dataStr3
)
:
[];
console
.
log
(
'🚀 ~ data3:'
,
data1
,
data2
,
data3
);
setProjectData
(
data1
);
setConfigData
(
data2
);
setProductData
(
data3
);
});
};
useEffect
(()
=>
{
getData
();
window
.
addEventListener
(
'resize'
,
debounce
(
onResize
,
300
));
onResize
();
return
()
=>
{
...
...
@@ -137,7 +181,7 @@ const Demonstration = props => {
<
VideoItem
ref
=
{
videoRef
}
selectKey
=
{
selectKey
}
setSelectKey
=
{
setSelectKey
}
onLineUrl
=
{
onLineUrl
}
/
>
<
/div
>
<
div
className
=
{
styles
.
row_r
}
>
<
RightItem
/>
<
RightItem
listData
=
{
productData
}
/
>
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
center_wrap
}
>
...
...
@@ -145,7 +189,7 @@ const Demonstration = props => {
<
div
className
=
{
styles
.
center
}
>
{
renderCenter
}
<
/div
>
<
/div
>
<
div
className
=
{
styles
.
bottom
}
>
<
BottomItem
/>
<
BottomItem
listData
=
{
projectData
}
configData
=
{
configData
}
/
>
<
/div
>
<
/div
>
<
/div
>
...
...
This diff is collapsed.
Click to expand it.
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