提交 526d5bbc 作者: 18928357778

添-飞手培训-详情-去考试-习题,考试图片

改-首页-轮播图尺寸以及缩放效果
添-设备租赁-详情-立即租赁-用户登录判断以及弹出登录
改-设备租赁,飞手培训图片缩放效果
改-首页-跳转至页面自动选择筛选
改-跳转详情也保持头部组件的高亮
改-作业服务-详情-团队评价-头像,用户名添加随机,
上级 6aa329a0
......@@ -46,7 +46,12 @@ export default function NavHeader() {
const { userInfo, testLogin, logout } = useContext(UserContext);
useEffect(() => {
setCurrentPath(router.route);
const routerTo = items?.filter(item=>router.route.includes(item.key))[0]
if (routerTo) {
setCurrentPath(routerTo?.key!);
}else{
setCurrentPath(router.route);
}
console.log("currentHash", currentPath);
}, [router.route]);
......
......@@ -3,7 +3,8 @@ import { FilterOptionResp, RegionResp } from "./api";
import ResultItem from "./compoents/resultItem";
import RegionItem from "./compoents/regionItem";
import styles from "./index.module.scss";
import { useEffect, useState } from "react";
import { useEffect, useState , forwardRef , useImperativeHandle } from "react";
import { useRouter } from 'next/router'
import BrandItem from "./compoents/brandItem";
import ModelItem from "./compoents/modelItem";
import PartItem from "./compoents/partItem";
......@@ -58,14 +59,68 @@ type Props = {
adapterFilterResult: AdapterResult //适配器,直接用于接口请求
) => void; //筛选条件更改事件
};
export default function Filter(props: Props) {
const idArr = ["brandId","categoryId","modelId","partsId","productCategoryId","qualityId","industryId","appTypeId"]
const nameArr:any = {
brandId: {
type:"brandId",
typeObj:"brand",
typeName:"品牌:",
},
// districtId: {
// type:"districtId",
// typeObj:"region",
// typeName:"地域:",
// },
modelId:{
type:"modelId",
typeObj:"model",
typeName:"型号:",
},
partsId: {
type:"partsId",
typeObj:"part",
typeName:"部件:",
},
productCategoryId: {
type:"productCategoryId",
typeObj:"category",
typeName:"类目:",
},
qualityId: {
type:"qualityId",
typeObj:"quality",
typeName:"成色:",
},
industryId: {
type:"industryId",
typeObj:"industryId",
typeName:"行业:",
},
appTypeId: {
type:"appTypeId",
typeObj:"appTypeId",
typeName:"应用:",
},
categoryId: {
type:"categoryId",
typeObj:"categoryId",
typeName:"类目:",
},
}
const Filter = forwardRef((props: Props,ref) => {
const router = useRouter();
useImperativeHandle(ref, () => ({
idArr:idArr,
clearRouter:clearRouter
}))
const [result, setResult] = useState<FilterResult>({});
const onChange = (item: FilterOptionResp, type: string) => {
console.log(item, type);
clearRouter()
let data: { [key: string]: FilterOptionResp } = {};
data[type] = item;
console.log(data);
setResult({ ...result, ...data });
};
......@@ -83,7 +138,26 @@ export default function Filter(props: Props) {
categoryId: result.categoryId?.id,
});
}, [result]);
useEffect(()=>{
let queryVal = JSON.parse(JSON.stringify(router.query));
if (Object.keys(router.query).length) {
for (const key in queryVal) {
if (idArr.includes(key)) {
onChange({id:queryVal[key],name: nameArr[key].typeName + queryVal.name},nameArr[key].typeObj)
}
}
}
},[router])
const clearRouter = () => {
if (Object.keys(router.query).length) {
router.query = {}
router.replace(router.pathname)
}
}
const onDel = (key: string) => {
clearRouter()
//@ts-ignore
delete result[key];
setResult({
......@@ -163,3 +237,6 @@ export default function Filter(props: Props) {
</>
);
}
)
export default Filter
\ No newline at end of file
......@@ -7,11 +7,15 @@ import { Button , Image as AImage , Divider , Select,Modal ,Tag,Space,Form,messa
import Image from 'next/image';
import errImg from "~/assets/errImg";
import api,{GetWebDeviceDetailResult,GetWebDeviceWareSkuById} from './api';
const {CheckableTag } = Tag
import { useUser } from "~/lib/hooks";
import LoginModal from "~/components/loginModal";
const { CheckableTag } = Tag
export default function EquipmentLeasingDetail() {
const router = useRouter();
const userInfo = useUser(); //获取信息
const [openLoginModal, setOpenLoginModal] = useState(false); //登录modal
const [id, setId] = useState<number | null>(null);
const [detail,setDetail] = useState<GetWebDeviceDetailResult | null>()
......@@ -52,12 +56,16 @@ export default function EquipmentLeasingDetail() {
const [selectedTagsData, setSelectedTagsData] = useState<string>();
const showModal = () => {
setIsModalOpen(true);
if (wareSkuList?.length) {
setSelectedTags(wareSkuList[0].id);
form.setFieldValue("id",wareSkuList[0].id)
setSelectedTagsData("3-7天")
form.setFieldValue("date","3-7天")
if (userInfo?.id) {
setIsModalOpen(true);
if (wareSkuList?.length) {
setSelectedTags(wareSkuList[0].id);
form.setFieldValue("id",wareSkuList[0].id)
setSelectedTagsData("3-7天")
form.setFieldValue("date","3-7天")
}
}else{
setOpenLoginModal(true)
}
};
......@@ -245,6 +253,10 @@ export default function EquipmentLeasingDetail() {
</Form.Item>
</Form>
</Modal>
<LoginModal
open={openLoginModal}
onCancel={() => setOpenLoginModal(false)}
></LoginModal>
</Box>
</Layout>
)
......
import React, { useEffect, useState } from "react";
import React, { useEffect, useState , useRef } from "react";
import { useRouter } from "next/router";
import { Pagination } from "antd";
import { Box } from "./styled";
......@@ -19,6 +19,7 @@ type Props = {};
export default function EquipmentLeasing(props: Props) {
const router = useRouter();
const filter = useRef<any>()
const [productList, setProductList] = useState(
Array<{ element: JSX.Element }>
);
......@@ -38,8 +39,7 @@ export default function EquipmentLeasing(props: Props) {
<Image
src={item.wareImgs[0].imgUrl}
alt="error"
width={116}
height={116}
fill
/>
</div>
</div>
......@@ -87,12 +87,20 @@ export default function EquipmentLeasing(props: Props) {
//端口列表请求
useEffect(() => {
let queryVal = JSON.parse(JSON.stringify(router.query));
const idArr = filter.current.idArr
let rs
for (const key in queryVal) {
if (idArr.includes(key)) {
rs = {[key]:router.query[key]}
}
}
api
.listPageDeviceInfo(
{
...filterResult,
...pageParams,
...router.query,
...rs,
},
{
signal: abort?.signal,
......@@ -127,17 +135,18 @@ export default function EquipmentLeasing(props: Props) {
}, []);
useEffect(() => {
let queryVal = JSON.parse(JSON.stringify(router.query));
if (router.query) {
setFilterResult({ ...router.query });
console.log(router.query,{brandId:1});
onFilterChange({
categoryId: {
id: 2,
name: "类目:航测"
}
},{categoryId:2});
const idArr = filter.current.idArr
for (const key in queryVal) {
if (idArr.includes(key)) {
setFilterResult({ [key]:router.query[key] });
}
}
}
}, [router]);
return (
<Layout>
<Box>
......@@ -145,12 +154,13 @@ export default function EquipmentLeasing(props: Props) {
types={["地域", "设备类目", "设备品牌", "设备型号"]}
showResultItem
onChange={onFilterChange}
ref={filter}
></Filter>
<div style={{ paddingTop: 13 }}>
<ContentBox
boxIndex={5}
leftcontentstyle={{
width: "1020px",
width: "1010px",
margin: { top: 0, right: "12px", bottom: "12px", left: 0 },
}}
leftRenderDom={{
......
......@@ -25,6 +25,7 @@ export const Box = styled.div`
width: 116px;
height: 116px;
background: #efefef;
position: relative;
}
}
&-bottom {
......
......@@ -2,7 +2,8 @@ import React,{ useEffect ,useState} from 'react'
import {Box} from './styled'
import {Cascader,Select} from 'antd'
import api, { Flying, SkillsType, RegionResp } from "../../../api";
import Image from 'next/image'
import xt from './assets/xt.png'
interface BrushQuestionZoneType {
}
......@@ -95,7 +96,7 @@ export default function BrushQuestionZone() {
<div className="content">
{list?.map((item, i) => (
<div key={i} className="item">
<div className="img-box"></div>
<div className="img-box"><Image src={xt.src} fill alt='#'></Image> </div>
<div className="item-content">
第一章 第1节 习题练习习题练习习题练习
</div>
......
......@@ -54,13 +54,13 @@ export const Box = styled.div`
width: 120px;
height: 100px;
background: #E6E6E6;
position: relative;
}
.item-content{
display: flex;
align-items: center;
flex: 1;
padding: 12px 14px 11px 16px;
}
}
}
......
import React , {useEffect,useState} from 'react'
import {Box} from './styled'
import Image from 'next/image'
import kh from './assets/kh.jpg'
interface MockExamType {
}
......@@ -16,7 +17,7 @@ export default function MockExam() {
<div className="content">
{list?.map((item, i) => (
<div key={i} className="item">
<div className="img-box"></div>
<div className="img-box"><Image src={kh.src} fill alt='#'></Image></div>
<div className="item-content">
<div className="top">云飞手行业认证考核</div>
<div className="bottom">
......
......@@ -27,6 +27,7 @@ export const Box = styled.div`
width: 120px;
height: 100px;
background: #E6E6E6;
position: relative;
}
.item-content{
display: flex;
......
......@@ -7,6 +7,8 @@ import Layout from "~/components/layout";
import ContentBox from "~/components/contentBox";
import api, { Flying, SkillsType, RegionResp } from "./api";
import { useRouter } from "next/router";
import { useUser } from "~/lib/hooks";
import LoginModal from "~/components/loginModal";
interface FilterInfoParams {
regionId?: number;
flightSkillsId?: number;
......@@ -16,6 +18,8 @@ interface FilterInfoParams {
export default function FlyingHandService() {
const {Option} = Select
const router = useRouter();
const userInfo = useUser(); //获取信息
const [openLoginModal, setOpenLoginModal] = useState(false); //登录modal
const [list, setList] = useState([
"https://pad-video-x.oss-cn-shenzhen.aliyuncs.com/file/540X844-1(1).jpg",
"https://pad-video-x.oss-cn-shenzhen.aliyuncs.com/file/540X844(1).jpg",
......@@ -54,8 +58,7 @@ export default function FlyingHandService() {
<Image
src={`${item.videoUrl}?x-oss-process=video/snapshot,t_1000,m_fast`}
alt="#"
width={220}
height={160}
fill
/>
</div>
<div className="item-bottom">
......@@ -133,10 +136,19 @@ export default function FlyingHandService() {
}) || []
);
setCount(res.result?.totalCount || 0);
clearRouter()
});
}, [abort]);
const clearRouter = () => {
if (Object.keys(router.query).length) {
router.query = {}
router.replace(router.pathname)
}
}
const onProvinceChange = (value: number) => {
clearRouter()
if (value) {
setFlightDefault(value)
}else{
......@@ -151,6 +163,7 @@ export default function FlyingHandService() {
};
const onChange = (value: any) => {
clearRouter()
if (value) {
setSkillsDefault([value])
}else{
......@@ -165,6 +178,7 @@ export default function FlyingHandService() {
};
const onChangeRegion = (value: any) => {
clearRouter()
setFilterParams((props) => {
return {
...props,
......@@ -314,7 +328,7 @@ export default function FlyingHandService() {
<Button
type="primary"
className="btn"
onClick={() => setIsModalOpen(true)}
onClick={() => userInfo?.id ? setIsModalOpen(true) : setOpenLoginModal(true)}
>
报名学习课程
</Button>
......@@ -433,6 +447,10 @@ export default function FlyingHandService() {
}}
rightRenderDom={{ columns: rightDomList }}
/>
<LoginModal
open={openLoginModal}
onCancel={() => setOpenLoginModal(false)}
></LoginModal>
</Box>
</Layout>
);
......
......@@ -51,6 +51,7 @@ export const Box = styled.div`
background-color: #e6e6e6;
border-radius: 6px 6px 0px 0px;
overflow: hidden;
position: relative;
}
&-bottom {
padding: 9px 12px 12px;
......
......@@ -213,13 +213,13 @@ export default function MoreServicePoints() {
onClick={() => mapEntiy(1)}
className={`item ${mapItem === 1 ? "active" : ""}`}
>
租赁网点
培训网点
</div>
<div
onClick={() => mapEntiy(2)}
className={`item ${mapItem === 2 ? "active" : ""}`}
>
培训网点
租赁网点
</div>
<div
onClick={() => mapEntiy(3)}
......
......@@ -21,7 +21,7 @@ export default function RotationChart() {
{list.map((item) => (
<div key={item}>
<h3 className="contentStyle">
<Image src={item} alt="error" width={806} height={200} />
<Image src={item} alt="error" fill />
</h3>
</div>
))}
......
......@@ -39,5 +39,6 @@ export const Box = styled.div`
line-height: 100px;
text-align: center;
background: #364d79;
position: relative;
}
`;
......@@ -23,7 +23,8 @@ import {
listNewsApi,
} from "./api";
import { BaseOptionType, DefaultOptionType } from "antd/es/select";
import { useUser } from "~/lib/hooks";
import LoginModal from "~/components/loginModal";
interface ColumnsType {
title: string;
router: string;
......@@ -31,7 +32,8 @@ interface ColumnsType {
export default function WaterfallFlowBody() {
const router = useRouter();
const userInfo = useUser(); //获取信息
const [openLoginModal, setOpenLoginModal] = useState(false); //登录modal
const [list, setList] = useState([
"中国人寿",
"中国平安",
......@@ -254,37 +256,43 @@ export default function WaterfallFlowBody() {
}, []);
const routerPath = (index: number, item?: AllType) => {
if (index === 0 || index === 1 || index === 3 || index === 4 ) {
if ( item && (index === 0 || index === 1 || index === 3 || index === 4) ) {
router.push({
pathname: columns[index].router,
query: { [item?.type!]: item?.id! , name: item?.name || item?.appName || item?.skillsName },
});
}else{
router.push({
pathname: columns[index].router,
query: { [item?.type!]: item?.id! },
});
}
};
const handleTenderApply = async (item:NewsTenderType)=>{
if (item.apply) return;
message.success("申请成功")
item.apply = 1
// let res = await listNewsApi.tenderApply({
// tenderInfoId: item.id,
// tenderNewsId: item.tenderNewsId,
// userAccountId: 0,
// })
// try{
// if (res.code==="200") {
// message.success("申请成功")
// let res8 = await listNewsApi.listNewTenderInfo({
// pageNo: 1,
// pageSize: 6,
// });
// setRightBottomDomList(rightDom2(res8.result?.list!));
// }else{
// message.error(res.message)
// }
// }catch(e){
// console.log(e);
// }
if (userInfo?.id) {
let res = await listNewsApi.tenderApply({
tenderInfoId: item.id,
tenderNewsId: item.tenderNewsId,
userAccountId: userInfo?.id,
})
try{
if (res.code==="200") {
message.success("申请成功")
let res8 = await listNewsApi.listNewTenderInfo({
pageNo: 1,
pageSize: 6,
});
setRightBottomDomList(rightDom2(res8.result?.list!));
}else{
message.error(res.message)
}
}catch(e){
console.log(e);
}
}else{
setOpenLoginModal(true)
}
}
const leftDom = (
......@@ -451,6 +459,10 @@ export default function WaterfallFlowBody() {
],
}}
/>
<LoginModal
open={openLoginModal}
onCancel={() => setOpenLoginModal(false)}
></LoginModal>
</Box>
);
}
......@@ -17,7 +17,9 @@ export interface JobDetail {
contentVideo?: string | null,
star?: number,
img?: string | null,
type?: number
type?: number,
name?:string,
time?:number | string
}
export interface ListPageJobInfoResp {
......
import React from "react";
import React, { useEffect } from "react";
import { Box } from "./styled";
import { Rate } from "antd";
import Image from "next/image";
import { JobDetail } from "../../api";
import pic1 from './assets/1.webp'
import pic2 from './assets/2.webp'
import pic3 from './assets/3.webp'
import pic4 from './assets/4.webp'
import pic5 from './assets/5.webp'
import pic6 from './assets/6.webp'
import pic7 from './assets/7.webp'
import pic8 from './assets/8.webp'
import pic9 from './assets/9.webp'
import Moment from 'moment';
const imgList = [
pic1,
pic2,
pic3,
pic4,
pic5,
pic6,
pic7,
pic8,
pic9
]
const name = [
"浮生若梦",
"惜君嫣云",
"抹茶味儿的菇凉",
"清歌缈缦",
"清新雅致",
"呆到深处自然萌",
"各不打扰",
"无声飞雪",
"我一生下来就是个无齿的人",
"浅笑小倔强",
"乱了夏末蓝了海",
"初夏知鸣"]
interface EvaluateType {
evaluateInfo: Array<JobDetail>;
}
export default function Evaluate(props: EvaluateType) {
const list = [{}, {}, {}, {}];
const { evaluateInfo } = props;
console.log(evaluateInfo);
let listVal:Array<JobDetail> = JSON.parse(JSON.stringify(evaluateInfo))
listVal.map((item,index)=>{
item.img = imgList[Math.floor(Math.random() * 9)]?.src
item.name = name[Math.floor(Math.random() * 12)]
console.log(Date.now() - (index * 100000));
item.time = Date.now() - (index * 8e7)
})
return (
<Box>
{evaluateInfo?.map((item, i) => (
{listVal?.map((item, i) => (
<div key={item.id} className="item">
<div className="item-user">
<div className="item-user-image">
......@@ -22,25 +65,25 @@ export default function Evaluate(props: EvaluateType) {
className="image"
height={42}
width={42}
src={item.img ? item.img : ""}
src={item.img ? item.img : ''}
alt="#"
/>
</div>
<div className="item-user-info">
<div className="item-user-info-name">{item.star}</div>
<div className="item-user-info-name">{item.name}</div>
<Rate style={{ height: 30 }} disabled defaultValue={item.star} />
</div>
</div>
<div className="item-content">
<div className="item-content-label">{item.content}</div>
<div className="item-content-image">
{item.contentImgs?.map((item) => (
{item.contentImgs?.length ? item.contentImgs?.map((item) => (
<div key={item} className="image-item">
<Image width={80} height={80} src={item} alt="error" />
</div>
))}
)) : null }
</div>
<div className="item-content-time">3月4日</div>
<div className="item-content-time">{Moment(item.time).format('YYYY-MM-DD')}</div>
</div>
</div>
))}
......
......@@ -9,7 +9,7 @@ export const Box = styled.div`
overflow-y: auto;
height: 800px;
.item{
height: 180px;
height: 120px;
&-user{
display: flex;
align-items: center;
......@@ -57,7 +57,6 @@ export const Box = styled.div`
}
}
&-time{
width: 45px;
height: 20px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
......
import React, { useEffect, useState } from "react";
import React, { useEffect, useState , useRef } from "react";
import { Box } from "./styled";
import { Pagination } from "antd";
import Layout from "~/components/layout";
......@@ -18,6 +18,7 @@ interface ImageListType {}
export default function JobServices() {
const router = useRouter();
const filter = useRef<any>()
const [list, setList] = useState([
"https://pad-video-x.oss-cn-shenzhen.aliyuncs.com/file/540X844-2(1).jpg",
// "https://pad-video-x.oss-cn-shenzhen.aliyuncs.com/file/665512fd-12e6-49a9-93c1-f9dcd0e82083.jpg",
......@@ -92,15 +93,19 @@ export default function JobServices() {
//端口列表请求
useEffect(() => {
let queryVal = JSON.parse(JSON.stringify(router.query));
const idArr = filter.current.idArr
let rs
for (const key in queryVal) {
queryVal[key] = Number(queryVal[key]);
if (idArr.includes(key)) {
rs = {[key]:router.query[key]}
}
}
api
.listPageJobServicesInfo(
{
...filterResult,
...pageParams,
...queryVal,
...rs,
},
{
signal: abort?.signal,
......@@ -124,8 +129,6 @@ export default function JobServices() {
setFilterResult(adapterFilterResult);
};
const [query, setQuery] = useState<string | string[]>();
useEffect(() => {
setRightDomList(
list.map((item) => {
......@@ -135,12 +138,14 @@ export default function JobServices() {
}, []);
useEffect(() => {
if (router.query && Object.keys(router.query).length) {
let queryVal = JSON.parse(JSON.stringify(router.query));
let queryVal = JSON.parse(JSON.stringify(router.query));
if (router.query) {
const idArr = filter.current.idArr
for (const key in queryVal) {
queryVal[key] = Number(queryVal[key]);
if (idArr.includes(key)) {
setFilterResult({ [key]:router.query[key] });
}
}
setFilterResult({ ...queryVal });
}
}, [router]);
......@@ -151,6 +156,7 @@ export default function JobServices() {
types={["地域", "行业", "应用"]}
showResultItem
onChange={onFilterChange}
ref={filter}
></Filter>
<div style={{ marginTop: 10 }}>
<ContentBox
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论