Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
web
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
web
Commits
e898a067
提交
e898a067
authored
6月 11, 2023
作者:
翁进城
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/caoyun'
上级
edc44502
17a1dfdd
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
1076 行增加
和
288 行删除
+1076
-288
next.config.js
next.config.js
+18
-18
index.tsx
pages/equipmentLeasing/api/index.tsx
+27
-42
[id].page.tsx
pages/equipmentLeasing/detail/[id].page.tsx
+0
-0
index.tsx
pages/equipmentLeasing/detail/api/index.tsx
+64
-58
index.tsx
...mentLeasing/detail/components/orderForGoods/api/index.tsx
+59
-0
index.tsx
...quipmentLeasing/detail/components/orderForGoods/index.tsx
+247
-0
styled.tsx
...uipmentLeasing/detail/components/orderForGoods/styled.tsx
+303
-0
index.tsx
...ipmentLeasing/detail/components/picture-preview/index.tsx
+112
-93
styled.tsx
pages/equipmentLeasing/detail/styled.tsx
+0
-0
index.page.tsx
pages/equipmentLeasing/index.page.tsx
+47
-21
[id].page.tsx
pages/flyingHandService/detail/[id].page.tsx
+67
-23
index.tsx
pages/flyingHandService/detail/api/index.tsx
+39
-0
styled.tsx
pages/flyingHandService/detail/styled.tsx
+93
-33
index.page.tsx
pages/flyingHandService/index.page.tsx
+0
-0
没有找到文件。
next.config.js
浏览文件 @
e898a067
/** @type {import('next').NextConfig} */
/** @type {import('next').NextConfig} */
let
distDir
=
".dev"
;
//默认输出目录
let
distDir
=
'.dev'
//默认输出目录
if
(
process
.
env
.
NODE_ENV
===
"production"
)
{
if
(
process
.
env
.
NODE_ENV
===
'production'
)
{
//生产环境用另一个目录构建,防止与dev冲突
//生产环境用另一个目录构建,防止与dev冲突
distDir
=
".next"
;
distDir
=
'.next'
}
}
const
nextConfig
=
{
const
nextConfig
=
{
distDir
,
distDir
,
reactStrictMode
:
true
,
reactStrictMode
:
true
,
transpilePackages
:
[
"antd"
],
transpilePackages
:
[
'antd'
],
output
:
"standalone"
,
output
:
'standalone'
,
compiler
:
{
compiler
:
{
styledComponents
:
true
,
styledComponents
:
true
,
},
},
redirects
()
{
redirects
()
{
return
[
return
[
{
{
source
:
"/"
,
source
:
'/'
,
destination
:
"/home"
,
destination
:
'/home'
,
permanent
:
true
,
permanent
:
true
,
},
},
]
;
]
},
},
async
rewrites
()
{
async
rewrites
()
{
return
[
return
[
{
{
source
:
"/local/:path*"
,
source
:
'/local/:path*'
,
//destination: "https://iuav.mmcuav.cn/:path*",
//destination: "https://iuav.mmcuav.cn/:path*",
destination
:
"https://test.iuav.shop/:path*"
,
destination
:
'https://test.iuav.shop/:path*'
,
},
},
]
;
]
},
},
images
:
{
images
:
{
remotePatterns
:
[
remotePatterns
:
[
{
{
protocol
:
"http"
,
protocol
:
'http'
,
hostname
:
"**"
,
hostname
:
'**'
,
},
},
{
{
protocol
:
"https"
,
protocol
:
'https'
,
hostname
:
"**"
,
hostname
:
'**'
,
},
},
],
],
},
},
pageExtensions
:
[
"page.tsx"
,
"page.ts"
,
"page.jsx"
,
"page.js"
],
pageExtensions
:
[
'page.tsx'
,
'page.ts'
,
'page.jsx'
,
'page.js'
],
}
;
}
module
.
exports
=
nextConfig
;
module
.
exports
=
nextConfig
pages/equipmentLeasing/api/index.tsx
浏览文件 @
e898a067
import
request
,
{
Response
}
from
'~/api/request'
;
import
request
,
{
Response
}
from
'~/api/request'
export
interface
ListPageDeviceInfoParams
{
export
interface
ListPageDeviceInfoParams
{
"brandId"
?:
number
,
brandId
?:
number
"districtId"
?:
number
,
districtId
?:
number
"modelId"
?:
number
,
modelId
?:
number
"pageNo"
:
number
,
pageNo
:
number
"pageSize"
:
number
,
pageSize
:
number
"partsId"
?:
number
,
partsId
?:
number
"productCategoryId"
?:
number
,
productCategoryId
?:
number
"qualityId"
?:
number
qualityId
?:
number
}
}
export
interface
Device
{
export
interface
Device
{
id
:
number
,
id
:
number
wareNo
:
string
,
goodsName
:
string
wareTitle
:
string
,
images
:
string
wareTypeId
:
number
,
price
:
number
|
null
wareStatus
:
number
,
minDeposit
:
number
,
minRent
:
number
,
totalStock
:
number
,
totalSale
:
number
,
propInfoId
:
null
,
createTime
:
string
,
wareImgs
:
[
{
id
:
number
,
wareInfoId
:
number
,
imgUrl
:
string
,
imgType
:
number
}
],
tags
:
string
[]
}
}
export
interface
Advertisement
{
export
interface
Advertisement
{
id
:
number
,
id
:
number
imageUrl
:
string
imageUrl
:
string
}
}
export
interface
ListPageDeviceInfoResp
{
export
interface
ListPageDeviceInfoResp
{
"pageNo"
:
1
,
pageNo
:
1
"pageSize"
:
10
,
pageSize
:
10
"list"
:
Array
<
Device
>
,
list
:
Array
<
Device
>
"totalCount"
:
0
,
totalCount
:
0
"totalPage"
:
0
totalPage
:
0
}
}
export
default
{
export
default
{
//web-设备租赁-分页
//web-设备租赁-分页
listPageDeviceInfo
:
(
params
:
ListPageDeviceInfoParams
,
options
=
{}):
Promise
<
Response
<
ListPageDeviceInfoResp
>>
=>
{
listPageDeviceInfo
:
(
return
request
(
'/pms/webDevice/deviceList'
,
'post'
,
params
,
options
)
params
:
ListPageDeviceInfoParams
,
options
=
{}
):
Promise
<
Response
<
ListPageDeviceInfoResp
>>
=>
{
return
request
(
'/pms/product/mall/deviceList'
,
'post'
,
params
,
options
)
},
},
//web-设备租赁-广告
//web-设备租赁-广告
listAdvertisementInfo
:
():
Promise
<
Response
<
Array
<
Advertisement
>>>
=>
{
listAdvertisementInfo
:
():
Promise
<
Response
<
Array
<
Advertisement
>>>
=>
{
return
request
(
'/pms/webDevice/ad'
,
'get'
)
return
request
(
'/pms/webDevice/ad'
,
'get'
)
}
},
}
}
\ No newline at end of file
pages/equipmentLeasing/detail/[id].page.tsx
浏览文件 @
e898a067
差异被折叠。
点击展开。
pages/equipmentLeasing/detail/api/index.tsx
浏览文件 @
e898a067
import
request
,
{
Response
}
from
'~/api/request'
;
import
request
,
{
Response
}
from
'~/api/request'
export
interface
GetWebDeviceDetailParams
{
export
interface
GetWebDeviceDetailParams
{
id
:
number
goodsId
:
number
}
}
export
interface
WareImgsType
{
export
interface
WareImgsType
{
id
:
number
,
id
:
number
wareInfoId
:
number
|
null
,
imgUrl
:
string
imgUrl
:
string
,
imgType
:
number
imgType
:
number
}
}
export
interface
GetWebDeviceDetailResult
{
export
interface
GetWebDeviceDetailResult
{
id
:
number
,
id
:
number
wareNo
:
string
,
images
:
{
wareTitle
:
string
,
id
:
number
wareTypeId
:
number
,
imgUrl
:
string
wareStatus
:
number
,
imgType
:
number
payStatus
:
number
,
}[]
minDeposit
:
number
,
goodsVideo
:
string
maxDeposit
:
number
,
goodsVideoId
:
number
minRent
:
number
,
goodsName
:
string
maxRent
:
number
,
goodsDetail
:
{
totalStock
:
number
,
id
:
number
totalSale
:
number
,
goodsDesc
:
string
skuNum
:
number
,
content
:
string
|
null
tags
:
[
remark
:
string
|
null
string
,
}
string
directoryId
:
number
],
categoryByOne
:
number
wareImgs
:
Array
<
WareImgsType
>
,
categoryByTwo
:
null
warePropDTO
:
number
|
null
,
tag
:
null
wareDetailContent
:
string
|
TrustedHTML
shelfStatus
:
number
goodsSpec
:
{
productSpecList
:
GetWebDeviceWareSkuById
[]
}[]
otherService
?:
{
id
:
number
saleServiceId
:
string
serviceName
:
string
}[]
price
:
number
|
null
goodsNo
:
string
}
}
export
interface
PriceList
{
export
interface
PriceList
{
id
:
number
,
id
:
number
wareInfoId
:
number
,
wareInfoId
:
number
skuInfoId
:
number
,
skuInfoId
:
number
rentPrice
:
number
,
rentPrice
:
number
minDay
:
number
,
minDay
:
number
maxDay
:
number
,
maxDay
:
number
createTime
:
null
createTime
:
null
}
}
export
interface
GetWebDeviceWareSkuById
{
export
interface
GetWebDeviceWareSkuById
{
id
:
number
,
id
:
number
wareInfoId
:
number
,
productSpec
:
number
skuTitle
:
string
,
productSkuId
:
number
rentPrice
:
number
|
null
,
specName
:
string
rentDeposit
:
number
,
specImage
:
string
stockNum
:
number
,
partNo
:
string
saleNum
:
number
,
versionDesc
:
string
createTime
:
string
,
createTime
:
string
|
null
updateTime
:
null
,
productSpecCPQVO
:
string
|
null
skuPriceDTOList
:
Array
<
PriceList
>
,
}
}
export
interface
WebDeviceUpdateParams
{
export
interface
WebDeviceUpdateParams
{
id
?:
number
,
id
?:
number
inventoryId
?:
number
,
inventoryId
?:
number
inventoryUsage
?:
string
,
inventoryUsage
?:
string
startDay
?:
string
startDay
?:
string
endDay
?:
string
,
endDay
?:
string
}
}
export
default
{
export
default
{
//web-设备租赁-详情
//web-设备租赁-详情
listDetailDeviceInfo
:
(
params
:
GetWebDeviceDetailParams
):
Promise
<
Response
<
GetWebDeviceDetailResult
>>
=>
{
listDetailDeviceInfo
:
(
return
request
(
'/pms/webDevice/detail'
,
'get'
,
params
)
params
:
GetWebDeviceDetailParams
},
):
Promise
<
Response
<
GetWebDeviceDetailResult
>>
=>
{
//web-设备租赁-商品
return
request
(
'/pms/product/mall/getLeaseGoodsDetail'
,
'get'
,
params
)
listWareSkuById
:
(
params
:
GetWebDeviceDetailParams
):
Promise
<
Response
<
GetWebDeviceWareSkuById
[]
>>
=>
{
return
request
(
'/pms/appDevice/listWareSkuById'
,
'get'
,
params
)
},
},
//web-设备租赁-立即租赁
//web-设备租赁-立即租赁
listWareSkuUpdate
:
(
params
:
WebDeviceUpdateParams
):
Promise
<
Response
<
number
>>
=>
{
listWareSkuUpdate
:
(
params
:
WebDeviceUpdateParams
):
Promise
<
Response
<
number
>>
=>
{
return
request
(
'/pms/appDevice/update'
,
'post'
,
params
)
return
request
(
'/pms/appDevice/update'
,
'post'
,
params
)
}
},
}
}
\ No newline at end of file
pages/equipmentLeasing/detail/components/orderForGoods/api/index.tsx
0 → 100644
浏览文件 @
e898a067
import
request
,
{
Response
}
from
'~/api/request'
export
interface
GetWebDeviceDetailParams
{
actualPay
:
number
deposit
:
number
endDate
:
string
orderReceipt
:
{
detailAddress
:
string
receiptMethod
:
number
region
:
string
takeName
:
string
takePhone
:
number
}
rentPrice
:
number
returnDate
:
string
shouldPay
:
number
specsId
:
number
startDate
:
string
wareDescription
:
string
wareImg
:
string
wareInfoId
:
number
wareNo
:
string
wareNum
:
number
wareTitle
:
string
remark
?:
string
}
export
interface
WareImgsType
{
id
:
number
imgUrl
:
string
imgType
:
number
}
export
interface
UserAddress
{
id
:
number
takeName
:
string
takePhone
:
string
takeRegion
:
string
takeAddress
:
string
type
:
number
}
export
interface
GetWebDeviceWareSkuById
{
balance
:
number
nickName
:
string
}
export
default
{
//web-地址管理-查询用户地址列表-条件查询
listUserAddress
:
(
params
:
{}):
Promise
<
Response
<
UserAddress
[]
>>
=>
{
return
request
(
'/oms/user-address/selectList'
,
'POST'
,
params
)
},
//web-设备租赁-下单
FeignAddLease
:
(
params
:
GetWebDeviceDetailParams
):
Promise
<
Response
<
GetWebDeviceWareSkuById
[]
>>
=>
{
return
request
(
'/pms/appDevice/listWareSkuById'
,
'post'
,
params
)
},
}
pages/equipmentLeasing/detail/components/orderForGoods/index.tsx
0 → 100644
浏览文件 @
e898a067
import
React
,
{
useEffect
,
useState
}
from
'react'
import
{
OrderForGoodsBox
}
from
'./styled'
import
type
{
FormInstance
,
RadioChangeEvent
}
from
'antd'
import
{
Button
,
Radio
,
Space
,
Input
,
message
}
from
'antd'
import
api
,
{
UserAddress
}
from
'./api'
import
moment
from
'moment'
import
{
ShopDetail
}
from
'../../[id].page'
import
{
GetWebDeviceDetailResult
}
from
'../../api'
const
{
TextArea
}
=
Input
interface
PropsBox
{
setIsorderForGoods
:
(
boolean
:
boolean
)
=>
void
detailData
?:
GetWebDeviceDetailResult
|
null
days
?:
number
shopDetail
?:
ShopDetail
}
export
default
function
OrderForGoods
(
props
:
PropsBox
)
{
const
{
setIsorderForGoods
,
shopDetail
,
days
,
detailData
}
=
props
const
[
value
,
setValue
]
=
useState
(
1
)
const
[
areaValue
,
setAreaValue
]
=
useState
<
string
>
()
const
[
list
,
setList
]
=
useState
<
Array
<
UserAddress
>
|
null
>
()
const
[
detail
,
setDetail
]
=
useState
<
ShopDetail
>
()
const
onChange
=
(
e
:
RadioChangeEvent
)
=>
{
console
.
log
(
'radio checked'
,
e
.
target
.
value
)
setValue
(
e
.
target
.
value
)
}
const
onChangeValue
=
(
index
:
number
)
=>
{
setValue
(
index
)
}
const
detailSumbit
=
()
=>
{
message
.
success
(
'提交成功'
)
console
.
log
(
shopDetail
)
console
.
log
(
list
!
[
value
])
console
.
log
(
areaValue
)
console
.
log
(
detailData
)
console
.
log
(
list
!
[
value
].
takeAddress
)
console
.
log
(
list
!
[
value
].
takeRegion
)
console
.
log
(
list
!
[
value
].
takeName
)
console
.
log
(
Number
(
list
!
[
value
].
takePhone
))
if
(
detailData
&&
shopDetail
&&
list
)
{
const
pushList
=
{
actualPay
:
shopDetail
.
num
*
detailData
.
price
!
,
deposit
:
0
,
endDate
:
moment
(
new
Date
(
shopDetail
.
dateDetail
[
1
])).
format
(
'YYYY-MM-DD'
),
orderReceipt
:
{
detailAddress
:
list
[
value
].
takeAddress
,
receiptMethod
:
0
,
region
:
list
[
value
].
takeRegion
,
takeName
:
list
[
value
].
takeName
,
takePhone
:
Number
(
list
[
value
].
takePhone
),
},
rentPrice
:
shopDetail
.
num
*
detailData
.
price
!
,
returnDate
:
moment
(
new
Date
(
shopDetail
.
dateDetail
[
1
])).
format
(
'YYYY-MM-DD'
),
shouldPay
:
shopDetail
.
num
*
detailData
.
price
!
,
specsId
:
shopDetail
.
id
,
startDate
:
moment
(
new
Date
(
shopDetail
.
dateDetail
[
0
]
!
)).
format
(
'YYYY-MM-DD'
),
wareDescription
:
detailData
.
goodsName
,
wareImg
:
detailData
.
images
[
0
].
imgUrl
,
wareInfoId
:
shopDetail
.
id
,
wareNo
:
detailData
.
goodsNo
,
wareNum
:
shopDetail
.
num
,
wareTitle
:
detailData
.
goodsName
,
remark
:
areaValue
,
}
api
.
FeignAddLease
(
pushList
).
then
((
res
)
=>
{
console
.
log
(
res
)
})
}
// setIsorderForGoods(false)
}
useEffect
(()
=>
{
console
.
log
(
days
)
api
.
listUserAddress
({})
.
then
((
res
)
=>
{
console
.
log
(
res
)
setList
(
res
.
result
)
res
.
result
?.
map
((
item
,
index
)
=>
{
if
(
item
.
type
===
0
)
{
setValue
(
index
)
}
})
})
.
catch
((
err
)
=>
{
console
.
log
(
err
)
})
if
(
shopDetail
)
{
setDetail
(
shopDetail
)
}
},
[])
return
(
<
OrderForGoodsBox
>
<
div
className=
"address"
>
<
div
className=
"top"
>
<
div
className=
"left"
>
确认收货地址
</
div
>
<
div
className=
"right"
>
<
Button
type=
"link"
style=
{
{
color
:
'#007aff'
}
}
>
管理收货地址
</
Button
>
</
div
>
</
div
>
<
div
className=
"bottom"
>
{
list
?.
map
((
item
,
index
)
=>
(
<
div
key=
{
item
.
id
}
className=
{
`item ${value === index ? 'active' : ''}`
}
onClick=
{
()
=>
onChangeValue
(
index
)
}
>
<
div
className=
"left"
>
<
div
className=
"active"
>
<
div
className=
"icon"
></
div
>
<
div
className=
"label"
>
寄送至
</
div
>
</
div
>
<
Radio
.
Group
onChange=
{
onChange
}
value=
{
value
}
>
<
Space
direction=
"vertical"
>
<
Radio
value=
{
index
}
>
{
item
.
takeAddress
}
</
Radio
>
</
Space
>
</
Radio
.
Group
>
</
div
>
{
value
===
index
?
(
<
div
className=
"right"
>
<
Button
type=
"link"
style=
{
{
color
:
'#007aff'
}
}
>
修改地址
</
Button
>
</
div
>
)
:
null
}
</
div
>
))
}
</
div
>
</
div
>
<
div
className=
"info"
>
<
div
className=
"title"
>
确认订单信息
</
div
>
<
div
className=
"table"
>
<
div
className=
"table-title"
>
<
div
className=
"table-item"
style=
{
{
width
:
290
}
}
>
宝贝
</
div
>
<
div
className=
"table-item"
style=
{
{
width
:
130
}
}
>
单价
</
div
>
<
div
className=
"table-item"
style=
{
{
width
:
130
}
}
>
数量
</
div
>
<
div
className=
"table-item"
style=
{
{
width
:
300
}
}
>
租期
</
div
>
<
div
className=
"table-item"
style=
{
{
width
:
135
}
}
>
合计
</
div
>
</
div
>
<
div
className=
"table-body"
>
<
div
className=
"body-item article"
style=
{
{
width
:
290
}
}
>
<
div
className=
"image"
></
div
>
<
div
className=
"right"
>
<
div
className=
"top"
>
智多星航电版智多星航电版智多星航电版智多
</
div
>
<
div
className=
"bottom"
>
商品简介商品简介商品简介商品简介商品简介
</
div
>
</
div
>
</
div
>
<
div
className=
"body-item"
style=
{
{
width
:
130
}
}
>
800.00/天
</
div
>
<
div
className=
"body-item"
style=
{
{
width
:
130
}
}
>
1
</
div
>
<
div
className=
"body-item lease-term"
style=
{
{
width
:
300
}
}
>
{
moment
(
new
Date
(
shopDetail
?.
dateDetail
[
0
]
!
)).
format
(
'YYYY/MM/DD'
)
}
<
div
className=
"num"
>
{
days
}
天
</
div
>
{
moment
(
new
Date
(
shopDetail
?.
dateDetail
[
1
]
!
)).
format
(
'YYYY/MM/DD'
)
}
</
div
>
<
div
className=
"body-item total-price"
style=
{
{
width
:
135
}
}
>
800.00
</
div
>
</
div
>
</
div
>
</
div
>
<
div
className=
"notes"
>
<
div
className=
"left"
>
<
div
className=
"label"
>
备注:
</
div
>
<
TextArea
value=
{
areaValue
}
onChange=
{
(
e
)
=>
setAreaValue
(
e
.
target
.
value
)
}
placeholder=
"请输入备注"
autoSize=
{
{
minRows
:
3
,
maxRows
:
5
}
}
style=
{
{
width
:
385
,
height
:
72
}
}
/>
</
div
>
<
div
className=
"right"
>
<
div
className=
"top"
>
<
div
className=
"font"
>
<
div
className=
"label"
>
运费:
</
div
>
<
div
className=
"value"
>
邮寄到付,由客户自己承担
</
div
>
</
div
>
<
div
className=
"price"
>
200.00
</
div
>
</
div
>
<
div
className=
"bottom"
>
<
div
className=
"font"
>
<
div
className=
"label"
>
押金:
</
div
>
<
div
className=
"value"
>
渠道商可免押金
</
div
>
</
div
>
<
div
className=
"price"
>
1000.00
</
div
>
</
div
>
</
div
>
</
div
>
<
div
className=
"detail-box"
>
<
div
className=
"right-box"
>
<
div
className=
"detail"
>
<
div
className=
"top"
>
<
div
className=
"label"
>
实付款
</
div
>
<
div
className=
"price"
>
¥20000.00
</
div
>
</
div
>
<
div
className=
"bottom"
>
<
div
className=
"value"
>
寄送至
</
div
>
<
div
className=
"value-content"
>
广东省深圳市南山区国际创谷6栋国际创谷6
</
div
>
</
div
>
</
div
>
<
div
className=
"detail-sumbit"
>
<
Button
className=
"btn"
onClick=
{
detailSumbit
}
>
提交订单
</
Button
>
</
div
>
</
div
>
</
div
>
</
OrderForGoodsBox
>
)
}
pages/equipmentLeasing/detail/components/orderForGoods/styled.tsx
0 → 100644
浏览文件 @
e898a067
import
styled
from
'styled-components'
export
const
OrderForGoodsBox
=
styled
.
div
`
box-sizing: border-box;
width: 1000px;
.address {
.top {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #e6e6e6;
height: 30px;
line-height: 30px;
margin-top: 30px;
.left {
font-size: 14px;
font-family: MicrosoftYaHeiUI-Bold, MicrosoftYaHeiUI;
font-weight: bold;
color: #333333;
line-height: 18px;
}
.right {
.btn {
font-size: 14px;
font-family: MicrosoftYaHei;
color: #007aff;
line-height: 19px;
}
}
}
.bottom {
.item {
display: flex;
justify-content: space-between;
align-items: center;
width: 1000px;
height: 48px;
border: 1px solid transparent;
margin-top: 8px;
&.active {
background: #fff1e8;
border-radius: 6px;
border: 1px solid #ff552d;
}
.left {
display: flex;
align-items: center;
justify-content: space-around;
.active {
margin-right: 18px;
display: flex;
.icon {
width: 15px;
height: 22px;
background: #ff552d;
margin-left: 17px;
}
.label {
font-size: 14px;
font-family: MicrosoftYaHei;
color: #000000;
line-height: 19px;
margin-left: 18px;
}
}
}
.right {
margin-right: 22px;
}
}
}
}
.info {
margin-top: 30px;
.title {
font-size: 14px;
font-family: MicrosoftYaHeiUI-Bold, MicrosoftYaHeiUI;
font-weight: bold;
color: #333333;
line-height: 18px;
}
.table {
.table-title {
display: flex;
align-items: center;
width: 1000px;
border-bottom: 1px solid #e6e6e6;
padding: 10px 0;
margin-top: 20px;
.table-item {
text-align: center;
font-size: 14px;
font-family: MicrosoftYaHei;
color: #000000;
line-height: 19px;
}
}
.table-body {
display: flex;
align-items: center;
height: 100px;
margin-top: 10px;
.body-item {
text-align: center;
&.article {
display: flex;
justify-content: space-between;
.image {
width: 80px;
height: 80px;
background-color: pink;
margin-right: 10px;
}
.right {
.top {
width: 171px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #141414;
line-height: 20px;
}
.bottom {
width: 171px;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #929295;
line-height: 17px;
}
}
}
&.lease-term {
display: flex;
align-items: center;
justify-content: center;
.num {
width: 62px;
height: 24px;
background: #ff552d;
border-radius: 2px;
position: relative;
margin: 0 15px;
line-height: 24px;
font-size: 14px;
font-family: MicrosoftYaHei;
color: #ffffff;
&::before {
content: '';
width: 10px;
height: 1px;
background-color: #ff552d;
position: absolute;
left: -10px;
top: 50%;
transform: translateY(-50%);
}
&::after {
content: '';
width: 10px;
height: 1px;
background-color: #ff552d;
position: absolute;
right: -10px;
top: 50%;
transform: translateY(-50%);
}
}
}
&.total-price {
font-size: 14px;
font-family: MicrosoftYaHeiUI-Bold, MicrosoftYaHeiUI;
font-weight: bold;
color: #ff3100;
line-height: 18px;
}
}
}
}
}
.notes {
display: flex;
align-items: center;
justify-content: space-between;
width: 1000px;
height: 110px;
background: #e1efff;
border: 1px solid #d0eaf5;
padding: 0 22px 0 16px;
.left {
display: flex;
align-items: top;
.label {
font-size: 14px;
font-family: MicrosoftYaHei;
color: #000000;
margin-top: 4px;
}
}
.right {
width: 430px;
.top {
display: flex;
align-items: center;
justify-content: space-between;
}
.font {
display: flex;
}
.bottom {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 18px;
}
.label {
font-size: 14px;
font-family: MicrosoftYaHei;
color: #000000;
line-height: 19px;
margin-right: 12px;
}
.value {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #2b2b2b;
line-height: 20px;
}
.price {
font-size: 14px;
font-family: MicrosoftYaHeiUI-Bold, MicrosoftYaHeiUI;
font-weight: bold;
color: #ff3100;
line-height: 18px;
}
}
}
.detail-box {
display: flex;
justify-content: flex-end;
margin-top: 26px;
.right-box {
.detail {
width: 477px;
height: 110px;
border: 1px solid #ff5001;
padding: 16px 19px 19px 19px;
.top {
display: flex;
justify-content: flex-end;
align-items: center;
.label {
font-size: 14px;
font-family: MicrosoftYaHei;
color: #474747;
line-height: 19px;
margin-right: 10px;
}
.price {
font-size: 26px;
font-family: MicrosoftYaHeiUI-Bold, MicrosoftYaHeiUI;
font-weight: bold;
color: #ff552d;
line-height: 33px;
}
}
.bottom {
display: flex;
justify-content: flex-end;
align-items: center;
margin-top: 15px;
.value {
font-size: 12px;
font-family: MicrosoftYaHeiUI-Bold, MicrosoftYaHeiUI;
font-weight: bold;
color: #000000;
line-height: 15px;
margin-right: 10px;
}
.value-content {
font-size: 12px;
font-family: MicrosoftYaHei;
color: #333333;
line-height: 16px;
}
}
}
.detail-sumbit {
display: flex;
justify-content: flex-end;
.btn {
width: 182px;
height: 39px;
background: #ff552d;
border: 1px solid #ff5001;
border-radius: 0;
color: #ffffff;
}
}
}
}
`
pages/equipmentLeasing/detail/components/picture-preview/index.tsx
浏览文件 @
e898a067
import
React
,
{
useState
,
useRef
}
from
'react'
import
React
,
{
useState
,
useRef
}
from
'react'
import
{
Box
}
from
'./styled'
;
import
{
Box
}
from
'./styled'
import
{
LeftOutlined
,
RightOutlined
}
from
'@ant-design/icons'
;
import
{
LeftOutlined
,
RightOutlined
}
from
'@ant-design/icons'
import
{
WareImgsType
}
from
'../../api'
;
import
{
WareImgsType
}
from
'../../api'
interface
ImagesType
{
interface
ImagesType
{
imgList
:
Array
<
WareImgsType
>
imgList
:
Array
<
WareImgsType
>
}
}
export
default
function
PicturePreview
(
props
:
ImagesType
)
{
export
default
function
PicturePreview
(
props
:
ImagesType
)
{
const
{
imgList
}
=
props
const
{
imgList
}
=
props
console
.
log
(
imgList
);
const
mask
=
useRef
<
HTMLDivElement
>
(
null
!
)
const
moveBox
=
useRef
<
HTMLDivElement
>
(
null
!
)
const
big
=
useRef
<
HTMLImageElement
>
(
null
!
)
const
[
moveLeft
,
setMoveLeft
]
=
useState
(
0
)
// 根据这个值设置图片列表向左偏移
// const imgList = [
// 'https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg',
// 'https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg',
// 'https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg',
// 'https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg',
// 'https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg',
// 'https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg',
// 'https://fuss10.elemecdn.com/2/11/6535bcfb26e4c79b48ddde44f4b6fjpeg.jpeg'
// ]
const
[
activeImgIndex
,
setActiveImgIndex
]
=
useState
(
0
)
const
mask
=
useRef
<
HTMLDivElement
>
(
null
!
)
const
moveBox
=
useRef
<
HTMLDivElement
>
(
null
!
)
const
big
=
useRef
<
HTMLImageElement
>
(
null
!
)
const
[
moveLeft
,
setMoveLeft
]
=
useState
(
0
)
// 根据这个值设置图片列表向左偏移
// const imgList = [
// 'https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg',
// 'https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg',
// 'https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg',
// 'https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg',
// 'https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg',
// 'https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg',
// 'https://fuss10.elemecdn.com/2/11/6535bcfb26e4c79b48ddde44f4b6fjpeg.jpeg'
// ]
// 改变预览图
const
[
activeImgIndex
,
setActiveImgIndex
]
=
useState
(
0
)
const
handleChangeImg
=
(
index
:
number
)
=>
{
if
(
index
<=
moveLeft
+
3
)
setActiveImgIndex
(
index
)
// 改变预览图
}
const
handleChangeImg
=
(
index
:
number
)
=>
{
// 移动缩略图
if
(
index
<=
moveLeft
+
3
)
setActiveImgIndex
(
index
)
const
handleSlide
=
(
direction
:
string
)
=>
{
}
//左侧按钮
// 移动缩略图
if
(
direction
==
'left'
)
{
const
handleSlide
=
(
direction
:
string
)
=>
{
moveLeft
==
0
?
setMoveLeft
(
0
)
:
setMoveLeft
((
props
)
=>
props
-
1
)
//左侧按钮
}
else
{
// 右侧按钮
if
(
direction
==
'left'
)
{
if
(
imgList
.
length
>
4
)
{
moveLeft
==
0
?
setMoveLeft
(
0
)
:
setMoveLeft
((
props
)
=>
props
-
1
)
moveLeft
>=
imgList
.
length
-
4
?
setMoveLeft
(
imgList
.
length
-
4
)
:
setMoveLeft
((
props
)
=>
props
+
1
)
}
else
{
}
// 右侧按钮
}
if
(
imgList
.
length
>
4
)
{
}
moveLeft
>=
imgList
.
length
-
4
// 图片放大镜
?
setMoveLeft
(
imgList
.
length
-
4
)
const
handleMouseMove
=
(
event
:
React
.
MouseEvent
<
HTMLDivElement
,
MouseEvent
>
)
=>
{
:
setMoveLeft
((
props
)
=>
props
+
1
)
let
left
=
event
.
nativeEvent
.
offsetX
-
mask
.
current
.
offsetWidth
/
2
;
let
top
=
event
.
nativeEvent
.
offsetY
-
mask
.
current
.
offsetHeight
/
2
;
// 最右侧和最下侧的临界值
const
maxLeft
=
moveBox
.
current
.
offsetWidth
-
mask
.
current
.
offsetWidth
const
maxTop
=
moveBox
.
current
.
offsetHeight
-
mask
.
current
.
offsetHeight
//约束范围
if
(
left
<=
0
)
left
=
0
;
if
(
left
>=
maxLeft
)
left
=
maxLeft
if
(
top
<=
0
)
top
=
0
;
if
(
top
>=
maxTop
)
top
=
maxTop
// 设置放大范围遮罩层位置
mask
.
current
.
style
.
left
=
left
+
"px"
;
mask
.
current
.
style
.
top
=
top
+
"px"
;
// 设置大图图片位置,可以用background代替这个方案,有兴趣可以尝试
big
.
current
.
style
.
left
=
-
3
*
left
+
"px"
;
// 3这个值是 大图除以小图算出来的比例 这里大图是900px 小图是300px
big
.
current
.
style
.
top
=
-
3
*
top
+
"px"
;
}
}
}
}
// 图片放大镜
const
handleMouseMove
=
(
event
:
React
.
MouseEvent
<
HTMLDivElement
,
MouseEvent
>
)
=>
{
let
left
=
event
.
nativeEvent
.
offsetX
-
mask
.
current
.
offsetWidth
/
2
let
top
=
event
.
nativeEvent
.
offsetY
-
mask
.
current
.
offsetHeight
/
2
// 最右侧和最下侧的临界值
const
maxLeft
=
moveBox
.
current
.
offsetWidth
-
mask
.
current
.
offsetWidth
const
maxTop
=
moveBox
.
current
.
offsetHeight
-
mask
.
current
.
offsetHeight
//约束范围
if
(
left
<=
0
)
left
=
0
if
(
left
>=
maxLeft
)
left
=
maxLeft
if
(
top
<=
0
)
top
=
0
if
(
top
>=
maxTop
)
top
=
maxTop
// 设置放大范围遮罩层位置
mask
.
current
.
style
.
left
=
left
+
'px'
mask
.
current
.
style
.
top
=
top
+
'px'
// 设置大图图片位置,可以用background代替这个方案,有兴趣可以尝试
big
.
current
.
style
.
left
=
-
3
*
left
+
'px'
// 3这个值是 大图除以小图算出来的比例 这里大图是900px 小图是300px
big
.
current
.
style
.
top
=
-
3
*
top
+
'px'
}
return
(
return
(
<
Box
>
<
Box
>
<
div
className=
"img_wrapper"
>
<
div
className=
"img_wrapper"
>
<
div
className=
"img_content"
>
<
div
className=
"img_content"
>
{
/* <!-- 蒙层,绑定鼠标事件 --> */
}
{
/* <!-- 蒙层,绑定鼠标事件 --> */
}
<
div
className=
"movebox"
<
div
onMouseMove=
{
(
e
)
=>
handleMouseMove
(
e
)
}
className=
"movebox"
ref=
{
moveBox
}
>
onMouseMove=
{
(
e
)
=>
handleMouseMove
(
e
)
}
</
div
>
ref=
{
moveBox
}
{
/* <!-- 主图 --> */
}
></
div
>
<
img
src=
{
imgList
&&
imgList
[
activeImgIndex
].
imgUrl
}
{
/* <!-- 主图 --> */
}
<
img
src=
{
imgList
&&
imgList
[
activeImgIndex
].
imgUrl
}
className=
"img_small"
className=
"img_small"
alt=
""
/>
alt=
""
{
/* <!-- 放大区域 --> */
}
/>
<
div
className=
"mask"
{
/* <!-- 放大区域 --> */
}
ref=
{
mask
}
></
div
>
<
div
className=
"mask"
ref=
{
mask
}
></
div
>
{
/* <!-- 大图预览图 --> */
}
{
/* <!-- 大图预览图 --> */
}
<
div
className=
"img_big"
>
<
div
className=
"img_big"
>
<
img
src=
{
imgList
&&
imgList
[
activeImgIndex
].
imgUrl
}
<
img
ref=
{
big
}
src=
{
imgList
&&
imgList
[
activeImgIndex
].
imgUrl
}
alt=
""
/>
ref=
{
big
}
</
div
>
alt=
""
/>
</
div
>
</
div
>
</
div
>
{
/* <!-- 缩略图列表 --> */
}
{
/* <!-- 缩略图列表 --> */
}
<
div
className=
"img_list_wrapper"
>
<
div
className=
"img_list_wrapper"
>
{
imgList
?.
length
>
4
&&
<
LeftOutlined
className=
"el-icon-arrow-left"
onClick=
{
()
=>
handleSlide
(
'left'
)
}
/>
}
{
imgList
?.
length
>
4
&&
(
<
div
className=
"img_list_content"
>
<
LeftOutlined
<
div
className=
"img_list"
className=
"el-icon-arrow-left"
style=
{
{
marginLeft
:
-
moveLeft
*
25
+
'%'
}
}
>
onClick=
{
()
=>
handleSlide
(
'left'
)
}
{
/>
imgList
?.
map
((
item
,
index
)
=>
(
)
}
<
img
<
div
className=
"img_list_content"
>
onMouseOver=
{
()
=>
handleChangeImg
(
index
)
}
<
div
key=
{
index
}
className=
"img_list"
className=
{
`${activeImgIndex === index ? 'activeImg' : ''}`
}
style=
{
{
marginLeft
:
-
moveLeft
*
25
+
'%'
}
}
src=
{
item
.
imgUrl
}
>
alt=
""
/>
{
imgList
?.
map
((
item
,
index
)
=>
(
))
<
img
}
onMouseOver=
{
()
=>
handleChangeImg
(
index
)
}
</
div
>
key=
{
index
}
</
div
>
className=
{
`${activeImgIndex === index ? 'activeImg' : ''}`
}
{
imgList
?.
length
>
4
&&
<
RightOutlined
className=
"el-icon-arrow-right"
onClick=
{
()
=>
handleSlide
(
'right'
)
}
/>
}
src=
{
item
.
imgUrl
}
</
div
>
alt=
""
</
div
>
/>
))
}
</
div
>
</
div
>
{
imgList
?.
length
>
4
&&
(
<
RightOutlined
className=
"el-icon-arrow-right"
onClick=
{
()
=>
handleSlide
(
'right'
)
}
/>
)
}
</
div
>
</
div
>
</
Box
>
</
Box
>
)
)
}
}
pages/equipmentLeasing/detail/styled.tsx
浏览文件 @
e898a067
差异被折叠。
点击展开。
pages/equipmentLeasing/index.page.tsx
浏览文件 @
e898a067
...
@@ -11,7 +11,7 @@ import { Box } from './styled'
...
@@ -11,7 +11,7 @@ import { Box } from './styled'
export
async
function
getStaticProps
()
{
export
async
function
getStaticProps
()
{
//获取筛选数据,进行静态渲染
//获取筛选数据,进行静态渲染
return
{
return
{
props
:
{}
props
:
{}
,
}
}
}
}
...
@@ -20,23 +20,31 @@ type Props = {}
...
@@ -20,23 +20,31 @@ type Props = {}
export
default
function
EquipmentLeasing
(
props
:
Props
)
{
export
default
function
EquipmentLeasing
(
props
:
Props
)
{
const
router
=
useRouter
()
const
router
=
useRouter
()
const
filter
=
useRef
<
any
>
()
const
filter
=
useRef
<
any
>
()
const
[
productList
,
setProductList
]
=
useState
(
Array
<
{
element
:
JSX
.
Element
}
>
)
const
[
productList
,
setProductList
]
=
useState
(
const
[
rightProductList
,
setRightProductList
]
=
useState
(
Array
<
{
element
:
JSX
.
Element
}
>
)
Array
<
{
element
:
JSX
.
Element
}
>
)
const
[
rightProductList
,
setRightProductList
]
=
useState
(
Array
<
{
element
:
JSX
.
Element
}
>
)
const
leftDom
=
(
item
:
Device
)
=>
{
const
leftDom
=
(
item
:
Device
)
=>
{
return
(
return
(
<
div
key=
{
item
.
id
}
className=
"item"
onClick=
{
()
=>
router
.
push
(
`/equipmentLeasing/detail/${item.id}`
)
}
>
<
div
key=
{
item
.
id
}
className=
"item"
onClick=
{
()
=>
router
.
push
(
`/equipmentLeasing/detail/${item.id}`
)
}
>
<
div
className=
"item-top"
>
<
div
className=
"item-top"
>
<
div
className=
"item-top-image"
>
<
div
className=
"item-top-image"
>
<
Image
src=
{
item
.
wareImgs
[
0
].
imgUrl
}
alt=
"error"
fill
/>
<
Image
src=
{
item
.
images
}
alt=
"error"
fill
/>
</
div
>
</
div
>
</
div
>
</
div
>
<
div
className=
"item-bottom"
>
<
div
className=
"item-bottom"
>
<
div
className=
"item-bottom-title"
title=
{
item
.
wareTitl
e
}
>
<
div
className=
"item-bottom-title"
title=
{
item
.
goodsNam
e
}
>
{
item
.
wareTitl
e
}
{
item
.
goodsNam
e
}
</
div
>
</
div
>
<
div
className=
"item-bottom-price"
>
<
div
className=
"item-bottom-price"
>
<
span
className=
"money"
>
¥
{
item
.
minRent
}
</
span
>
<
span
className=
"money"
>
¥
{
item
.
price
}
</
span
>
<
span
className=
"unit"
>
/天起
</
span
>
<
span
className=
"unit"
>
/天起
</
span
>
</
div
>
</
div
>
</
div
>
</
div
>
...
@@ -56,14 +64,15 @@ export default function EquipmentLeasing(props: Props) {
...
@@ -56,14 +64,15 @@ export default function EquipmentLeasing(props: Props) {
const
[
count
,
setCount
]
=
useState
(
0
)
//商品总数
const
[
count
,
setCount
]
=
useState
(
0
)
//商品总数
const
[
abort
,
setAbort
]
=
useState
<
AbortController
|
null
>
(
null
)
//请求中断
const
[
abort
,
setAbort
]
=
useState
<
AbortController
|
null
>
(
null
)
//请求中断
const
[
pageParams
,
setPageParams
]
=
useState
({
const
[
pageParams
,
setPageParams
]
=
useState
({
type
:
1
,
pageNo
:
1
,
pageNo
:
1
,
pageSize
:
15
pageSize
:
15
,
})
//分页器对象
})
//分页器对象
const
onPageChange
=
(
page
:
number
,
pageSize
:
number
)
=>
{
const
onPageChange
=
(
page
:
number
,
pageSize
:
number
)
=>
{
setPageParams
({
setPageParams
({
...
pageParams
,
...
pageParams
,
pageNo
:
page
pageNo
:
page
,
})
})
}
}
...
@@ -88,15 +97,15 @@ export default function EquipmentLeasing(props: Props) {
...
@@ -88,15 +97,15 @@ export default function EquipmentLeasing(props: Props) {
{
{
...
filterResult
,
...
filterResult
,
...
pageParams
,
...
pageParams
,
...
rs
...
rs
,
},
},
{
{
signal
:
abort
?.
signal
signal
:
abort
?.
signal
,
}
}
)
)
.
then
(
res
=>
{
.
then
(
(
res
)
=>
{
setProductList
(
setProductList
(
res
.
result
?.
list
?.
map
(
item
=>
{
res
.
result
?.
list
?.
map
(
(
item
)
=>
{
return
{
element
:
leftDom
(
item
)
}
return
{
element
:
leftDom
(
item
)
}
})
||
[]
})
||
[]
)
)
...
@@ -104,15 +113,18 @@ export default function EquipmentLeasing(props: Props) {
...
@@ -104,15 +113,18 @@ export default function EquipmentLeasing(props: Props) {
})
})
},
[
abort
])
},
[
abort
])
const
onFilterChange
=
(
filterResult
:
FilterResult
,
adapterFilterResult
:
AdapterResult
)
=>
{
const
onFilterChange
=
(
filterResult
:
FilterResult
,
adapterFilterResult
:
AdapterResult
)
=>
{
console
.
log
(
'filterResult'
,
filterResult
,
adapterFilterResult
)
console
.
log
(
'filterResult'
,
filterResult
,
adapterFilterResult
)
setFilterResult
(
adapterFilterResult
)
setFilterResult
(
adapterFilterResult
)
}
}
useEffect
(()
=>
{
useEffect
(()
=>
{
api
.
listAdvertisementInfo
().
then
(
res
=>
{
api
.
listAdvertisementInfo
().
then
(
(
res
)
=>
{
setRightProductList
(
setRightProductList
(
res
.
result
?.
map
(
item
=>
{
res
.
result
?.
map
(
(
item
)
=>
{
return
{
element
:
rightDom
(
item
)
}
return
{
element
:
rightDom
(
item
)
}
})
||
[]
})
||
[]
)
)
...
@@ -134,21 +146,35 @@ export default function EquipmentLeasing(props: Props) {
...
@@ -134,21 +146,35 @@ export default function EquipmentLeasing(props: Props) {
return
(
return
(
<
Layout
>
<
Layout
>
<
Box
>
<
Box
>
<
Filter
types=
{
[
'地域'
,
'设备品牌'
,
'设备型号'
]
}
showResultItem
onChange=
{
onFilterChange
}
ref=
{
filter
}
></
Filter
>
<
Filter
types=
{
[
'地域'
,
'设备品牌'
,
'设备型号'
]
}
showResultItem
onChange=
{
onFilterChange
}
ref=
{
filter
}
></
Filter
>
<
div
style=
{
{
paddingTop
:
13
}
}
>
<
div
style=
{
{
paddingTop
:
13
}
}
>
<
ContentBox
<
ContentBox
boxIndex=
{
5
}
boxIndex=
{
5
}
leftcontentstyle=
{
{
leftcontentstyle=
{
{
width
:
'1010px'
,
width
:
'1010px'
,
margin
:
{
top
:
0
,
right
:
'12px'
,
bottom
:
'12px'
,
left
:
0
}
margin
:
{
top
:
0
,
right
:
'12px'
,
bottom
:
'12px'
,
left
:
0
}
,
}
}
}
}
leftRenderDom=
{
{
leftRenderDom=
{
{
columns
:
productList
,
columns
:
productList
,
pagination
:
(
pagination
:
(
<
div
className=
"pagination-page"
>
<
div
className=
"pagination-page"
>
<
Pagination
current=
{
pageParams
.
pageNo
}
pageSize=
{
pageParams
.
pageSize
}
showSizeChanger=
{
false
}
showQuickJumper
total=
{
count
}
onChange=
{
onPageChange
}
hideOnSinglePage=
{
true
}
style=
{
{
marginTop
:
20
}
}
/>
<
Pagination
current=
{
pageParams
.
pageNo
}
pageSize=
{
pageParams
.
pageSize
}
showSizeChanger=
{
false
}
showQuickJumper
total=
{
count
}
onChange=
{
onPageChange
}
hideOnSinglePage=
{
true
}
style=
{
{
marginTop
:
20
}
}
/>
</
div
>
</
div
>
)
)
,
}
}
}
}
rightRenderDom=
{
{
columns
:
rightProductList
}
}
rightRenderDom=
{
{
columns
:
rightProductList
}
}
/>
/>
...
...
pages/flyingHandService/detail/[id].page.tsx
浏览文件 @
e898a067
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
React
,
{
useEffect
,
useState
}
from
'react'
import
Layout
from
"~/components/layout"
;
import
Layout
from
'~/components/layout'
import
{
Box
}
from
"./styled"
;
import
{
Box
}
from
'./styled'
import
{
Button
}
from
"antd"
;
import
{
Button
,
Tabs
}
from
'antd'
import
{
useRouter
}
from
"next/router"
;
import
{
useRouter
}
from
'next/router'
import
{
ParsedUrlQuery
}
from
"querystring"
;
import
{
ParsedUrlQuery
}
from
'querystring'
import
type
{
TabsProps
}
from
'antd'
import
api
,
{
ListPageFlyingInfoResp
}
from
'./api'
interface
RouterDetail
{
const
contentStyle
:
React
.
CSSProperties
=
{
videoUrl
:
string
|
''
,
width
:
'100%'
,
curriculumName
:
string
}
}
export
default
function
FlyingDetail
()
{
export
default
function
FlyingDetail
()
{
const
router
=
useRouter
()
const
router
=
useRouter
();
const
[
detail
,
setDetail
]
=
useState
<
ListPageFlyingInfoResp
|
null
>
()
const
[
detail
,
setDetail
]
=
useState
<
ParsedUrlQuery
|
RouterDetail
>
()
const
onChange
=
(
key
:
string
)
=>
{
useEffect
(()
=>
{
console
.
log
(
key
)
setDetail
(
router
.
query
)
}
},[
router
])
const
items
:
TabsProps
[
'items'
]
=
[
{
key
:
'1'
,
label
:
`介绍`
,
children
:
(
<
div
className=
"body"
>
<
div
className=
"top"
>
<
div
className=
"title"
>
课程简介
</
div
>
<
div
className=
"content"
>
{
detail
?.
curriculumDesc
}
</
div
>
</
div
>
{
/* <div className="bottom">详情</div> */
}
</
div
>
),
},
]
useEffect
(()
=>
{
if
(
Object
.
keys
(
router
.
query
).
length
)
{
api
.
listPageJobServicesInfo
({
id
:
Number
(
router
.
query
.
id
)
})
.
then
((
res
)
=>
{
console
.
log
(
res
)
setDetail
(
res
.
result
)
})
}
},
[
router
])
return
(
return
(
<
Layout
>
<
Layout
contentStyle=
{
contentStyle
}
>
<
Box
>
<
Box
>
<
div
className=
"box-top"
>
<
div
className=
"box"
>
<
div
className=
"left"
>
{
detail
?.
curriculumName
}
</
div
>
<
div
className=
"box-body"
>
<
div
className=
"right"
>
<
video
{
/* <Button
className=
"body-video"
controls
src=
{
detail
?.
videoUrl
as
string
}
/>
</
div
>
<
div
className=
"box-bottom"
>
<
div
className=
"left"
>
<
div
className=
"top"
>
{
detail
?.
curriculumName
}
</
div
>
<
div
className=
"bottom"
>
免费
</
div
>
</
div
>
<
div
className=
"right"
>
{
/* <Button
type="primary"
type="primary"
className="btn"
className="btn"
onClick={() =>
onClick={() =>
...
@@ -32,12 +70,18 @@ export default function FlyingDetail() {
...
@@ -32,12 +70,18 @@ export default function FlyingDetail() {
>
>
去考试
去考试
</Button> */
}
</Button> */
}
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
<
div
className=
"box-body"
>
<
div
className=
"detail"
>
<
video
className=
"body-video"
controls
src=
{
detail
?.
videoUrl
as
string
}
/>
<
Tabs
className=
"tabs"
defaultActiveKey=
"1"
items=
{
items
}
onChange=
{
onChange
}
/>
</
div
>
</
div
>
</
Box
>
</
Box
>
</
Layout
>
</
Layout
>
)
;
)
}
}
pages/flyingHandService/detail/api/index.tsx
0 → 100644
浏览文件 @
e898a067
import
request
,
{
Response
}
from
'~/api/request'
export
interface
ListPageFlyingInfoParams
{
id
:
number
}
export
interface
Flying
{
id
:
number
price
:
number
supplierName
:
string
curriculumName
:
string
free
:
0
|
1
curriculumDesc
:
string
videoUrl
:
string
}
export
interface
ListPageFlyingInfoResp
{
id
:
number
price
:
number
|
null
supplierName
:
string
curriculumName
:
string
free
:
number
flightSkills
:
number
flightSkillsName1
:
string
flightSkillsName2
:
string
curriculumDesc
:
string
surfaceUrl
:
string
|
null
videoUrl
:
string
detailContent
:
null
}
export
default
{
//web-飞手培训-详情
listPageJobServicesInfo
:
(
params
:
ListPageFlyingInfoParams
):
Promise
<
Response
<
ListPageFlyingInfoResp
>>
=>
{
return
request
(
'/release/curriculum/curriculumDetails'
,
'get'
,
params
)
},
}
pages/flyingHandService/detail/styled.tsx
浏览文件 @
e898a067
import
styled
from
"styled-components"
;
import
styled
from
'styled-components'
export
default
function
Style
()
{
export
default
function
Style
()
{
return
<></>
;
return
<></>
}
}
export
const
Box
=
styled
.
div
`
export
const
Box
=
styled
.
div
`
box-sizing: border-box;
box-sizing: border-box;
.box-top {
.box {
display: flex;
background-color: #fff;
justify-content: space-between;
height: 586px;
align-items: center;
padding-top: 20px;
padding: 10px 0;
.box-body {
.left {
margin: 0 auto;
height: 25px;
display: flex;
font-size: 20px;
width: 1200px;
font-family: MicrosoftYaHeiUI-Bold, MicrosoftYaHeiUI;
height: 470px;
font-weight: bold;
/* background: #111111; */
color: #000000;
.body-video {
line-height: 25px;
width: 1200px;
height: 470px;
}
/* .right-box {
width: 362px;
height: 470px;
background: #1b2128;
.tabs {
color: #fff;
}
} */
}
}
.right {
.box-bottom {
.btn {
margin: 0 auto;
width: 180px;
width: 1200px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px 0 38px 0;
.left {
height: 50px;
height: 50px;
background: linear-gradient(135deg, #278eff 0%, #0052da 100%);
.top {
border-radius: 6px;
font-size: 24px;
font-size: 20px;
font-family: PingFangSC-Medium, PingFang SC;
font-family: MicrosoftYaHeiUI-Bold, MicrosoftYaHeiUI;
font-weight: 500;
font-weight: bold;
color: #000000;
color: #ffffff;
margin-bottom: 10px;
&:hover {
}
opacity: 0.8;
.bottom {
font-size: 18px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #ff552d;
}
}
.right {
.btn {
width: 180px;
height: 50px;
background: linear-gradient(135deg, #278eff 0%, #0052da 100%);
border-radius: 6px;
font-size: 20px;
font-family: MicrosoftYaHeiUI-Bold, MicrosoftYaHeiUI;
font-weight: bold;
color: #ffffff;
&:hover {
opacity: 0.8;
}
}
}
}
}
}
}
}
}
.
box-body
{
.
detail
{
margin
-top: 20px
;
margin
: 0 auto
;
width: 1200px;
width: 1200px;
height: 675px;
height: 420px;
background: #111111;
background: #ffffff;
.body-video {
box-shadow: 0px 2px 6px 0px rgba(183, 188, 197, 0.1);
width: 1200px;
border-radius: 12px;
height: 675px;
margin-top: 16px;
padding: 20px;
.tabs {
.body {
.top {
.title {
font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #000000;
}
.content {
font-size: 18px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #27323f;
margin-top: 10px;
}
}
.bottom {
font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #000000;
margin-top: 29px;
}
}
}
}
}
}
`
;
`
pages/flyingHandService/index.page.tsx
浏览文件 @
e898a067
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论