提交 3f2825d3 作者: 龚洪江

修复:eslint --fix

上级 8a0b3cab
......@@ -23,23 +23,19 @@
"@types/react-dom": "^18.0.10",
"@typescript-eslint/eslint-plugin": "^5.10.1",
"@typescript-eslint/parser": "^5.10.1",
"antd": "^5.1.0",
"cross-env": "^7.0.3",
"eslint": "^8.42.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-airbnb-typescript": "^16.1.0",
"eslint-config-next": "^13.1.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.28.0",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-unused-imports": "^2.0.0",
"eslint-config-next": "^13.1.1",
"eslint-plugin-prettier": "^4.2.1",
"next": "^13.1.1",
"prettier": "^2.8.8",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sass": "^1.62.1",
"ts-node": "^10.9.1",
"tslib": "^2.5.0",
......@@ -50,6 +46,7 @@
"@ant-design/icons": "^5.0.1",
"@hapi/iron": "^7.0.1",
"@types/styled-components": "^5.1.26",
"antd": "^5.6.4",
"babel-plugin-styled-components": "^2.1.1",
"babel-plugin-styled-components-px2rem": "^1.5.5",
"cookie": "^0.5.0",
......@@ -62,8 +59,11 @@
"postcss-pxtorem": "^6.0.0",
"react-infinite-scroll-component": "^6.1.0",
"styled-components": "^6.0.0-rc.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"swiper": "^9.3.2",
"swr": "^2.1.5",
"uuid": "^9.0.0"
"uuid": "^9.0.0",
"next": "^13.1.1"
}
}
......@@ -18,11 +18,11 @@ export interface GetTagIdResp {
}
export default {
//申请加盟
// 申请加盟
cooperationApply(params: CooperationApplyParams): Promise<Response<string>> {
return request('/userapp/cooperation/apply', 'post', params);
},
//加盟标签相关内容
// 加盟标签相关内容
getTagById(params: { id: number }): Promise<Response<GetTagIdResp>> {
return request('/userapp/cooperation/getTagById', 'get', params);
},
......
import { useEffect, useState } from 'react';
import { Button, Col, Divider, Form, Input, message, Row } from 'antd';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import LayoutView from '~/components/layout';
import { Uploader } from '~/components/uploader';
import api from './api';
import styles from './index.module.scss';
import { Uploader } from '~/components/uploader';
export default function JoinPolicy() {
const [form] = Form.useForm();
const router = useRouter();
const [content, setContent] = useState(''); //福利内容
const [content, setContent] = useState(''); // 福利内容
const [tagId, setTagId] = useState<number>(-1);
useEffect(() => {
if (router.query.tagId) {
......@@ -23,7 +26,7 @@ export default function JoinPolicy() {
});
}
}, [router.query.tagId]);
//提交
// 提交
const submitApply = () => {
form
.validateFields()
......@@ -47,9 +50,9 @@ export default function JoinPolicy() {
message.warning(err.errorFields[0].errors[0]);
});
};
//上传变更
// 上传变更
const uploadChange = (value: any) => {
let attachmentList = value.map((v: any) => ({
const attachmentList = value.map((v: any) => ({
type: v.type.includes('image') ? 0 : 1,
url: v.url,
}));
......
import '../public/antd.min.css';
import '../styles/index.scss';
import type { AppProps } from 'next/app';
import withTheme from '../theme';
import { message } from 'antd';
import { useEffect } from 'react';
import { message } from 'antd';
import type { AppProps } from 'next/app';
import Head from 'next/head';
import Script from 'next/script';
import UserProvider from '~/lib/userProvider';
import CommonProvider from '~/lib/commonProvider';
import UserProvider from '~/lib/userProvider';
import withTheme from '../theme';
export default function App({ Component, pageProps }: AppProps) {
const [messageApi, contextHolder] = message.useMessage();
useEffect(() => {
//全局消息提示
// 全局消息提示
window.messageApi = messageApi;
//@ts-ignore
// @ts-ignore
window.onresize = function () {
// window.document.querySelector('html')!.style.fontSize = (window.innerWidth / 1920) + 'PX';
};
......
import Document, { Html, Head, Main, NextScript, DocumentContext } from 'next/document';
import { ServerStyleSheet } from 'styled-components';
export default class MyDocument extends Document {
static async getInitialProps(ctx: DocumentContext) {
const sheet = new ServerStyleSheet();
......
......@@ -36,12 +36,12 @@ export interface Paging {
}
export default {
//提交企业认证
// 提交企业认证
companyAuth(params: CompanyAuthParams): Promise<Response<string>> {
return request('/userapp/company-auth/add', 'post', params);
},
//企业工商模糊搜索
// 企业工商模糊搜索
fuzzyQueryCompany(params: { searchKey: string }): Promise<Response<FuzzyQueryCompanyResp>> {
return request('/userapp/company-auth/fuzzyQueryCompany', 'get', params);
},
......
import { useContext, useEffect, useState } from 'react';
import { LoadingOutlined, PlusOutlined } from '@ant-design/icons';
import { Col, Form, Input, Row, Upload, message, Button, Image, AutoComplete } from 'antd';
import type { UploadChangeParam } from 'antd/es/upload';
import type { RcFile, UploadFile, UploadProps } from 'antd/es/upload/interface';
import { useContext, useEffect, useState } from 'react';
import Router from 'next/router';
import gApi from '~/api';
import Layout from '~/components/layout';
import { UserContext } from '~/lib/userProvider';
import api from './api';
import styles from './index.module.scss';
import gApi from '~/api';
import Router from 'next/router';
import { UserContext } from '~/lib/userProvider';
const beforeUpload = (file: RcFile) => {
const isJpgOrPng =
......@@ -19,7 +22,7 @@ const beforeUpload = (file: RcFile) => {
if (!isJpgOrPng) {
message.error('请上传10M以内的JPG、JPEG、BMP、GIF、PNG格式图片');
}
//限制上传10M
// 限制上传10M
const isLt2M = file.size / 1024 / 1024 < 10;
if (!isLt2M) {
message.error('请上传10M以内的JPG、JPEG、BMP、GIF、PNG格式图片');
......@@ -53,7 +56,7 @@ export default function Certification() {
setToken(window.localStorage.getItem('token') || '');
}, []);
//上传change事件
// 上传change事件
const handleChange: UploadProps['onChange'] = (info: UploadChangeParam<UploadFile>) => {
console.log('uploadChange', info);
if (info.file.status === 'uploading') {
......@@ -67,7 +70,7 @@ export default function Certification() {
}
};
//提交
// 提交
const onFinish = (values: any) => {
console.log(values);
api
......@@ -97,7 +100,7 @@ export default function Certification() {
};
let handle: NodeJS.Timeout;
//搜索企业
// 搜索企业
const onSearchEnterprise = (text: string) => {
if (handle) {
clearTimeout(handle);
......@@ -125,7 +128,7 @@ export default function Certification() {
}, 500);
};
//选择的企业
// 选择的企业
const onSelectEnterprise = (value: string, option: EnterpriseOption) => {
form.setFieldValue('creditCode', option.creditCode);
};
......@@ -201,7 +204,7 @@ export default function Certification() {
beforeUpload={beforeUpload}
onChange={handleChange}
maxCount={1}
headers={{ token: token }}
headers={{ token }}
>
{imageUrl ? (
<Image
......
......@@ -27,7 +27,7 @@ export interface ListPageDeviceInfoResp {
}
export default {
//web-设备租赁-分页
// web-设备租赁-分页
listPageDeviceInfo: (
params: ListPageDeviceInfoParams,
options = {},
......
import React, { useEffect, useState, useContext } from 'react';
import { useRouter } from 'next/router';
import Layout from '~/components/layout';
import { Box } from './styled';
import ImagePreview from './components/picture-preview';
import OrderForGoods from './components/orderForGoods';
import moment from 'moment';
import {
Button,
Image as AImage,
......@@ -18,12 +13,20 @@ import {
InputNumber,
DatePicker,
} from 'antd';
import { RangePickerProps } from 'antd/es/date-picker';
import moment from 'moment';
import Image from 'next/image';
import errImg from '~/assets/errImg';
import api, { GetWebDeviceDetailResult, GetWebDeviceWareSkuById, GetLeaseGoodsResult } from './api';
import { useRouter } from 'next/router';
import Layout from '~/components/layout';
import { UserContext } from '~/lib/userProvider';
import api, { GetWebDeviceDetailResult, GetWebDeviceWareSkuById, GetLeaseGoodsResult } from './api';
import flowPat from './assets/flow-path.png';
import { RangePickerProps } from 'antd/es/date-picker';
import OrderForGoods from './components/orderForGoods';
import ImagePreview from './components/picture-preview';
import { Box } from './styled';
const { RangePicker } = DatePicker;
const { CheckableTag } = Tag;
......@@ -63,7 +66,7 @@ export default function EquipmentLeasingDetail() {
}
}, [id]);
//租赁弹框
// 租赁弹框
const [visible, setVisible] = useState(false);
const [isModalOpen, setIsModalOpen] = useState(false);
const [isModalDateOpen, setIsModalDateOpen] = useState(false);
......
......@@ -5,7 +5,7 @@ export interface GetWebDeviceDetailParams {
type: 1;
}
export interface GetLeaseGoodsParams {
leaseTerm: number; //租赁时限:(输入0:1-7天、输入1:8-15天、输入2:16-30天、输入3:30天以上)
leaseTerm: number; // 租赁时限:(输入0:1-7天、输入1:8-15天、输入2:16-30天、输入3:30天以上)
productSpecId: number;
}
......@@ -91,17 +91,17 @@ export interface WebDeviceUpdateParams {
}
export default {
//web-设备租赁-详情
// web-设备租赁-详情
listDetailDeviceInfo: (
params: GetWebDeviceDetailParams,
): Promise<Response<GetWebDeviceDetailResult>> => {
return request('/pms/product/mall/getLeaseGoodsDetail', 'get', params);
},
//web-设备租赁-立即租赁
// web-设备租赁-立即租赁
listWareSkuUpdate: (params: WebDeviceUpdateParams): Promise<Response<number>> => {
return request('/pms/appDevice/update', 'post', params);
},
//web-设备租赁-详情-获取设备商品规格价格详情
// web-设备租赁-详情-获取设备商品规格价格详情
GoodsPriceDetail: (params: GetLeaseGoodsParams): Promise<Response<GetLeaseGoodsResult>> => {
return request('/pms/product/mall/getLeaseGoodsPriceDetail', 'get', params);
},
......
......@@ -47,15 +47,15 @@ export interface GetOrderForGoods {
}
export default {
//web-地址管理-查询用户地址列表-条件查询
// web-地址管理-查询用户地址列表-条件查询
listUserAddress: (params: {}): Promise<Response<UserAddress[]>> => {
return request('/oms/user-address/selectList', 'POST', params);
},
//web-设备租赁-下单
// web-设备租赁-下单
FeignAddLease: (params: GetWebDeviceDetailParams): Promise<Response<GetOrderForGoods>> => {
return request('/oms/RentalOrders/feignAddLease', 'post', params);
},
//web-设备租赁-订单支付
// web-设备租赁-订单支付
OrderPayment: (params: { orderNo: string }): Promise<Response<GetOrderForGoods>> => {
return request(`/payment/repocash/orderPayment`, 'get', params);
},
......
import React, { useContext, useEffect, useState } from 'react';
import { OrderForGoodsBox } from './styled';
import type { RadioChangeEvent } from 'antd';
import { Button, Radio, Space, Input, message, Modal, Image } from 'antd';
import api, { UserAddress, GetOrderForGoods } from './api';
import moment from 'moment';
import { UserContext } from '~/lib/userProvider';
import api, { UserAddress, GetOrderForGoods } from './api';
import { OrderForGoodsBox } from './styled';
import { ShopDetail } from '../../[id].page';
import { GetWebDeviceDetailResult, GetWebDeviceWareSkuById, GetLeaseGoodsResult } from '../../api';
import { UserContext } from '~/lib/userProvider';
const { TextArea } = Input;
interface PropsBox {
setIsorderForGoods: (boolean: boolean) => void;
......@@ -81,7 +85,7 @@ export default function OrderForGoods(props: PropsBox) {
.then((res) => {
console.log(res);
setList(res.result);
let index: number = res.result?.findIndex((item) => item.type === 0) as number;
const index: number = res.result?.findIndex((item) => item.type === 0) as number;
setValue(index);
})
.catch((err) => {
......@@ -92,10 +96,10 @@ export default function OrderForGoods(props: PropsBox) {
}
}, []);
//图片预览
// 图片预览
const [visible, setVisible] = useState(false);
//付款
// 付款
const { userInfo } = useContext(UserContext);
const [loading, setLoading] = useState(false);
const [isPaymentOpen, setIsPaymentOpen] = useState(false);
......@@ -123,7 +127,7 @@ export default function OrderForGoods(props: PropsBox) {
}
};
//扫码管理地址
// 扫码管理地址
const [isAddAddressOpen, setIsAddAddressOpen] = useState(false);
const [addressVisible, setAddressVisible] = useState(false);
......
import React, { useState, useRef } from 'react';
import { Box } from './styled';
import { LeftOutlined, RightOutlined } from '@ant-design/icons';
import { Box } from './styled';
import { WareImgsType } from '../../api';
interface ImagesType {
......@@ -31,7 +33,7 @@ export default function PicturePreview(props: ImagesType) {
};
// 移动缩略图
const handleSlide = (direction: string) => {
//左侧按钮
// 左侧按钮
if (direction == 'left') {
moveLeft == 0 ? setMoveLeft(0) : setMoveLeft((props) => props - 1);
} else {
......@@ -50,17 +52,17 @@ export default function PicturePreview(props: ImagesType) {
// 最右侧和最下侧的临界值
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';
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';
big.current.style.left = `${-3 * left}px`; // 3这个值是 大图除以小图算出来的比例 这里大图是900px 小图是300px
big.current.style.top = `${-3 * top}px`;
};
return (
<Box>
......@@ -83,7 +85,7 @@ export default function PicturePreview(props: ImagesType) {
<LeftOutlined className='el-icon-arrow-left' onClick={() => handleSlide('left')} />
)}
<div className='img_list_content'>
<div className='img_list' style={{ marginLeft: -moveLeft * 25 + '%' }}>
<div className='img_list' style={{ marginLeft: `${-moveLeft * 25}%` }}>
{imgList?.map((item, index) => (
<img
onMouseOver={() => handleChangeImg(index)}
......
import { useContext, useEffect, useState } from 'react';
import { Pagination, Image as AntdImage } from 'antd';
import Image from 'next/image';
import { useRouter } from 'next/router';
import { useContext, useEffect, useRef, useState } from 'react';
import commonApi from '~/api';
import ContentBox from '~/components/contentBox';
import Filter, { AdapterResult, FilterResult } from '~/components/filter';
import Layout from '~/components/layout';
import { UserContext } from '~/lib/userProvider';
import api, { Device } from './api';
import { Box } from './styled';
import { UserContext } from '~/lib/userProvider';
import commonApi from '~/api';
// 此函数在构建时被调用
export async function getStaticProps() {
//获取筛选数据,进行静态渲染
// 获取筛选数据,进行静态渲染
return {
props: {},
};
......@@ -54,14 +57,14 @@ export default function EquipmentLeasing(props: Props) {
);
};
const [filterResult, setFilterResult] = useState<AdapterResult>({}); //筛选结果
const [count, setCount] = useState(0); //商品总数
const [abort, setAbort] = useState<AbortController | null>(null); //请求中断
const [filterResult, setFilterResult] = useState<AdapterResult>({}); // 筛选结果
const [count, setCount] = useState(0); // 商品总数
const [abort, setAbort] = useState<AbortController | null>(null); // 请求中断
const [pageParams, setPageParams] = useState({
type: 1,
pageNo: 1,
pageSize: 15,
}); //分页器对象
}); // 分页器对象
const onPageChange = (page: number, pageSize: number) => {
setPageParams({
......@@ -71,17 +74,17 @@ export default function EquipmentLeasing(props: Props) {
};
useEffect(() => {
//中断前一次列表请求
// 中断前一次列表请求
abort?.abort();
setAbort(new AbortController());
}, [filterResult, pageParams]);
//端口列表请求
// 端口列表请求
useEffect(() => {
let queryVal = JSON.parse(JSON.stringify(router.query));
const queryVal = JSON.parse(JSON.stringify(router.query));
let rs;
if (Object.keys(queryVal).length) {
rs = { categoryId: [Number(queryVal['categoryId'])] };
rs = { categoryId: [Number(queryVal.categoryId)] };
}
api
.listPageDeviceInfo(
......@@ -127,9 +130,9 @@ export default function EquipmentLeasing(props: Props) {
}, []);
useEffect(() => {
let queryVal = JSON.parse(JSON.stringify(router.query));
const queryVal = JSON.parse(JSON.stringify(router.query));
if (Object.keys(router.query).length) {
setFilterResult({ categoryId: [Number(queryVal['categoryId'])] });
setFilterResult({ categoryId: [Number(queryVal.categoryId)] });
}
}, [router]);
......
import request, { Response } from '~/api/request';
import { TypesResp } from '~/components/filter/api';
export interface ListPageFlyingInfoParams {
pageNo: number;
pageSize: number;
......@@ -55,7 +56,7 @@ export interface PilotRegistrationParams {
}
export default {
//web-飞手培训-分页
// web-飞手培训-分页
listPageJobServicesInfo: (
params: ListPageFlyingInfoParams,
): Promise<Response<ListPageFlyingInfoResp>> => {
......
import React, { useEffect, useState } from 'react';
import Layout from '~/components/layout';
import { Box } from './styled';
import { Button, Tabs } from 'antd';
import { useRouter } from 'next/router';
import { ParsedUrlQuery } from 'querystring';
import { Tabs } from 'antd';
import type { TabsProps } from 'antd';
import { useRouter } from 'next/router';
import Layout from '~/components/layout';
import api, { ListPageFlyingInfoResp } from './api';
import { Box } from './styled';
const contentStyle: React.CSSProperties = {
width: '100%',
......
......@@ -30,7 +30,7 @@ export interface ListPageFlyingInfoResp {
}
export default {
//web-飞手培训-详情
// web-飞手培训-详情
listPageJobServicesInfo: (
params: ListPageFlyingInfoParams,
): Promise<Response<ListPageFlyingInfoResp>> => {
......
import React from 'react';
import { Tabs } from 'antd';
import type { TabsProps } from 'antd';
import Layout from '~/components/layout';
import { Box } from './styled';
import BrushQuestionZone from './components/brushQuestionZone';
import MockExam from './components/mockExam';
import { Tabs } from 'antd';
import type { TabsProps } from 'antd';
import { Box } from './styled';
export default function ExaminationDateil() {
const onChange = (key: string) => {
......
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';
import { Box } from './styled';
import api, { SkillsType, RegionResp } from '../../../api';
interface BrushQuestionZoneType {}
export default function BrushQuestionZone() {
const [secondDistrictInfo, setSecondDistrictInfo] = useState(Array<RegionResp>);
......
import React, { useEffect, useState } from 'react';
import { Box } from './styled';
import Image from 'next/image';
import kh from './assets/kh.jpg';
import { Box } from './styled';
interface MockExamType {}
export default function MockExam() {
......
import { useContext, useEffect, useState } from 'react';
import {
Button,
Cascader,
......@@ -14,15 +16,17 @@ import {
import type { CheckboxValueType } from 'antd/es/checkbox/Group';
import Image from 'next/image';
import { useRouter } from 'next/router';
import { useContext, useEffect, useState } from 'react';
import commonApi from '~/api';
import ContentBox from '~/components/contentBox';
import { TypesResp } from '~/components/filter/api';
import Layout from '~/components/layout';
import { UserContext } from '~/lib/userProvider';
import { phoneNumber } from '~/lib/validateUtils';
import api, { Flying, RegionResp, SkillsType } from './api';
import { Box } from './styled';
import { TypesResp } from '~/components/filter/api';
import commonApi from '~/api';
interface FilterInfoParams {
provinceId?: number;
categoryId?: any[];
......@@ -103,12 +107,12 @@ export default function FlyingHandService() {
const [pageParams, setPageParams] = useState({
pageNo: 1,
pageSize: 12,
}); //分页器对象
}); // 分页器对象
const [filterParams, setFilterParams] = useState<FilterInfoParams>();
const [count, setCount] = useState(0); //商品总数
const [abort, setAbort] = useState<AbortController | null>(null); //请求中断
const [count, setCount] = useState(0); // 商品总数
const [abort, setAbort] = useState<AbortController | null>(null); // 请求中断
const onPageChange = (page: number, pageSize: number) => {
setPageParams({
......@@ -118,16 +122,16 @@ export default function FlyingHandService() {
};
useEffect(() => {
//中断前一次列表请求
// 中断前一次列表请求
abort?.abort();
setAbort(new AbortController());
}, [filterParams, pageParams]);
//端口列表请求
// 端口列表请求
useEffect(() => {
console.log(router);
let queryVal = JSON.parse(JSON.stringify(router.query));
const queryVal = JSON.parse(JSON.stringify(router.query));
for (const key in queryVal) {
queryVal[key] = Number(queryVal[key]);
}
......@@ -258,7 +262,7 @@ export default function FlyingHandService() {
useEffect(() => {
if (Object.keys(router.query).length) {
let queryVal = JSON.parse(JSON.stringify(router.query));
const queryVal = JSON.parse(JSON.stringify(router.query));
for (const key in queryVal) {
queryVal[key] = Number(queryVal[key]);
}
......@@ -276,7 +280,7 @@ export default function FlyingHandService() {
}
}, [router]);
//报名
// 报名
const [isModalOpen, setIsModalOpen] = useState(false);
const [loading, setLoading] = useState(false);
const handleOk = async (values: any) => {
......
......@@ -37,9 +37,9 @@ export interface DynamicListResp {
}
export interface CommentParams {
content: string; //评论内容
dynamicId: number; //动态id
parentId?: number; //父级评论
content: string; // 评论内容
dynamicId: number; // 动态id
parentId?: number; // 父级评论
rootPath: string;
}
......@@ -70,17 +70,17 @@ export default {
return request('/release/dynamic/dynamicList', 'get', params);
},
//评论
// 评论
comment(params: CommentParams): Promise<Response<null>> {
return request('/release/dynamic/comment', 'post', params);
},
//动态详情
// 动态详情
byDynamic(params: { dynamicId: number }): Promise<Response<dynamicDetail>> {
return request('/release/dynamic/dynamicDetails', 'get', params);
},
//点赞或取消点赞
// 点赞或取消点赞
likeOrCancel(params: { dynamicId: number }) {
return request('/release/dynamic/likeOrCancel', 'get', params);
},
......
import request, { Response } from '~/api/request';
export interface PublishParams {
lat?: number; //纬度
lon?: number; //经度
description: string; //描述
userId: number; //用户id
lat?: number; // 纬度
lon?: number; // 经度
description: string; // 描述
userId: number; // 用户id
mediaVO: { type: number; url: string }[];
}
export default {
//动态发布
// 动态发布
publish(params: PublishParams): Promise<Response<null>> {
return request('/release/dynamic/publish', 'post', params);
},
......
import { useContext, useState } from 'react';
import { Form, Input, Modal, Image, Button, Row, Col } from 'antd';
import type { UploadFile } from 'antd/es/upload/interface';
import { useContext, useState } from 'react';
import NImage from 'next/image';
import api from './api';
import deleteIcon from '~/assets/images/delete-icon.png';
import uploadImg from '~/assets/images/upload.png';
import { Uploader } from '~/components/uploader';
import { useGeolocation } from '~/lib/hooks';
import { UserContext } from '~/lib/userProvider';
import uploadImg from '~/assets/images/upload.png';
import deleteIcon from '~/assets/images/delete-icon.png';
import api from './api';
import styles from './index.module.scss';
import { Uploader } from '~/components/uploader';
type Props = {
open: boolean;
......@@ -30,25 +33,25 @@ export default function PublishMessage(props: Props) {
const { userInfo } = useContext(UserContext);
const position = useGeolocation();
//图片上传
// 图片上传
const fileUploadChange = (value: any) => {
setFileList([...fileList, ...value]);
};
//删除媒体
// 删除媒体
const deleteMedia = (file: UploadFile) => {
let list = fileList.filter((v) => v.uid !== file.uid);
const list = fileList.filter((v) => v.uid !== file.uid);
setFileList(list || []);
};
//提交
// 提交
const onFinish = (values: any) => {
setShowLoad(true);
if (userInfo) {
api
.publish({
lat: position?.position?.lat, //纬度
lon: position?.position?.lng, //经度
description: values.description, //描述
userId: userInfo.id, //用户id
lat: position?.position?.lat, // 纬度
lon: position?.position?.lng, // 经度
description: values.description, // 描述
userId: userInfo.id, // 用户id
mediaVO: fileList.map((item) => ({
type: item.type?.includes('image') ? 0 : 1,
url: item.url as string,
......@@ -68,7 +71,7 @@ export default function PublishMessage(props: Props) {
});
}
};
//取消
// 取消
const handleCancel = () => {
form.resetFields();
setFileList([]);
......
import { Button, Image, Space, Input, Form, Divider, Skeleton } from 'antd';
import Layout from '~/components/layout';
import styles from './index.module.scss';
import errImg from '~/assets/errImg';
import { RightOutlined } from '@ant-design/icons';
import { useContext, useEffect, useState } from 'react';
import PublishMessage from './components/publishMessage';
import api, { ByDynamicResp, Dynamic } from './api';
import { RightOutlined } from '@ant-design/icons';
import { Button, Image, Space, Input, Form, Divider, Skeleton } from 'antd';
import moment from 'moment';
import InfiniteScroll from 'react-infinite-scroll-component';
import errImg from '~/assets/errImg';
import Layout from '~/components/layout';
import { UserContext } from '~/lib/userProvider';
import moment from 'moment';
import api, { ByDynamicResp, Dynamic } from './api';
import PublishMessage from './components/publishMessage';
import styles from './index.module.scss';
interface Item extends Dynamic {
openComment?: boolean; //是否开启评论
showCommentAll?: boolean; //是否展示全部评论
commentList?: Array<ByDynamicResp>; //评论列表
openComment?: boolean; // 是否开启评论
showCommentAll?: boolean; // 是否展示全部评论
commentList?: Array<ByDynamicResp>; // 评论列表
}
export default function Forum() {
......@@ -23,9 +26,9 @@ export default function Forum() {
pageNo: 1,
pageSize: 16,
});
const [count, setCount] = useState(0); //动态总数
const [count, setCount] = useState(0); // 动态总数
const { userInfo, setNeedLogin } = useContext(UserContext);
const [form] = Form.useForm(); //评论区的form
const [form] = Form.useForm(); // 评论区的form
useEffect(() => {
api
......@@ -73,7 +76,7 @@ export default function Forum() {
getCommentList(item);
};
//获取评论列表
// 获取评论列表
const getCommentList = (item: Item) => {
api
.byDynamic({
......@@ -88,14 +91,14 @@ export default function Forum() {
});
};
//展示所有评论
// 展示所有评论
const showCommentAll = (item: Item) => {
item.showCommentAll = true;
const temp = [...list];
setList(temp);
};
//评论内容
// 评论内容
const onComment = (values: any, item: Item) => {
if (userInfo) {
api
......@@ -117,7 +120,7 @@ export default function Forum() {
}
};
//点赞或取消
// 点赞或取消
const onLike = (item: Item) => {
if (userInfo) {
api
......@@ -244,11 +247,10 @@ export default function Forum() {
?.filter((comment, i) => {
if (item.showCommentAll) {
return true;
} else {
}
if (i < 2) {
return true;
}
}
})
.map((comment) => {
return (
......
import React from 'react';
import { Box } from './styled';
import Layout from '~/components/layout';
import { Box } from './styled';
import WaterfallFlowBody from './waterfallFlowBody';
export default function Home() {
return (
<Layout>
......
......@@ -160,17 +160,17 @@ export interface TenderApplyType {
}
export const listNewsApi = {
//新闻列表
// 新闻列表
listNewsPage: (params: ListPageNewsInfoParams): Promise<Response<ListPageNewsInfoResp>> => {
return request('/release/industry-news/listNewsPage', 'post', params);
},
//招标列表
// 招标列表
listNewTenderInfo: (
params: ListTenderNewsInfoParams,
): Promise<Response<ListTenderNewsInfoResp>> => {
return request('/release/tender/listNewTenderInfo', 'post', params);
},
//web-招标-合作申请提交
// web-招标-合作申请提交
tenderApply: (params: TenderApplyType): Promise<Response<number>> => {
return request('/release/tender/apply', 'post', params);
},
......@@ -185,7 +185,7 @@ export interface ResHomeCategoriesType {
}
export default {
//新闻列表
// 新闻列表
HomeCategories: (params: HomeCategoriesType): Promise<Response<ResHomeCategoriesType>> => {
return request('/pms/product/mall/getPageHomeCategories', 'get', params);
},
......
......@@ -46,23 +46,23 @@ export interface BitmapInfo<T> {
}
export default {
//web-首页-地图-全国点位
// web-首页-地图-全国点位
listPositioningInfo: (
params: PositioningInfoParams,
): Promise<Response<BitmapInfo<ListPageJobInfoType>>> => {
return request('/release/website/getWebsiteList', 'get', params);
},
//web-首页-地图-全国飞手
// web-首页-地图-全国飞手
listFlyerBitmap: (
params: PositioningInfoParams,
): Promise<Response<BitmapInfo<FlyerBitmapEntiy>>> => {
return request('/release/website/flyer/bitmap', 'get', params);
},
//web-首页-地图-全国无人机
// web-首页-地图-全国无人机
listUavBitmap: (params: PositioningInfoParams): Promise<Response<BitmapInfo<UavBitmapEntiy>>> => {
return request('/release/website/uav/bitmap', 'get', params);
},
//web-首页-地图-全国维修-海点数据
// web-首页-地图-全国维修-海点数据
listMaintainBitmap: (
params: PositioningInfoParams,
): Promise<Response<BitmapInfo<ListPageJobInfoType>>> => {
......
import React, { Component, useEffect, useState } from 'react';
import { message } from 'antd';
import { Box } from './styled';
import React, { useEffect, useState } from 'react';
import { useRouter } from 'next/router';
import api from './api';
import icon from './assets/img.png';
import { useRouter } from 'next/router';
import { Box } from './styled';
let MAP: any;
let Amap: any;
......@@ -19,7 +21,7 @@ export default function MapComponent() {
const [mapItem, setMapItem] = useState(0);
const [userPositioning, setUserPositioning] = useState<UserInfoType>();
const [markerCol, setMarkerCol] = useState<any>([]);
//初始化地图
// 初始化地图
const init = async () => {
try {
const AMapLoader = await import(/* webpackChunkName: "amap" */ '@amap/amap-jsapi-loader');
......@@ -36,14 +38,14 @@ export default function MapComponent() {
zoom: 9, // 初始化地图级别
center: [113.93029, 22.53291], // 初始化地图中心点位置
});
//用户定位
// 用户定位
AMap.plugin('AMap.Geolocation', function () {
const geolocation = new AMap.Geolocation({
enableHighAccuracy: true, //是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:5s
position: 'RB', //定位按钮的停靠位置
offset: [10, 20], //定位按钮与设置的停靠位置的偏移量,默认:[10, 20]
zoomToAccuracy: true, //定位成功后是否自动调整地图视野到定位点
enableHighAccuracy: true, // 是否使用高精度定位,默认:true
timeout: 10000, // 超过10秒后停止定位,默认:5s
position: 'RB', // 定位按钮的停靠位置
offset: [10, 20], // 定位按钮与设置的停靠位置的偏移量,默认:[10, 20]
zoomToAccuracy: true, // 定位成功后是否自动调整地图视野到定位点
});
MAP.addControl(geolocation);
geolocation.getCurrentPosition(function (status: string, result: any) {
......@@ -54,13 +56,13 @@ export default function MapComponent() {
}
});
});
//解析定位结果
// 解析定位结果
async function onComplete(data: any) {
console.log('定位成功');
setUserPositioning(data.position);
// return await mapEntiy(0,data.position);
}
//解析定位错误信息
// 解析定位错误信息
async function onError(data: any) {
// message.error(`定位失败
// 失败原因排查信息:${data.message}
......@@ -93,7 +95,7 @@ export default function MapComponent() {
if (markerList.length) MAP?.add(markerList);
setMarkerCol([...markerList]);
}
//自适应显示多个点位
// 自适应显示多个点位
MAP?.setFitView();
};
const showFlyerBitmap = async (index: number, data?: UserInfoType, pageSize?: number) => {
......@@ -113,7 +115,7 @@ export default function MapComponent() {
if (markerList.length) MAP?.add(markerList);
setMarkerCol(markerList);
}
//自适应显示多个点位
// 自适应显示多个点位
MAP?.setFitView();
};
const showUavBitmap = async (index: number, data?: UserInfoType) => {
......@@ -133,10 +135,10 @@ export default function MapComponent() {
if (markerList.length) MAP?.add(markerList);
setMarkerCol(markerList);
}
//自适应显示多个点位
// 自适应显示多个点位
MAP?.setFitView();
};
//添加点位
// 添加点位
const mapEntiy = async (index: number, data?: UserInfoType) => {
MAP?.remove(markerCol);
if (index === 0) {
......
import { message } from 'antd';
import { useEffect, useState } from 'react';
import { message } from 'antd';
import Layout from '~/components/layout';
import { Box } from './styled';
import api from '../api';
import icon from '../assets/img.png';
import { Box } from './styled';
let MAP: any;
let Amap: any;
......@@ -19,7 +23,7 @@ export default function MoreServicePoints() {
const [userPositioning, setUserPositioning] = useState<UserInfoType>();
const [markerCol, setMarkerCol] = useState<any>([]);
const [servicePoints, setServicePoints] = useState<any>([]);
//初始化地图
// 初始化地图
const init = async () => {
try {
const AMapLoader = await import(/* webpackChunkName: "amap" */ '@amap/amap-jsapi-loader');
......@@ -36,14 +40,14 @@ export default function MoreServicePoints() {
zoom: 9, // 初始化地图级别
center: [113.93029, 22.53291], // 初始化地图中心点位置
});
//用户定位
// 用户定位
AMap.plugin('AMap.Geolocation', function () {
const geolocation = new AMap.Geolocation({
enableHighAccuracy: true, //是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:5s
position: 'RB', //定位按钮的停靠位置
offset: [10, 20], //定位按钮与设置的停靠位置的偏移量,默认:[10, 20]
zoomToAccuracy: true, //定位成功后是否自动调整地图视野到定位点
enableHighAccuracy: true, // 是否使用高精度定位,默认:true
timeout: 10000, // 超过10秒后停止定位,默认:5s
position: 'RB', // 定位按钮的停靠位置
offset: [10, 20], // 定位按钮与设置的停靠位置的偏移量,默认:[10, 20]
zoomToAccuracy: true, // 定位成功后是否自动调整地图视野到定位点
});
MAP.addControl(geolocation);
geolocation.getCurrentPosition(function (status: string, result: any) {
......@@ -56,13 +60,13 @@ export default function MoreServicePoints() {
}
});
});
//解析定位结果
// 解析定位结果
async function onComplete(data: any) {
console.log('定位成功');
setUserPositioning(data.position);
// return await mapEntiy(0,data.position);
}
//解析定位错误信息
// 解析定位错误信息
async function onError(data: any) {
// message.error(`定位失败
// 失败原因排查信息:${data.message}
......@@ -96,7 +100,7 @@ export default function MoreServicePoints() {
if (markerList.length) MAP?.add(markerList);
setMarkerCol([...markerList]);
}
//自适应显示多个点位
// 自适应显示多个点位
MAP?.setFitView();
};
const showFlyerBitmap = async (index: number, data?: UserInfoType, pageSize?: number) => {
......@@ -117,7 +121,7 @@ export default function MoreServicePoints() {
if (markerList.length) MAP?.add(markerList);
setMarkerCol(markerList);
}
//自适应显示多个点位
// 自适应显示多个点位
MAP?.setFitView();
};
const showMaintainBitmap = async (index: number, data?: UserInfoType, pageSize?: number) => {
......@@ -138,7 +142,7 @@ export default function MoreServicePoints() {
if (markerList.length) MAP?.add(markerList);
setMarkerCol(markerList);
}
//自适应显示多个点位
// 自适应显示多个点位
MAP?.setFitView();
};
const showUavBitmap = async (index: number, data?: UserInfoType) => {
......@@ -159,10 +163,10 @@ export default function MoreServicePoints() {
if (markerList.length) MAP?.add(markerList);
setMarkerCol(markerList);
}
//自适应显示多个点位
// 自适应显示多个点位
MAP?.setFitView();
};
//添加点位
// 添加点位
const mapEntiy = async (index: number, data?: UserInfoType) => {
MAP?.remove(markerCol);
if (userPositioning) {
......@@ -199,7 +203,7 @@ export default function MoreServicePoints() {
const moveTo = (item: any, index: number) => {
const p = markerCol[index].getPosition();
var infoWindow = new Amap.InfoWindow({
const infoWindow = new Amap.InfoWindow({
position: p,
offset: new Amap.Pixel(20, -10),
content: item.dizhi || item.flyerName || item.uavName || item.name,
......@@ -207,7 +211,8 @@ export default function MoreServicePoints() {
infoWindow.open(MAP);
if (item.dizhi) {
return MAP?.setCenter([item.jd, item.wd]);
} else if (item.flyerName || item.uavName || item.name) {
}
if (item.flyerName || item.uavName || item.name) {
return MAP?.setCenter([item.lon, item.lat]);
}
return message.warning('暂无位置信息');
......
import React, { useEffect, useState } from 'react';
import { Carousel } from 'antd';
import { Box } from './styled';
import Image from 'next/image';
import commonApi from '~/api';
import { Box } from './styled';
export default function RotationChart() {
const [bannerList, setBannerList] = useState<string[]>([]);
const getPropagandaCenter = () => {
......
import { Select, Space, message } from 'antd';
import React, { useEffect, useState } from 'react';
import { Select, Space } from 'antd';
import { useRouter } from 'next/router';
import React, { useContext, useEffect, useState } from 'react';
import ContentBox from '~/components/contentBox';
import WxCodeModal from '~/components/wxCodeModal';
import { bigNumberTransform } from '~/utils/money';
import api, { AllType, NewsPageType, NewsTenderType, listNewsApi } from './api';
import Map from './components/map';
import RotationChart from './components/rotationChart';
import { Box } from './styled';
import { UserContext } from '~/lib/userProvider';
import api, {
AllType,
NewsPageType,
NewsTenderType,
equipmentLeasingApi,
flightSkillsApi,
jobServicesApi,
listNewsApi,
mallApi,
} from './api';
import { bigNumberTransform } from '~/utils/money';
import WxCodeModal from '~/components/wxCodeModal';
interface ColumnsType {
title: string;
router: string;
......@@ -109,10 +101,10 @@ export default function WaterfallFlowBody() {
useEffect(() => {
(async () => {
const res2 = await api.HomeCategories({ type: 2 }); //无人机培训
const res4 = await api.HomeCategories({ type: 4 }); //无人机销售
const res1 = await api.HomeCategories({ type: 1 }); //无人机出租
const res3 = await api.HomeCategories({ type: 3 }); //无人机服务
const res2 = await api.HomeCategories({ type: 2 }); // 无人机培训
const res4 = await api.HomeCategories({ type: 4 }); // 无人机销售
const res1 = await api.HomeCategories({ type: 1 }); // 无人机出租
const res3 = await api.HomeCategories({ type: 3 }); // 无人机服务
console.log(res1, res2, res3, res4);
const listOption = JSON.parse(JSON.stringify(list)).map((item: string, index: number) => {
return { id: index, categoryName: item, value: index };
......@@ -143,8 +135,8 @@ export default function WaterfallFlowBody() {
};
}),
);
let res7 = await listNewsApi.listNewsPage({ pageNo: 1, pageSize: 5 });
let res8 = await listNewsApi.listNewTenderInfo({
const res7 = await listNewsApi.listNewsPage({ pageNo: 1, pageSize: 5 });
const res8 = await listNewsApi.listNewTenderInfo({
pageNo: 1,
pageSize: 6,
});
......@@ -341,7 +333,7 @@ export default function WaterfallFlowBody() {
return (
<Box>
<ContentBox
boxIndex={1} //分为左右两列,每列一个,从上而下
boxIndex={1} // 分为左右两列,每列一个,从上而下
leftcontentstyle={{
width: '806px',
margin: { top: 0, right: '10px', bottom: '10px', left: 0 },
......
import styled from 'styled-components';
import button from './assets/button.png';
import xwbg from './assets/xwbg.png';
......
......@@ -28,7 +28,7 @@ export interface ListPageJobInfoResp {
}
export default {
//web-作业服务-分页
// web-作业服务-分页
listPageJobServicesInfo: (
params: ListPageJobInfoParams,
option: {},
......
import React, { useContext, useEffect, useState } from 'react';
import Layout from '~/components/layout';
import { Box } from './styled';
import moment from 'moment';
import { Tabs, Modal, Button, Form, message, DatePicker, Image as AImage, Input } from 'antd';
import { RangePickerProps } from 'antd/es/date-picker';
import type { TabsProps } from 'antd';
import Evaluate from './components/evaluate';
import { useRouter } from 'next/router';
import api, { ListPageJobInfoResp } from './api';
import { RangePickerProps } from 'antd/es/date-picker';
import moment from 'moment';
import Image from 'next/image';
import { useRouter } from 'next/router';
import { RegionResp } from '~/components/filter/api';
import AddressMap from './components/map';
import Layout from '~/components/layout';
import { UserContext } from '~/lib/userProvider';
import api, { ListPageJobInfoResp } from './api';
import Evaluate from './components/evaluate';
import AddressMap from './components/map';
import { Box } from './styled';
const { RangePicker } = DatePicker;
const { TextArea } = Input;
export default function JobServicesDetail() {
......@@ -66,7 +70,7 @@ export default function JobServicesDetail() {
setSale((Math.floor(Math.random() * 901) + 100).toFixed(0));
}, []);
//预约弹框
// 预约弹框
const [visible, setVisible] = useState(false);
const [formDate] = Form.useForm();
const [isModalOpen, setIsModalOpen] = useState(false);
......@@ -87,11 +91,11 @@ export default function JobServicesDetail() {
return current && current < moment().endOf('day');
};
useEffect(() => {
//选择地点后重新验证
// 选择地点后重新验证
formDate.setFieldValue('latitudeAndLongitude', addressContent);
formDate.validateFields();
}, [addressContent]);
//立即预约
// 立即预约
const appointmentNow = () => {
if (userInfo) {
setIsModalOpen(true);
......
import request, { Response } from '~/api/request';
import { RegionResp } from '~/components/filter/api';
export interface ListPageJobInfoParams {
pageNo: number;
pageSize: number;
......@@ -52,17 +53,17 @@ export interface GetOrderTaskParams {
}
export default {
//web-作业服务-详情
// web-作业服务-详情
listDetailJobServicesInfo: (
params: GetJobServicesDetailParams,
): Promise<Response<ListPageJobInfoResp>> => {
return request('/pms/backstage/work/queryWorkService', 'get', params);
},
//web-作业服务-详情-立即预约
// web-作业服务-详情-立即预约
insertOrderTask: (params: GetOrderTaskParams): Promise<Response<null>> => {
return request('/oms/serviceOrderTask/insertOrderTask', 'post', params);
},
//区域
// 区域
region: (): Promise<Response<Array<RegionResp>>> => {
return request('/pms/webDevice/getSecondDistrictInfo');
},
......
import React, { useEffect } from 'react';
import { Box } from './styled';
import React from 'react';
import { Rate } from 'antd';
import Moment from 'moment';
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';
......@@ -12,7 +13,8 @@ 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';
import { Box } from './styled';
import { JobDetail } from '../../api';
const imgList = [pic1, pic2, pic3, pic4, pic5, pic6, pic7, pic8, pic9];
......@@ -37,7 +39,7 @@ interface EvaluateType {
export default function Evaluate(props: EvaluateType) {
const { evaluateInfo } = props;
let listVal: Array<JobDetail> = JSON.parse(JSON.stringify(evaluateInfo));
const 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)];
......
import React, { Component, Dispatch, SetStateAction, useEffect, useState } from 'react';
import { message } from 'antd';
import { Box } from './styled';
import React, { Dispatch, SetStateAction, useEffect, useState } from 'react';
import { useRouter } from 'next/router';
import { Box } from './styled';
let MAP: any;
let Amap: any;
......@@ -22,7 +24,7 @@ export default function MapComponent(props: BoxProps) {
const [mapItem, setMapItem] = useState(0);
const [userPositioning, setUserPositioning] = useState<UserInfoType>();
const [markerCol, setMarkerCol] = useState<any>([]);
//初始化地图
// 初始化地图
const init = async () => {
try {
const AMapLoader = await import(/* webpackChunkName: "amap" */ '@amap/amap-jsapi-loader');
......@@ -39,14 +41,14 @@ export default function MapComponent(props: BoxProps) {
zoom: 9, // 初始化地图级别
center: [113.93029, 22.53291], // 初始化地图中心点位置
});
//用户定位
// 用户定位
AMap.plugin('AMap.Geolocation', function () {
const geolocation = new AMap.Geolocation({
enableHighAccuracy: true, //是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:5s
position: 'RB', //定位按钮的停靠位置
offset: [10, 20], //定位按钮与设置的停靠位置的偏移量,默认:[10, 20]
zoomToAccuracy: true, //定位成功后是否自动调整地图视野到定位点
enableHighAccuracy: true, // 是否使用高精度定位,默认:true
timeout: 10000, // 超过10秒后停止定位,默认:5s
position: 'RB', // 定位按钮的停靠位置
offset: [10, 20], // 定位按钮与设置的停靠位置的偏移量,默认:[10, 20]
zoomToAccuracy: true, // 定位成功后是否自动调整地图视野到定位点
});
MAP.addControl(geolocation);
geolocation.getCurrentPosition(function (status: string, result: any) {
......@@ -57,13 +59,13 @@ export default function MapComponent(props: BoxProps) {
}
});
});
//解析定位结果
// 解析定位结果
async function onComplete(data: any) {
console.log('定位成功');
setUserPositioning(data.position);
// return await mapEntiy(0,data.position);
}
//解析定位错误信息
// 解析定位错误信息
async function onError(data: any) {
// message.error(`定位失败
// 失败原因排查信息:${data.message}
......@@ -80,7 +82,7 @@ export default function MapComponent(props: BoxProps) {
}
};
//选择点位
// 选择点位
const mapEntiy = async (index: number, data?: UserInfoType) => {
MAP.on('click', mapGet);
setMapItem(index);
......@@ -88,7 +90,7 @@ export default function MapComponent(props: BoxProps) {
const mapGet = (e: any) => {
console.log(e);
// 在这里获取点位信息
const lnglat = e.lnglat;
const { lnglat } = e;
console.log(lnglat);
const geocoder = new Amap.Geocoder({
......
import React, { useEffect, useState, useRef } from 'react';
import { Box } from './styled';
import React, { useEffect, useState } from 'react';
import { Pagination, Image } from 'antd';
import Layout from '~/components/layout';
import ContentBox from '~/components/contentBox';
import { useRouter } from 'next/router';
import commonApi from '~/api';
import ContentBox from '~/components/contentBox';
import Filter, { FilterResult, AdapterResult } from '~/components/filter';
import Layout from '~/components/layout';
import api, { Job } from './api';
import commonApi from '~/api';
import { Box } from './styled';
// 此函数在构建时被调用
export async function getServerSideProps() {
return {
......@@ -38,7 +41,7 @@ export default function JobServices() {
<div className='item-bottom'>
<div className='bottom-left'>{item.inspComtAmount}条评价</div>
<div className='bottom-right'>{item.companyName}</div>
{/*<div className='com'>{item.teamName}</div>*/}
{/* <div className='com'>{item.teamName}</div> */}
</div>
</div>
);
......@@ -52,15 +55,15 @@ export default function JobServices() {
);
};
const [filterResult, setFilterResult] = useState<AdapterResult>({}); //筛选结果
const [filterResult, setFilterResult] = useState<AdapterResult>({}); // 筛选结果
const [pageParams, setPageParams] = useState({
pageNo: 1,
pageSize: 14,
}); //分页器对象
}); // 分页器对象
const [count, setCount] = useState(0); //商品总数
const [abort, setAbort] = useState<AbortController | null>(null); //请求中断
const [count, setCount] = useState(0); // 商品总数
const [abort, setAbort] = useState<AbortController | null>(null); // 请求中断
const onPageChange = (page: number, pageSize: number) => {
setPageParams({
......@@ -78,17 +81,17 @@ export default function JobServices() {
});
};
useEffect(() => {
//中断前一次列表请求
// 中断前一次列表请求
abort?.abort();
setAbort(new AbortController());
}, [filterResult, pageParams]);
//端口列表请求
// 端口列表请求
useEffect(() => {
let queryVal = JSON.parse(JSON.stringify(router.query));
const queryVal = JSON.parse(JSON.stringify(router.query));
let rs;
if (Object.keys(queryVal).length) {
rs = { categoryId: [Number(queryVal['categoryId'])] };
rs = { categoryId: [Number(queryVal.categoryId)] };
}
api
.listPageJobServicesInfo(
......@@ -125,9 +128,9 @@ export default function JobServices() {
}, []);
useEffect(() => {
let queryVal = JSON.parse(JSON.stringify(router.query));
const queryVal = JSON.parse(JSON.stringify(router.query));
if (Object.keys(router.query).length) {
setFilterResult({ categoryId: [Number(queryVal['categoryId'])] });
setFilterResult({ categoryId: [Number(queryVal.categoryId)] });
}
}, [router]);
......
......@@ -29,11 +29,11 @@ export interface Ad {
}
export default {
//web-商品信息-分页
// web-商品信息-分页
deviceList: (params: DeviceListParams, options = {}): Promise<Response<DeviceListResp>> => {
return request('/pms/product/mall/deviceList', 'post', params, options);
},
//产品商城广告位
// 产品商城广告位
listBannerImg: () => {
return request('/release/module/listBannerImg', 'get', {
moduleCode: 'PRODUCT_MARKETP',
......
import styles from './index.module.scss';
import Layout from '~/components/layout';
import { Space, Image as AImage, Row, Col, Button, Divider, Badge } from 'antd';
import { useContext, useEffect, useState } from 'react';
import { DownOutlined, RightOutlined } from '@ant-design/icons';
import { DownOutlined } from '@ant-design/icons';
import { Space, Image as AImage, Row, Col, Button, Divider, Badge } from 'antd';
import Image from 'next/image';
import errImg from '~/assets/errImg';
import { useRouter } from 'next/router';
// Import Swiper React components
import { Swiper, SwiperSlide } from 'swiper/react';
import { Navigation } from 'swiper';
import { Swiper, SwiperSlide } from 'swiper/react';
import errImg from '~/assets/errImg';
import Layout from '~/components/layout';
import OrderForGoods from './components/orderForGoods';
// Import Swiper styles
import 'swiper/css';
import 'swiper/css/navigation';
import { UserContext } from '~/lib/userProvider';
import api, { GetLeaseGoodsDetailResp } from './api';
import IntentionModal from './components/intentionModal';
import { UserContext } from '~/lib/userProvider';
export default function MallDetail() {
const { userInfo, setNeedLogin } = useContext(UserContext);
const [visible, setVisible] = useState(false); //商品图预览
const [visible, setVisible] = useState(false); // 商品图预览
const router = useRouter();
const [id, setId] = useState<number | null>(null);
const [detail, setDetail] = useState<GetLeaseGoodsDetailResp | null>(null); //详情数据
const [intentionModalOpen, setIntentionModalOpen] = useState(false); //意向弹窗
const [productImg, setProductImg] = useState(''); //展示的商品图
const [detail, setDetail] = useState<GetLeaseGoodsDetailResp | null>(null); // 详情数据
const [intentionModalOpen, setIntentionModalOpen] = useState(false); // 意向弹窗
const [productImg, setProductImg] = useState(''); // 展示的商品图
//打开意向modal
// 打开意向modal
const openIntentionModal = () => {
if (userInfo) {
setIntentionModalOpen(true);
......@@ -36,7 +41,7 @@ export default function MallDetail() {
}
};
//提交意向
// 提交意向
const handleIntentionOk = () => {
setIntentionModalOpen(false);
};
......@@ -68,7 +73,7 @@ export default function MallDetail() {
}
}, [id]);
//订单弹框
// 订单弹框
const [isorderForGoods, setIsorderForGoods] = useState(false);
const [wareSkuList, setWareSkuList] = useState<any>();
const [mallDetail, setMallDetail] = useState<any>();
......@@ -239,7 +244,7 @@ export default function MallDetail() {
</div>
</div>
) : (
//订单
// 订单
<OrderForGoods
setIsorderForGoods={setIsorderForGoods}
detailData={detail}
......
......@@ -2,7 +2,7 @@ import request, { Response } from '~/api/request';
export interface GetLeaseGoodsDetailParams {
goodsId: number;
type: 1 | 0; //租赁:1 销售商品:0
type: 1 | 0; // 租赁:1 销售商品:0
}
export interface GetLeaseGoodsDetailResp {
......@@ -88,13 +88,13 @@ interface CommitMallOrderParams {
}
export default {
//web-获取商品详细信息--共多少种选择
// web-获取商品详细信息--共多少种选择
getLeaseGoodsDetail(
params: GetLeaseGoodsDetailParams,
): Promise<Response<GetLeaseGoodsDetailResp>> {
return request('/pms/product/mall/getLeaseGoodsDetail', 'get', params);
},
//提交订单V1.0.0
// 提交订单V1.0.0
commitMallOrder(params: CommitMallOrderParams) {
return request('/oms/app-order/commitMallOrder', 'post', params);
},
......
......@@ -10,7 +10,7 @@ interface CommitMallOrderParams {
}
export default {
//提交订单V1.0.0
// 提交订单V1.0.0
commitMallOrder(params: CommitMallOrderParams) {
return request('/oms/app-order/confirmMallOrder', 'post', params);
},
......
import { Button, Col, Image, message, Modal, Row, Space, InputNumber } from 'antd';
import { Dispatch, SetStateAction, useEffect, useState } from 'react';
import { Button, Col, Image, message, Modal, Row, Space, InputNumber } from 'antd';
import errImg from '~/assets/errImg';
import { GetLeaseGoodsDetailResp, ProductSpecList } from '../../api';
import styles from './index.module.scss';
import api from './api';
import Item from 'antd/es/list/Item';
import styles from './index.module.scss';
import { GetLeaseGoodsDetailResp, ProductSpecList } from '../../api';
type Props = {
open?: boolean;
......@@ -15,17 +17,17 @@ type Props = {
setMallDetail: Dispatch<SetStateAction<any>>;
};
export default function IntentionModal(props: Props) {
const [checkedMap, setCheckedMap] = useState<{ string?: boolean }>({}); //通过索引记录选中的产品规格 例: {'1,1': true|false} props.detail?.goodsSpec[1].productSpecList[1]
const [checkItems, setCheckItems] = useState<ProductSpecList[]>([]); //选中的规格
const [loading, setLoading] = useState(false); //下单中
const [numValue, setNumValue] = useState<number | null>(1); //数量
const [checkedMap, setCheckedMap] = useState<{ string?: boolean }>({}); // 通过索引记录选中的产品规格 例: {'1,1': true|false} props.detail?.goodsSpec[1].productSpecList[1]
const [checkItems, setCheckItems] = useState<ProductSpecList[]>([]); // 选中的规格
const [loading, setLoading] = useState(false); // 下单中
const [numValue, setNumValue] = useState<number | null>(1); // 数量
useEffect(() => {
let list: ProductSpecList[] = [];
const list: ProductSpecList[] = [];
Object.keys(checkedMap).forEach((key) => {
if (checkedMap[key as keyof typeof checkedMap]) {
let arr = key.split(',');
let item = props.detail?.goodsSpec[Number(arr[0])].productSpecList[Number(arr[1])];
const arr = key.split(',');
const item = props.detail?.goodsSpec[Number(arr[0])].productSpecList[Number(arr[1])];
if (item) {
list.push(item);
}
......@@ -36,7 +38,7 @@ export default function IntentionModal(props: Props) {
}, [checkedMap]);
useEffect(() => {
let items = props.detail?.goodsSpec
const items = props.detail?.goodsSpec
.filter((item) => item.must === 1)
.map((item) => item.productSpecList)
.flat();
......@@ -52,35 +54,35 @@ export default function IntentionModal(props: Props) {
}
}, [props.detail]);
//添加规格到购物车
// 添加规格到购物车
function addProductSpec(goodsSpecIndex: number, productSpecIndex: number, status?: boolean) {
if (props.detail?.goodsSpec[goodsSpecIndex].must && !status)
return message.warning('该项为必选项,无法取消选中');
let temp = {};
//@ts-ignore
const temp = {};
// @ts-ignore
temp[`${goodsSpecIndex},${productSpecIndex}`] =
//@ts-ignore
// @ts-ignore
!checkedMap[`${goodsSpecIndex},${productSpecIndex}`];
setCheckedMap({
...checkedMap,
...temp,
});
}
//数量
// 数量
const onChangeNum = (value: number | null) => {
console.log('changed', value);
setNumValue(value);
};
//提交
// 提交
function onSubmit() {
let buyNum = 0;
let mallSpecIds: number[] = [];
const mallSpecIds: number[] = [];
Object.keys(checkedMap).forEach((key) => {
if (checkedMap[key as keyof typeof checkedMap]) {
buyNum++;
let arr = key.split(',');
let specId = props.detail?.goodsSpec[Number(arr[0])].productSpecList[Number(arr[1])].id;
const arr = key.split(',');
const specId = props.detail?.goodsSpec[Number(arr[0])].productSpecList[Number(arr[1])].id;
if (specId) {
mallSpecIds.push(specId);
}
......@@ -100,8 +102,8 @@ export default function IntentionModal(props: Props) {
if (res.code == '200') {
// message.success('提交意向成功')
//重置为未选中
let temp = {
// 重置为未选中
const temp = {
...checkedMap,
};
Object.keys(temp).forEach((key) => {
......@@ -196,7 +198,7 @@ export default function IntentionModal(props: Props) {
wrap={false}
style={{
borderRadius: 5,
//@ts-ignore
// @ts-ignore
border: checkedMap[`${goodsSpecIndex},${productSpecIndex}`]
? '1px solid #FF552D'
: '1px solid #d6d6d6',
......
......@@ -30,15 +30,15 @@ export interface GetOrderForGoods {
}
export default {
//web-地址管理-查询用户地址列表-条件查询
// web-地址管理-查询用户地址列表-条件查询
listUserAddress: (params: {}): Promise<Response<UserAddress[]>> => {
return request('/oms/user-address/selectList', 'POST', params);
},
//web-产品商城-下单
// web-产品商城-下单
FeignAddLease: (params: GetWebDeviceDetailParams): Promise<Response<GetOrderForGoods>> => {
return request('/oms/app-order/commitMallOrder', 'post', params);
},
//web-产品商城-订单支付
// web-产品商城-订单支付
OrderPayment: (params: { orderNo: string }): Promise<Response<GetOrderForGoods>> => {
return request(`/payment/repocash/orderPayment`, 'get', params);
},
......
import React, { useContext, useEffect, useState } from 'react';
import { OrderForGoodsBox } from './styled';
import type { FormInstance, RadioChangeEvent } from 'antd';
import React, { useEffect, useState } from 'react';
import type { RadioChangeEvent } from 'antd';
import { Button, Radio, Space, Input, message, Modal, Image } from 'antd';
import api, { UserAddress, GetOrderForGoods } from './api';
import moment from 'moment';
// import { ShopDetail } from '../../[id].page'
// import {
// GetWebDeviceDetailResult,
// GetWebDeviceWareSkuById,
// GetLeaseGoodsResult,
// } from '../../api'
import { UserContext } from '~/lib/userProvider';
import api, { UserAddress } from './api';
import { OrderForGoodsBox } from './styled';
const { TextArea } = Input;
interface PropsBox {
......@@ -77,10 +78,10 @@ export default function OrderForGoods(props: PropsBox) {
});
}, []);
//图片预览
// 图片预览
const [visible, setVisible] = useState(false);
//扫码管理地址
// 扫码管理地址
const [isAddAddressOpen, setIsAddAddressOpen] = useState(false);
const [addressVisible, setAddressVisible] = useState(false);
return (
......
import React, { useEffect, useState } from 'react';
import { Empty, Pagination, Image, Spin } from 'antd';
import Layout from '~/components/layout';
import styles from './index.module.scss';
import { useRouter } from 'next/router';
import errImg from '~/assets/errImg';
import Filter, { AdapterResult, FilterResult } from '~/components/filter';
import Layout from '~/components/layout';
import api, { Ad, Goods } from './api';
import errImg from '~/assets/errImg';
import styles from './index.module.scss';
// 此函数在构建时被调用
export async function getServerSideProps() {
......@@ -18,27 +21,27 @@ type Props = {};
export default function Mall(props: Props) {
const router = useRouter();
const [productList, setProductList] = useState<Array<Goods>>([]); //商品列表
const [filterResult, setFilterResult] = useState<AdapterResult>({}); //筛选结果
const [productList, setProductList] = useState<Array<Goods>>([]); // 商品列表
const [filterResult, setFilterResult] = useState<AdapterResult>({}); // 筛选结果
const [pageParams, setPageParams] = useState<{
pageNo: number;
pageSize: number;
}>({
pageNo: 1,
pageSize: 15,
}); //分页器对象
const [count, setCount] = useState(0); //商品总数
const [abort, setAbort] = useState<AbortController | null>(null); //请求中断对象
const [adList, setAdList] = useState<Array<Ad>>([]); //广告列表
}); // 分页器对象
const [count, setCount] = useState(0); // 商品总数
const [abort, setAbort] = useState<AbortController | null>(null); // 请求中断对象
const [adList, setAdList] = useState<Array<Ad>>([]); // 广告列表
const [loading, setLoading] = useState(false);
useEffect(() => {
//中断前一次列表请求
// 中断前一次列表请求
abort?.abort();
setAbort(new AbortController());
}, [filterResult, pageParams]);
//商品列表请求
// 商品列表请求
useEffect(() => {
if (!abort) {
return;
......@@ -62,7 +65,7 @@ export default function Mall(props: Props) {
});
}, [abort]);
//广告请求
// 广告请求
useEffect(() => {
api.listBannerImg().then((res) => {
setAdList(res.result || []);
......@@ -99,7 +102,7 @@ export default function Mall(props: Props) {
<li
key={i}
className={styles.item}
onClick={() => router.push('/mall/detail/' + item.id)}
onClick={() => router.push(`/mall/detail/${item.id}`)}
>
<div className={styles.imgBox}>
<Image
......
import LayoutView from '~/components/layout';
import React, { useState } from 'react';
import React from 'react';
import type { MenuProps } from 'antd';
import { Button, Menu } from 'antd';
import styles from './index.module.scss';
import { Menu } from 'antd';
import Router from 'next/router';
import styles from './index.module.scss';
function getItem(
label: React.ReactNode,
key: React.Key,
......
......@@ -100,7 +100,7 @@ export interface ListTranStatusResp {
}
export default {
//订单分页列表
// 订单分页列表
listPageWechatOrder(
params: ListPageWechatOrderParams,
options?: any,
......@@ -108,7 +108,7 @@ export default {
return request('/oms/RentalOrders/listPageWechatOrder', 'post', params, options);
},
//订单状态-字典
// 订单状态-字典
listTranStatus(): Promise<Response<ListTranStatusResp[]>> {
return request('/oms/RentalOrders/listTranStatus', 'get');
},
......
......@@ -16,8 +16,8 @@ export interface OrderDetailResp {
buyerPhone: string;
unitPrice: number;
wareNum: number;
shouldPay: number; //应付款金额
actualPay: number; //实收款金额
shouldPay: number; // 应付款金额
actualPay: number; // 实收款金额
orderType?: any;
deposit: number;
rentPrice: number;
......@@ -73,7 +73,7 @@ interface Receipt {
}
export default {
//订单详情
// 订单详情
orderDetail(params: { orderNo: string }): Promise<Response<OrderDetailResp>> {
return request('/oms/RentalOrders/orderDetail', 'get', params);
},
......
import { Button, Col, Divider, Modal, Row } from 'antd';
import { useContext, useEffect, useState } from 'react';
import { Button, Col, Modal, Row } from 'antd';
import { UserContext } from '~/lib/userProvider';
import api, { OrderDetailResp } from './api';
import styles from './index.module.scss';
......
......@@ -16,8 +16,8 @@ export interface OrderDetailResp {
buyerPhone: string;
unitPrice: number;
wareNum: number;
shouldPay: number; //应付款金额
actualPay: number; //实收款金额
shouldPay: number; // 应付款金额
actualPay: number; // 实收款金额
orderType?: any;
deposit: number;
rentPrice: number;
......@@ -87,15 +87,15 @@ export interface UserWalletResp {
}
export default {
//订单详情
// 订单详情
orderDetail(params: { orderNo: string }): Promise<Response<OrderDetailResp>> {
return request('/oms/RentalOrders/orderDetail', 'get', params);
},
//获取用户钱包
// 获取用户钱包
userWallet(): Promise<Response<UserWalletResp>> {
return request('/payment/repocash/userWallet');
},
//租赁——订单支付
// 租赁——订单支付
orderPayment(params: { orderNo: string }) {
return request('/payment/repocash/orderPayment', 'post', params);
},
......
import { Button, Col, Divider, message, Modal, Row } from 'antd';
import { useContext, useEffect, useState } from 'react';
import { Button, Col, message, Modal, Row } from 'antd';
import { UserContext } from '~/lib/userProvider';
import api, { OrderDetailResp, UserWalletResp } from './api';
import styles from './index.module.scss';
......@@ -18,8 +21,8 @@ type Props = {
export default function PayModal(props: Props) {
const [data, setData] = useState<OrderDetailResp | null>(null);
const { userInfo } = useContext(UserContext);
const [wallet, setWallet] = useState<UserWalletResp | null>(null); //钱包
const [loading, setLoading] = useState(false); //付款按钮loading
const [wallet, setWallet] = useState<UserWalletResp | null>(null); // 钱包
const [loading, setLoading] = useState(false); // 付款按钮loading
useEffect(() => {
if (props.open) {
......
......@@ -16,8 +16,8 @@ export interface OrderDetailResp {
buyerPhone: string;
unitPrice: number;
wareNum: number;
shouldPay: number; //应付款金额
actualPay: number; //实收款金额
shouldPay: number; // 应付款金额
actualPay: number; // 实收款金额
orderType?: any;
deposit: number;
rentPrice: number;
......@@ -87,15 +87,15 @@ export interface UserWalletResp {
}
export default {
//订单详情
// 订单详情
orderDetail(params: { orderNo: string }): Promise<Response<OrderDetailResp>> {
return request('/oms/RentalOrders/orderDetail', 'get', params);
},
//获取用户钱包
// 获取用户钱包
userWallet(): Promise<Response<UserWalletResp>> {
return request('/payment/repocash/userWallet');
},
//租赁——订单支付
// 租赁——订单支付
orderPayment(params: { orderNo: string }) {
return request('/payment/repocash/orderPayment', 'post', params);
},
......
import { Button, Col, Divider, message, Modal, Row } from 'antd';
import { useContext, useEffect, useState } from 'react';
import { Button, Col, message, Modal, Row } from 'antd';
import { UserContext } from '~/lib/userProvider';
import api, { OrderDetailResp, UserWalletResp } from './api';
import styles from './index.module.scss';
......@@ -18,8 +21,8 @@ type Props = {
export default function RefundModal(props: Props) {
const [data, setData] = useState<OrderDetailResp | null>(null);
const { userInfo } = useContext(UserContext);
const [wallet, setWallet] = useState<UserWalletResp | null>(null); //钱包
const [loading, setLoading] = useState(false); //付款按钮loading
const [wallet, setWallet] = useState<UserWalletResp | null>(null); // 钱包
const [loading, setLoading] = useState(false); // 付款按钮loading
useEffect(() => {
if (props.open) {
......
import { useEffect, useState } from 'react';
import { TabsProps, Tabs, Row, Col, Image, Space, Button, Pagination, Empty, Spin } from 'antd';
import moment from 'moment';
import Moment from 'moment';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import errImg from '~/assets/errImg';
import LayoutView from '~/components/layout';
import Sider from '../components/sider';
import styles from './index.module.scss';
import api, { LeasingList, ListTranStatusResp } from './api';
import moment from 'moment';
import PayModal from './components/payModal';
import RefundModal from './components/refundModal';
import Moment from 'moment';
import styles from './index.module.scss';
import Sider from '../components/sider';
const items: TabsProps['items'] = [
{
......@@ -51,18 +54,18 @@ export default function LeasingOrders() {
const [pageParams, setPageParams] = useState({
pageNo: 1,
pageSize: 5,
}); //分页器对象
const [total, setTotal] = useState(0); //总数
const [abort, setAbort] = useState<AbortController | null>(null); //请求中断对你
}); // 分页器对象
const [total, setTotal] = useState(0); // 总数
const [abort, setAbort] = useState<AbortController | null>(null); // 请求中断对你
const [tabKey, setTabKey] = useState('');
const [orderList, setOrderList] = useState<LeasingList[]>([]);
const [loading, setLoading] = useState(false);
const [tranStatusMap, setTranStatusMap] = useState<ListTranStatusResp[]>([]); //订单状态字典
const [openPayModal, setOpenPayModal] = useState(false); //支付弹窗
const [openRefundModal, setOpenRefundModal] = useState(false); //退款弹窗
const [tranStatusMap, setTranStatusMap] = useState<ListTranStatusResp[]>([]); // 订单状态字典
const [openPayModal, setOpenPayModal] = useState(false); // 支付弹窗
const [openRefundModal, setOpenRefundModal] = useState(false); // 退款弹窗
const [orderNo, setOrderNo] = useState<string | undefined>();
//获取订单状态字典
// 获取订单状态字典
useEffect(() => {
api.listTranStatus().then((res) => {
setTranStatusMap(res.result || []);
......@@ -70,12 +73,12 @@ export default function LeasingOrders() {
}, []);
useEffect(() => {
//中断前一次列表请求
// 中断前一次列表请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams]);
//商品列表请求
// 商品列表请求
useEffect(() => {
if (!abort) {
return;
......
......@@ -84,12 +84,12 @@ export interface ListStatusResp {
}
export default {
//v1.0.0订单列表-查询
// v1.0.0订单列表-查询
listPage(params: ListPageParams, options: any): Promise<Response<ListPageResp>> {
return request('/oms/app-order/listPage', 'get', params, options);
},
//订单状态-字典
// 订单状态-字典
listStatus(): Promise<Response<ListStatusResp[]>> {
return request('/oms/mallorder/listStatus', 'get');
},
......
import { useEffect, useState } from 'react';
import { TabsProps, Tabs, Row, Col, Image, Space, Button, Spin, Pagination, Empty } from 'antd';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import errImg from '~/assets/errImg';
import Right from '~/components/contentBox/right';
import LayoutView from '~/components/layout';
import Sider from '../components/sider';
import api, { OrderList, ListStatusResp } from './api';
import styles from './index.module.scss';
import Sider from '../components/sider';
const items: TabsProps['items'] = [
{
......@@ -36,16 +38,16 @@ export default function LeasingOrder() {
const [pageParams, setPageParams] = useState({
pageNo: 1,
pageSize: 5,
}); //分页器对象
const [total, setTotal] = useState(0); //总数
const [abort, setAbort] = useState<AbortController | null>(null); //请求中断对你
}); // 分页器对象
const [total, setTotal] = useState(0); // 总数
const [abort, setAbort] = useState<AbortController | null>(null); // 请求中断对你
const [tabKey, setTabKey] = useState('');
const [orderList, setOrderList] = useState<OrderList[]>([]);
const [loading, setLoading] = useState(false);
const [orderNo, setOrderNo] = useState<string | undefined>();
const [tranStatusMap, setTranStatusMap] = useState<ListStatusResp[]>([]); //订单状态字典
const [tranStatusMap, setTranStatusMap] = useState<ListStatusResp[]>([]); // 订单状态字典
//获取订单状态字典
// 获取订单状态字典
useEffect(() => {
api.listStatus().then((res) => {
setTranStatusMap(res.result || []);
......@@ -53,12 +55,12 @@ export default function LeasingOrder() {
}, []);
useEffect(() => {
//中断前一次列表请求
// 中断前一次列表请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams]);
//商品列表请求
// 商品列表请求
useEffect(() => {
if (!abort) {
return;
......
......@@ -42,7 +42,7 @@ export interface GetServiceOrderStatusResp {
}
export default {
//查询服务订单列表
// 查询服务订单列表
queryOrderTaskList(
params: QueryOrderTaskListParams,
options: any,
......@@ -50,7 +50,7 @@ export default {
return request('/oms/app/serviceOrderTask/queryOrderTaskList', 'post', params, options);
},
//订单状态-字典
// 订单状态-字典
getServiceOrderStatus(): Promise<Response<GetServiceOrderStatusResp[]>> {
return request('/oms/serviceOrderTask/getServiceOrderStatus', 'POST');
},
......
import { useEffect, useState } from 'react';
import { TabsProps, Tabs, Row, Col, Image, Space, Button, Spin, Pagination, Empty } from 'antd';
import Moment from 'moment';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import errImg from '~/assets/errImg';
import Right from '~/components/contentBox/right';
import LayoutView from '~/components/layout';
import Sider from '../components/sider';
import api, { OrderList, GetServiceOrderStatusResp } from './api';
import styles from './index.module.scss';
import Moment from 'moment';
import Sider from '../components/sider';
const items: TabsProps['items'] = [
{
......@@ -37,16 +39,16 @@ export default function ServicesOrder() {
const [pageParams, setPageParams] = useState({
pageNo: 1,
pageSize: 5,
}); //分页器对象
const [total, setTotal] = useState(0); //总数
const [abort, setAbort] = useState<AbortController | null>(null); //请求中断对你
}); // 分页器对象
const [total, setTotal] = useState(0); // 总数
const [abort, setAbort] = useState<AbortController | null>(null); // 请求中断对你
const [tabKey, setTabKey] = useState('');
const [orderList, setOrderList] = useState<OrderList[]>([]);
const [loading, setLoading] = useState(false);
const [orderNo, setOrderNo] = useState<string | undefined>();
const [tranStatusMap, setTranStatusMap] = useState<GetServiceOrderStatusResp[]>([]); //订单状态字典
const [tranStatusMap, setTranStatusMap] = useState<GetServiceOrderStatusResp[]>([]); // 订单状态字典
//获取订单状态字典
// 获取订单状态字典
useEffect(() => {
api.getServiceOrderStatus().then((res) => {
setTranStatusMap(res.result || []);
......@@ -54,12 +56,12 @@ export default function ServicesOrder() {
}, []);
useEffect(() => {
//中断前一次列表请求
// 中断前一次列表请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams]);
//商品列表请求
// 商品列表请求
useEffect(() => {
if (!abort) {
return;
......
......@@ -84,12 +84,12 @@ export interface ListStatusResp {
}
export default {
//v1.0.0订单列表-查询
// v1.0.0订单列表-查询
listPage(params: ListPageParams, options: any): Promise<Response<ListPageResp>> {
return request('/oms/app-order/listPage', 'get', params, options);
},
//订单状态-字典
// 订单状态-字典
listStatus(): Promise<Response<ListStatusResp[]>> {
return request('/oms/mallorder/listStatus', 'get');
},
......
import { useEffect, useState } from 'react';
import { TabsProps, Tabs, Row, Col, Image, Space, Button, Spin, Pagination, Empty } from 'antd';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import errImg from '~/assets/errImg';
import Right from '~/components/contentBox/right';
import LayoutView from '~/components/layout';
import Sider from '../components/sider';
import api, { OrderList, ListStatusResp } from './api';
import styles from './index.module.scss';
import Sider from '../components/sider';
const items: TabsProps['items'] = [
{
......@@ -36,16 +38,16 @@ export default function TrainOrder() {
const [pageParams, setPageParams] = useState({
pageNo: 1,
pageSize: 5,
}); //分页器对象
const [total, setTotal] = useState(0); //总数
const [abort, setAbort] = useState<AbortController | null>(null); //请求中断对你
}); // 分页器对象
const [total, setTotal] = useState(0); // 总数
const [abort, setAbort] = useState<AbortController | null>(null); // 请求中断对你
const [tabKey, setTabKey] = useState('');
const [orderList, setOrderList] = useState<OrderList[]>([]);
const [loading, setLoading] = useState(false);
const [orderNo, setOrderNo] = useState<string | undefined>();
const [tranStatusMap, setTranStatusMap] = useState<ListStatusResp[]>([]); //订单状态字典
const [tranStatusMap, setTranStatusMap] = useState<ListStatusResp[]>([]); // 订单状态字典
//获取订单状态字典
// 获取订单状态字典
useEffect(() => {
api.listStatus().then((res) => {
setTranStatusMap(res.result || []);
......@@ -53,12 +55,12 @@ export default function TrainOrder() {
}, []);
useEffect(() => {
//中断前一次列表请求
// 中断前一次列表请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams]);
//商品列表请求
// 商品列表请求
useEffect(() => {
if (!abort) {
return;
......
import { useEffect, useState } from 'react';
import { RightOutlined } from '@ant-design/icons';
import { Col, Row } from 'antd';
import Moment from 'moment';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import Layout from '~/components/layout';
import newsApi, { Item } from '../components/news/api';
import api, { DetailsResp } from './api';
import styles from './index.module.scss';
import Moment from 'moment';
import newsApi, { Item } from '../components/news/api';
export default function CaseArticle() {
const router = useRouter();
const [data, setData] = useState<DetailsResp | null>(null);
const [newsList, setNewList] = useState<Item[]>([]);
//获取案例详情
// 获取案例详情
useEffect(() => {
const id = Number(router.query.id);
if (id) {
......@@ -27,7 +30,7 @@ export default function CaseArticle() {
}
}, [router]);
//获取新闻列表
// 获取新闻列表
useEffect(() => {
newsApi
.listNewsPage({
......@@ -98,7 +101,7 @@ export default function CaseArticle() {
align='middle'
style={{ cursor: 'pointer' }}
onClick={() => {
router.push('/projectInfo/newsArticle/' + item.id);
router.push(`/projectInfo/newsArticle/${item.id}`);
}}
>
<Col
......
......@@ -16,7 +16,7 @@ export interface DetailsResp {
}
export default {
//案例详情
// 案例详情
details(params: DetailsParams): Promise<Response<DetailsResp>> {
return request('/release/industry-case/details', 'get', params);
},
......
......@@ -29,8 +29,8 @@ export interface Item {
}
export interface ApplyParams {
tenderInfoId?: number; //招标详情id
tenderNewsId?: number; //招标id
tenderInfoId?: number; // 招标详情id
tenderNewsId?: number; // 招标id
}
export default {
......@@ -45,7 +45,7 @@ export default {
): Promise<Response<ListNewTenderInfoResp>> {
return request('/release/tender/listNewTenderInfo', 'post', params, options);
},
//合作申请提交
// 合作申请提交
apply(params: ApplyParams) {
return request('/release/tender/apply', 'post', params);
},
......
import { Button, Empty, Pagination, Spin } from 'antd';
import { useState, useEffect, useContext } from 'react';
import { Button, Empty, Pagination, Spin } from 'antd';
import { useRouter } from 'next/router';
import { UserContext } from '~/lib/userProvider';
import { bigNumberTransform } from '~/utils/money';
import api, { Item } from './api';
import styles from './index.module.scss';
import { bigNumberTransform } from '~/utils/money';
import { useRouter } from 'next/router';
type Props = {
params?: {
cityCode: number; //市编码
date: string; //时间 2023-05-19
districtCode: number; //区编码
provinceCode: number; //省编码
cityCode: number; // 市编码
date: string; // 时间 2023-05-19
districtCode: number; // 区编码
provinceCode: number; // 省编码
};
showWxCodeModalEvent: () => void;
};
......@@ -30,7 +33,7 @@ export default function Bids(props: Props) {
const [reload, setReload] = useState(false);
useEffect(() => {
//中断前一次请求
// 中断前一次请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams, props.params, reload]);
......@@ -64,7 +67,7 @@ export default function Bids(props: Props) {
});
};
//申请合作
// 申请合作
const onApply = (item: Item) => {
if (userInfo) {
api
......@@ -82,9 +85,9 @@ export default function Bids(props: Props) {
setNeedLogin(true);
}
};
//招标项目详情
// 招标项目详情
const toTenderProjectsDetail = (item: Item) => {
router.push('/projectInfo/tenderProjectsDetail/' + item.id);
router.push(`/projectInfo/tenderProjectsDetail/${item.id}`);
};
return (
......
import { useState, useEffect } from 'react';
import { Button, Empty, Pagination, Spin } from 'antd';
import { useRouter } from 'next/router';
import { useState, useEffect } from 'react';
import api, { Item } from './api';
import styles from './index.module.scss';
import WxCodeModal from '~/components/wxCodeModal';
type Props = {
params?: {
cityCode: number; //市编码
date: string; //时间 2023-05-19
districtCode: number; //区编码
provinceCode: number; //省编码
cityCode: number; // 市编码
date: string; // 时间 2023-05-19
districtCode: number; // 区编码
provinceCode: number; // 省编码
};
showWxCodeModalEvent: () => void;
};
......@@ -27,7 +28,7 @@ export default function Cases(props: Props) {
const Router = useRouter();
useEffect(() => {
//中断前一次请求
// 中断前一次请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams, props.params]);
......@@ -71,7 +72,7 @@ export default function Cases(props: Props) {
<div className={styles.info}>
<div
className={styles.title}
onClick={() => Router.push('/projectInfo/caseArticle/' + item.id)}
onClick={() => Router.push(`/projectInfo/caseArticle/${item.id}`)}
>
{item.caseTitle}
</div>
......
import { useState, useEffect, useContext } from 'react';
import { Button, Col, Empty, Pagination, Row, Spin } from 'antd';
import styles from './index.module.scss';
import Image from 'next/image';
import { useState, useEffect, useContext } from 'react';
import api, { Item } from './api';
import Router, { useRouter } from 'next/router';
import { UserContext } from '~/lib/userProvider';
import api, { Item } from './api';
import styles from './index.module.scss';
type Props = {
params?: {
cityCode: number; //市编码
date: string; //时间 2023-05-19
districtCode: number; //区编码
provinceCode: number; //省编码
cityCode: number; // 市编码
date: string; // 时间 2023-05-19
districtCode: number; // 区编码
provinceCode: number; // 省编码
};
showWxCodeModalEvent: () => void;
};
......@@ -29,7 +32,7 @@ export default function News(props: Props) {
const { userInfo, setNeedLogin } = useContext(UserContext);
useEffect(() => {
//中断前一次请求
// 中断前一次请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams, props.params]);
......@@ -63,7 +66,7 @@ export default function News(props: Props) {
});
};
//获取产品信息事件
// 获取产品信息事件
const onGetInfo = () => {
if (userInfo) {
if (userInfo.companyAuthStatus) {
......@@ -74,9 +77,9 @@ export default function News(props: Props) {
setNeedLogin(true);
}
};
//新闻点击
// 新闻点击
const newsClick = (item: Item) => {
router.push('/projectInfo/newsArticle/' + item.id);
router.push(`/projectInfo/newsArticle/${item.id}`);
};
return (
<Spin spinning={loading} delay={500}>
......
......@@ -31,7 +31,7 @@ export interface Item {
}
export interface SolveRequireParams {
requirementsInfoId: number; //需求id
requirementsInfoId: number; // 需求id
}
export default {
......
import { Button, Empty, Pagination, Popconfirm, Spin, Tooltip } from 'antd';
import router from 'next/router';
import React, { useState, useEffect, useContext } from 'react';
import { Button, Empty, Pagination, Popconfirm, Spin, Tooltip } from 'antd';
import { CommonContext } from '~/lib/commonProvider';
import { UserContext } from '~/lib/userProvider';
import api, { Item } from './api';
import styles from './index.module.scss';
type Props = {
params?: {
cityCode: number; //市编码
date: string; //时间 2023-05-19
districtCode: number; //区编码
provinceCode: number; //省编码
cityCode: number; // 市编码
date: string; // 时间 2023-05-19
districtCode: number; // 区编码
provinceCode: number; // 省编码
};
};
......@@ -29,7 +31,7 @@ export default function Requirements(props: Props) {
const { reloadRequirements } = useContext(CommonContext);
useEffect(() => {
//中断前一次请求
// 中断前一次请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams, props.params, reload, reloadRequirements]);
......
import React, { useEffect, useState } from 'react';
import { Tabs, Button, Cascader, Space, DatePicker, DatePickerProps } from 'antd';
import styles from './index.module.scss';
import Layout from '~/components/layout';
import Requirements from './components/requirements'; //项目需求
import Bids from './components/bids'; //招投标项目
import Cases from './components/cases'; //业务案例
import News from './components/news'; //行业新闻
import { Tabs, Cascader, Space, DatePicker, DatePickerProps } from 'antd';
import commonApi, { RegionResp } from '~/api';
import Layout from '~/components/layout';
import WxCodeModal from '~/components/wxCodeModal';
import Bids from './components/bids'; // 招投标项目
import Cases from './components/cases'; // 业务案例
import News from './components/news'; // 行业新闻
import Requirements from './components/requirements'; // 项目需求
import styles from './index.module.scss';
export interface Params {
cityCode?: number; //市编码
date?: string; //时间 2023-05-19
districtCode?: number; //区编码
provinceCode?: number; //省编码
cityCode?: number; // 市编码
date?: string; // 时间 2023-05-19
districtCode?: number; // 区编码
provinceCode?: number; // 省编码
}
export default function ProjectInfo() {
......@@ -41,7 +44,7 @@ export default function ProjectInfo() {
return {
label: `${value}`,
key: value,
children: children,
children,
};
});
......@@ -52,11 +55,11 @@ export default function ProjectInfo() {
useEffect(() => {
window!.document!.querySelector('body')!.style.background = '#fff';
commonApi.region().then((res) => {
let temp = res.result || [];
const temp = res.result || [];
let temp1: Array<RegionResp> = [];
if (res.result) {
temp1 = temp.map((item) => {
let t = {
const t = {
...item,
id: item.id,
};
......@@ -69,7 +72,7 @@ export default function ProjectInfo() {
const onRegionChange = (value: Array<string>, list: Array<RegionResp>) => {
console.log(value);
let params1: Params = {
const params1: Params = {
provinceCode: undefined,
districtCode: undefined,
};
......@@ -114,7 +117,7 @@ export default function ProjectInfo() {
{
<Cascader
options={region}
//@ts-ignore
// @ts-ignore
onChange={onRegionChange}
placeholder='选择省市'
borderRadiusSM={6}
......
import { useEffect, useState } from 'react';
import { RightOutlined } from '@ant-design/icons';
import { Col, Row } from 'antd';
import Moment from 'moment';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import Layout from '~/components/layout';
import newsApi, { Item } from '../components/news/api';
import api, { DetailsResp } from './api';
import styles from './index.module.scss';
import Moment from 'moment';
import newsApi, { Item } from '../components/news/api';
export default function CaseArticle() {
const router = useRouter();
const [data, setData] = useState<DetailsResp | null>(null);
const [newsList, setNewList] = useState<Item[]>([]);
//获取案例详情
// 获取案例详情
useEffect(() => {
const id = Number(router.query.id);
if (id) {
......@@ -27,7 +30,7 @@ export default function CaseArticle() {
}
}, [router]);
//获取新闻列表
// 获取新闻列表
useEffect(() => {
newsApi
.listNewsPage({
......@@ -98,7 +101,7 @@ export default function CaseArticle() {
align='middle'
style={{ cursor: 'pointer' }}
onClick={() => {
router.push('/projectInfo/newsArticle/' + item.id);
router.push(`/projectInfo/newsArticle/${item.id}`);
}}
>
<Col
......
......@@ -15,7 +15,7 @@ export interface DetailsResp {
}
export default {
//案例详情
// 案例详情
details(params: DetailsParams): Promise<Response<DetailsResp>> {
return request('/release/industry-news/details', 'get', params);
},
......
import { useEffect, useState } from 'react';
import { RightOutlined } from '@ant-design/icons';
import { Col, Row } from 'antd';
import Moment from 'moment';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import Layout from '~/components/layout';
import newsApi, { Item } from '../components/news/api';
import api, { DetailsResp } from './api';
import styles from './index.module.scss';
import Moment from 'moment';
import newsApi, { Item } from '../components/news/api';
export default function TenderProjectsDetail() {
const router = useRouter();
const [data, setData] = useState<DetailsResp>();
const [newsList, setNewList] = useState<Item[]>([]);
//获取案例详情
// 获取案例详情
useEffect(() => {
const id = Number(router.query.id);
if (id) {
......@@ -27,7 +30,7 @@ export default function TenderProjectsDetail() {
}
}, [router]);
//获取新闻列表
// 获取新闻列表
useEffect(() => {
newsApi
.listNewsPage({
......@@ -97,7 +100,7 @@ export default function TenderProjectsDetail() {
align='middle'
style={{ cursor: 'pointer' }}
onClick={() => {
router.push('/projectInfo/newsArticle/' + item.id);
router.push(`/projectInfo/newsArticle/${item.id}`);
}}
>
<Col
......
import request, { Response } from '~/api/request';
import { Item } from '~/pages/projectInfo/components/news/api';
export interface DetailsParams {
id: number;
......@@ -13,7 +12,7 @@ export interface DetailsResp {
}
export default {
//招标详情
// 招标详情
details(params: DetailsParams): Promise<Response<DetailsResp>> {
return request('/release/tender/infoById', 'get', params);
},
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论