提交 4c27b645 作者: ZhangLingKun

功能:eslint --fix prettier:fix

上级 f2e8dae7
#请求接口地址 #请求接口地址
#VITE_REQUEST_BASE_URL='https://www.iuav.shop' #VITE_REQUEST_BASE_URL='https://www.iuav.shop'
#VITE_REQUEST_BASE_URL='https://test.iuav.shop'
VITE_REQUEST_BASE_URL='/api' VITE_REQUEST_BASE_URL='/api'
#旧版接口地址 #旧版接口地址
#VITE_REQUEST_BASE_URL='https://iuav.mmcuav.cn' #VITE_REQUEST_BASE_URL='https://iuav.mmcuav.cn'
......
...@@ -15,5 +15,5 @@ export { ...@@ -15,5 +15,5 @@ export {
CommonAPI, CommonAPI,
CouponManageAPI, CouponManageAPI,
MakeManageAPI, MakeManageAPI,
CategoryManageAPI CategoryManageAPI,
}; };
import axios from "../request"; import axios from '../request';
import { PaginationEntity } from '~/common/interface/PaginationEntity'; import { PaginationEntity } from '~/common/interface/PaginationEntity';
export class CategoryManageAPI { export class CategoryManageAPI {
// 分类管理 // 分类管理
// 分类目录 // 分类目录
static directoryList = () => { static directoryList = () => {
return axios.get("uavgoods/directory/directoryList"); return axios.get('uavgoods/directory/directoryList');
}; };
// 新增或编辑目录 // 新增或编辑目录
static addOrEditDirectory = ( static addOrEditDirectory = (data: { id?: number; directoryName: string }[]) => {
data: { id?: number; directoryName: string }[] return axios.post('uavgoods/directory/addOrEditDirectory', data);
) => {
return axios.post("uavgoods/directory/addOrEditDirectory", data);
}; };
// 删除目录 // 删除目录
static removeDirectory = (id: number) => { static removeDirectory = (id: number) => {
return axios.get("uavgoods/directory/removeDirectory", { params: { id } }); return axios.get('uavgoods/directory/removeDirectory', { params: { id } });
}; };
// 分类新增 // 分类新增
static addClassification = (data: object): any => { static addClassification = (data: object): any => {
return axios.post("uavgoods/mgoods/addClassification", data); return axios.post('uavgoods/mgoods/addClassification', data);
}; };
// 分类列表 // 分类列表
...@@ -32,71 +30,69 @@ export class CategoryManageAPI { ...@@ -32,71 +30,69 @@ export class CategoryManageAPI {
// PC端-根据分类信息新增自定义规格-下拉选项 (只查产品类型) // PC端-根据分类信息新增自定义规格-下拉选项 (只查产品类型)
static getProductTypeInfoList = (): any => { static getProductTypeInfoList = (): any => {
return axios.get("uavgoods/mgoods/getGoodsTypeInfoList"); return axios.get('uavgoods/mgoods/getGoodsTypeInfoList');
}; };
// 所有分类信息 // 所有分类信息
static getGoodsTypeListByOneLevel = (): any => { static getGoodsTypeListByOneLevel = (): any => {
return axios.get("uavgoods/mgoods/listGoodsTypeListByOneLevel"); return axios.get('uavgoods/mgoods/listGoodsTypeListByOneLevel');
}; };
// 分类修改 // 分类修改
static updateClassification = (data: object): any => { static updateClassification = (data: object): any => {
return axios.post("uavgoods/mgoods/updateClassification", data); return axios.post('uavgoods/mgoods/updateClassification', data);
}; };
// 删除分类 // 删除分类
static deleteGoodsTypeByOneLevel = (params: object): any => { static deleteGoodsTypeByOneLevel = (params: object): any => {
return axios.get("uavgoods/mgoods/deleteGoodsTypeByOneLevel", { params }); return axios.get('uavgoods/mgoods/deleteGoodsTypeByOneLevel', { params });
}; };
// 删除子分类 // 删除子分类
static deleteGoodsTypeByChildren = (params: object): any => { static deleteGoodsTypeByChildren = (params: object): any => {
return axios.get("uavgoods/mgoods/deleteGoodsTypeByChildren", { params }); return axios.get('uavgoods/mgoods/deleteGoodsTypeByChildren', { params });
}; };
// 查询二级分类 // 查询二级分类
static listGoodsTypeListByTwoLevel = (params: object): any => { static listGoodsTypeListByTwoLevel = (params: object): any => {
return axios.get("uavgoods/mgoods/listGoodsTypeListByTwoLevel", { params }); return axios.get('uavgoods/mgoods/listGoodsTypeListByTwoLevel', { params });
}; };
// 查询其它服务 // 查询其它服务
static listOtherService = (): any => { static listOtherService = (): any => {
return axios.get("uavgoods/mgoods/listOtherService"); return axios.get('uavgoods/mgoods/listOtherService');
}; };
// 分类上下移动 // 分类上下移动
static exchangeSortType = (params: object): any => { static exchangeSortType = (params: object): any => {
return axios.get("uavgoods/mgoods/exchangeSortType", { params }); return axios.get('uavgoods/mgoods/exchangeSortType', { params });
}; };
// 分类详情 // 分类详情
static getGoodsTypeDetail = ( static getGoodsTypeDetail = (
obj: { id: number } & Pick<PaginationEntity, "pageNo" | "pageSize"> obj: { id: number } & Pick<PaginationEntity, 'pageNo' | 'pageSize'>,
) => { ) => {
return axios.get("uavgoods/mgoods/getGoodsTypeDetail", { params: obj }); return axios.get('uavgoods/mgoods/getGoodsTypeDetail', { params: obj });
}; };
// 分类详情-安全编码开发修改 // 分类详情-安全编码开发修改
static updateIsShowCode = ( static updateIsShowCode = (params: Pick<GoodsInfo, 'goodsId' | 'showCode'>) => {
params: Pick<GoodsInfo, "goodsId" | "showCode"> return axios.get('uavgoods/appgoods/updateIsShowCode', { params });
) => {
return axios.get("uavgoods/appgoods/updateIsShowCode", { params });
}; };
// 分类详情-商品排序 // 分类详情-商品排序
static exchangeGoodsInfo = (firstId: number, secondId: number) => { static exchangeGoodsInfo = (firstId: number, secondId: number) => {
return axios.get("uavgoods/mgoods/exchangeGoodsInfo", { return axios.get('uavgoods/mgoods/exchangeGoodsInfo', {
params: { firstId, secondId }, params: { firstId, secondId },
}); });
}; };
// 分类详情-图片上传 // 分类详情-图片上传
static cateGoryDetailUpload = (data: FormData) => { static cateGoryDetailUpload = (data: FormData) => {
return axios.post("ossservlet/upload/imgOss", data); return axios.post('ossservlet/upload/imgOss', data);
}; };
// 行业分享码 // 行业分享码
static getAppletQRCode(params: { page: string; scene: string }) { static getAppletQRCode(params: { page: string; scene: string }) {
return axios.get("malluser/wechat/getAppletQRCode", { params }); return axios.get('malluser/wechat/getAppletQRCode', { params });
} }
} }
import Viewer from "react-viewer"; import Viewer from 'react-viewer';
import React from "react"; import React from 'react';
interface propsType { interface propsType {
visible: boolean; visible: boolean;
...@@ -8,12 +8,7 @@ interface propsType { ...@@ -8,12 +8,7 @@ interface propsType {
setVisible: Function; setVisible: Function;
} }
const Index: React.FC<propsType> = ({ const Index: React.FC<propsType> = ({ visible, currentImgList, activeViewerIndex, setVisible }) => {
visible,
currentImgList,
activeViewerIndex,
setVisible,
}) => {
return ( return (
<Viewer <Viewer
visible={visible} visible={visible}
......
import { EventEmitter } from "events"; import { EventEmitter } from 'events';
class QcEventEmitter extends EventEmitter {} class QcEventEmitter extends EventEmitter {}
......
import { Form, Input, InputNumber } from "antd"; import { Form, Input, InputNumber } from 'antd';
interface Item { interface Item {
key: string; key: string;
...@@ -10,7 +10,7 @@ interface EditableCellProps extends React.HTMLAttributes<HTMLElement> { ...@@ -10,7 +10,7 @@ interface EditableCellProps extends React.HTMLAttributes<HTMLElement> {
editing: boolean; editing: boolean;
dataIndex: string; dataIndex: string;
title: any; title: any;
inputType: "textarea" | "text"; inputType: 'textarea' | 'text';
record: Item; record: Item;
index: number; index: number;
children: React.ReactNode; children: React.ReactNode;
...@@ -26,13 +26,8 @@ const EditableCell: React.FC<EditableCellProps> = ({ ...@@ -26,13 +26,8 @@ const EditableCell: React.FC<EditableCellProps> = ({
...restProps ...restProps
}) => { }) => {
const inputNode = const inputNode =
dataIndex === "desc" ? ( dataIndex === 'desc' ? (
<Input.TextArea <Input.TextArea maxLength={70} showCount rows={5} placeholder={`请输入${title}`} />
maxLength={70}
showCount
rows={5}
placeholder={`请输入${title}`}
/>
) : ( ) : (
<Input placeholder={`请输入${title}`} maxLength={15} /> <Input placeholder={`请输入${title}`} maxLength={15} />
); );
...@@ -44,7 +39,7 @@ const EditableCell: React.FC<EditableCellProps> = ({ ...@@ -44,7 +39,7 @@ const EditableCell: React.FC<EditableCellProps> = ({
style={{ margin: 0 }} style={{ margin: 0 }}
rules={[ rules={[
{ {
required: dataIndex !== "desc", required: dataIndex !== 'desc',
message: `请输入${title}`, message: `请输入${title}`,
}, },
]} ]}
......
.img-wrap{ .img-wrap {
.img-content{ .img-content {
width: 50%; width: 50%;
height: 50%; height: 50%;
position: relative; position: relative;
.img{ .img {
width: 100%; width: 100%;
width: 100%; width: 100%;
}
.delete-img{
position: absolute;
top: 0;
right: 0;
transform: translate(25%,-25%);
width: 20px;
height: 20px;
}
} }
.delete-img {
} position: absolute;
\ No newline at end of file top: 0;
right: 0;
transform: translate(25%, -25%);
width: 20px;
height: 20px;
}
}
}
import React, { useEffect, useImperativeHandle, useState } from "react"; import React, { useEffect, useImperativeHandle, useState } from 'react';
import { Modal, Form, Input, Row, Col, Upload, message, Button } from "antd"; import { Modal, Form, Input, Row, Col, Upload, message, Button } from 'antd';
import { import { LoadingOutlined, PlusOutlined, UploadOutlined } from '@ant-design/icons';
LoadingOutlined, import Cookies from 'js-cookie';
PlusOutlined, import { uploadImgURL } from '~/api/request';
UploadOutlined, import events from '~/events';
} from "@ant-design/icons"; import deletePng from '~/assets/image/delete.png';
import Cookies from "js-cookie"; import './index.scss';
import { uploadImgURL } from "~/api/request";
import events from "~/events";
import deletePng from "~/assets/image/delete.png";
import "./index.scss";
function Index(props: any) { function Index(props: any) {
const headers: any = { const headers: any = {
token: Cookies.get("SXTB-TOKEN"), token: Cookies.get('SXTB-TOKEN'),
}; };
const [form] = Form.useForm(); const [form] = Form.useForm();
const [imageUrl, setImageUrl] = useState(""); const [imageUrl, setImageUrl] = useState('');
const [fileList, setFileList]: any = useState([]); const [fileList, setFileList]: any = useState([]);
useEffect(() => { useEffect(() => {
events.addListener("removeFileList", () => { events.addListener('removeFileList', () => {
// console.log("执行了"); // console.log("执行了");
setFileList([]); setFileList([]);
setImageUrl(""); setImageUrl('');
}); });
events.addListener("setImgFile", (str) => { events.addListener('setImgFile', (str) => {
setImageUrl(str); setImageUrl(str);
form.setFieldsValue({ icon: str }); form.setFieldsValue({ icon: str });
}); });
...@@ -38,34 +34,34 @@ function Index(props: any) { ...@@ -38,34 +34,34 @@ function Index(props: any) {
function onFinishFailed() {} function onFinishFailed() {}
function getBase64(img: any, callback: Function) { function getBase64(img: any, callback: Function) {
const reader = new FileReader(); const reader = new FileReader();
reader.addEventListener("load", () => callback(reader.result)); reader.addEventListener('load', () => callback(reader.result));
reader.readAsDataURL(img); reader.readAsDataURL(img);
} }
function handleChange(val: any) { function handleChange(val: any) {
// console.log("上传图片-->", val); // console.log("上传图片-->", val);
if (!["image/jpg", "image/jpeg", "image/png"].includes(val.file.type)) { if (!['image/jpg', 'image/jpeg', 'image/png'].includes(val.file.type)) {
message.error("请上传图片格式为jpg,jpeg,png的图片"); message.error('请上传图片格式为jpg,jpeg,png的图片');
form.setFieldsValue({ icon: "" }); form.setFieldsValue({ icon: '' });
setFileList([]); setFileList([]);
return; return;
} }
const limitM = 2; const limitM = 2;
const isLimit = val.file.size / 1024 / 1024 <= limitM; const isLimit = val.file.size / 1024 / 1024 <= limitM;
if (!isLimit) { if (!isLimit) {
message.error("图片最大上传2M"); message.error('图片最大上传2M');
form.setFieldsValue({ icon: "" }); form.setFieldsValue({ icon: '' });
setFileList([]); setFileList([]);
return; return;
} }
if (val.file.status == "error") { if (val.file.status == 'error') {
message.error("服务器异常"); message.error('服务器异常');
setFileList([]); setFileList([]);
form.setFieldsValue({ icon: "" }); form.setFieldsValue({ icon: '' });
} else if (val.file.response && val.file.response.code != "200") { } else if (val.file.response && val.file.response.code != '200') {
message.error(val.file.response.message); message.error(val.file.response.message);
setFileList([]); setFileList([]);
form.setFieldsValue({ icon: "" }); form.setFieldsValue({ icon: '' });
} else if (val.file.status === "done") { } else if (val.file.status === 'done') {
setImageUrl(val.file.response.result[0]); setImageUrl(val.file.response.result[0]);
setFileList(val.fileList); setFileList(val.fileList);
form.setFieldsValue({ icon: val.file.response.result[0] }); form.setFieldsValue({ icon: val.file.response.result[0] });
...@@ -82,7 +78,7 @@ function Index(props: any) { ...@@ -82,7 +78,7 @@ function Index(props: any) {
}; };
// 图片删除 // 图片删除
const deleteImg = () => { const deleteImg = () => {
setImageUrl(""); setImageUrl('');
form.setFieldsValue({ icon: undefined }); form.setFieldsValue({ icon: undefined });
setFileList([]); setFileList([]);
}; };
...@@ -94,29 +90,29 @@ function Index(props: any) { ...@@ -94,29 +90,29 @@ function Index(props: any) {
onCancel={() => props.handleCancel()} onCancel={() => props.handleCancel()}
> >
<Form <Form
name="basic" name='basic'
labelCol={{ span: 4 }} labelCol={{ span: 4 }}
wrapperCol={{ span: 16 }} wrapperCol={{ span: 16 }}
initialValues={{ remember: true }} initialValues={{ remember: true }}
onFinish={onFinish} onFinish={onFinish}
onFinishFailed={onFinishFailed} onFinishFailed={onFinishFailed}
autoComplete="off" autoComplete='off'
form={form} form={form}
> >
<Form.Item <Form.Item
label="分类名称" label='分类名称'
name="groupName" name='groupName'
rules={[{ required: true, message: "请输入分类名称" }]} rules={[{ required: true, message: '请输入分类名称' }]}
> >
<Input placeholder="请输入分类名称" maxLength={15} allowClear /> <Input placeholder='请输入分类名称' maxLength={15} allowClear />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="分类描述" label='分类描述'
name="description" name='description'
rules={[{ required: false, message: "请输入分类描述" }]} rules={[{ required: false, message: '请输入分类描述' }]}
> >
<Input.TextArea <Input.TextArea
placeholder="请输入分类描述" placeholder='请输入分类描述'
showCount showCount
rows={3} rows={3}
maxLength={70} maxLength={70}
...@@ -124,51 +120,34 @@ function Index(props: any) { ...@@ -124,51 +120,34 @@ function Index(props: any) {
/> />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label="分类图标" label='分类图标'
name="icon" name='icon'
rules={[{ required: true, message: "请上传分类图标" }]} rules={[{ required: true, message: '请上传分类图标' }]}
> >
{imageUrl ? ( {imageUrl ? (
<div className="img-wrap"> <div className='img-wrap'>
<div className="img-content"> <div className='img-content'>
<img <img src={imageUrl} className='img' onClick={() => props.imgClick(imageUrl)} />
src={imageUrl} <img src={deletePng} alt='' className='delete-img' onClick={deleteImg} />
className="img"
onClick={() => props.imgClick(imageUrl)}
/>
<img
src={deletePng}
alt=""
className="delete-img"
onClick={deleteImg}
/>
</div> </div>
</div> </div>
) : ( ) : (
<Upload <Upload
// className="avatar-uploader" // className="avatar-uploader"
name="uploadFile" name='uploadFile'
fileList={fileList} fileList={fileList}
action={uploadImgURL} action={uploadImgURL}
maxCount={1} maxCount={1}
beforeUpload={beforeUpload} beforeUpload={beforeUpload}
onChange={handleChange} onChange={handleChange}
headers={headers} headers={headers}
accept="image/*" accept='image/*'
> >
{fileList.length >= 1 ? ( {fileList.length >= 1 ? '' : <Button icon={<UploadOutlined />}>上传</Button>}
""
) : (
<Button icon={<UploadOutlined />}>上传</Button>
)}
</Upload> </Upload>
)} )}
</Form.Item> </Form.Item>
<Form.Item <Form.Item label='备注' name='remark' rules={[{ required: false, message: '请输入备注' }]}>
label="备注"
name="remark"
rules={[{ required: false, message: "请输入备注" }]}
>
<Input.TextArea rows={5} maxLength={150} showCount /> <Input.TextArea rows={5} maxLength={150} showCount />
</Form.Item> </Form.Item>
</Form> </Form>
......
import { Modal, Form, Input, Button, Row, Col, message } from "antd"; import { Modal, Form, Input, Button, Row, Col, message } from 'antd';
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from 'react';
import { PlusOutlined, MinusOutlined } from "@ant-design/icons"; import { PlusOutlined, MinusOutlined } from '@ant-design/icons';
import { PropsType } from "~/common/interface/modal"; import { PropsType } from '~/common/interface/modal';
import { categoryDec } from "~/api/modules/goods"; import { categoryDec } from '~/api/modules/goods';
import { CategoryManageAPI } from "~/api"; import { CategoryManageAPI } from '~/api';
interface selfPropsType { interface selfPropsType {
directoryList: categoryDec[]; directoryList: categoryDec[];
...@@ -20,54 +20,45 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({ ...@@ -20,54 +20,45 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
}) => { }) => {
const [form] = Form.useForm<any>(); const [form] = Form.useForm<any>();
// 表单目录标题列表 // 表单目录标题列表
const [addOrEditDirectoryList, setAddOrEditDirectoryList] = useState< const [addOrEditDirectoryList, setAddOrEditDirectoryList] = useState<categoryDec[]>([]);
categoryDec[]
>([]);
// 是否点击删除按钮 // 是否点击删除按钮
const [isClickDle, setIsClickDle] = useState<boolean>(false); const [isClickDle, setIsClickDle] = useState<boolean>(false);
useEffect(() => { useEffect(() => {
if (directoryList.length != 0 && !isClickDle) { if (directoryList.length != 0 && !isClickDle) {
setAddOrEditDirectoryList(directoryList); setAddOrEditDirectoryList(directoryList);
const defaultFormValue = directoryList.reduce( const defaultFormValue = directoryList.reduce((pre: any, cur: categoryDec) => {
(pre: any, cur: categoryDec) => { Object.keys(cur).map((item: string) => {
Object.keys(cur).map((item: string) => { if (item === 'id') {
if (item === "id") { pre[cur[item]] = cur.sortName;
pre[cur[item]] = cur.sortName; }
} });
}); return pre;
return pre; }, {});
},
{}
);
form.setFieldsValue(defaultFormValue); form.setFieldsValue(defaultFormValue);
} }
}, [directoryList]); }, [directoryList]);
// 新增或修改目录 // 新增或修改目录
const addDirectoryTitle = () => { const addDirectoryTitle = () => {
const decList: categoryDec[] = [...addOrEditDirectoryList].sort( const decList: categoryDec[] = [...addOrEditDirectoryList].sort(
(a: categoryDec, b: categoryDec) => a.id - b.id (a: categoryDec, b: categoryDec) => a.id - b.id,
); );
setAddOrEditDirectoryList([ setAddOrEditDirectoryList([
...addOrEditDirectoryList, ...addOrEditDirectoryList,
{ {
id: decList[decList.length - 1].id + 1, id: decList[decList.length - 1].id + 1,
defaultType: 1, defaultType: 1,
sortName: "", sortName: '',
}, },
]); ]);
}; };
// 删除目录 // 删除目录
const deleteDirectory = async (id: number) => { const deleteDirectory = async (id: number) => {
const bol: boolean = directoryList.some( const bol: boolean = directoryList.some((item: categoryDec) => item.id === id);
(item: categoryDec) => item.id === id const index = addOrEditDirectoryList.findIndex((item: categoryDec) => item.id === id);
);
const index = addOrEditDirectoryList.findIndex(
(item: categoryDec) => item.id === id
);
if (bol) { if (bol) {
const res: any = await CategoryManageAPI.removeDirectory(id); const res: any = await CategoryManageAPI.removeDirectory(id);
if (res.code === "200") { if (res.code === '200') {
message.success("删除成功"); message.success('删除成功');
setIsClickDle(true); setIsClickDle(true);
refreshDec(id); refreshDec(id);
} else { } else {
...@@ -83,9 +74,7 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({ ...@@ -83,9 +74,7 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
const directorySureEvent = () => { const directorySureEvent = () => {
form.validateFields().then(async (value: any) => { form.validateFields().then(async (value: any) => {
const requestList = Object.keys(value).reduce((pre: any, cur: string) => { const requestList = Object.keys(value).reduce((pre: any, cur: string) => {
const bol: boolean = directoryList.some( const bol: boolean = directoryList.some((item: any) => item.id === Number(cur));
(item: any) => item.id === Number(cur)
);
if (bol) { if (bol) {
pre.push({ pre.push({
id: Number(cur), id: Number(cur),
...@@ -99,8 +88,8 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({ ...@@ -99,8 +88,8 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
return pre; return pre;
}, []); }, []);
const res: any = await CategoryManageAPI.addOrEditDirectory(requestList); const res: any = await CategoryManageAPI.addOrEditDirectory(requestList);
if (res.code === "200") { if (res.code === '200') {
message.success("操作成功"); message.success('操作成功');
form.resetFields(); form.resetFields();
setIsClickDle(false); setIsClickDle(false);
handleOk(); handleOk();
...@@ -116,39 +105,35 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({ ...@@ -116,39 +105,35 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
}; };
return ( return (
<Modal <Modal
title="目录管理" title='目录管理'
visible={isModalVisible} visible={isModalVisible}
onOk={directorySureEvent} onOk={directorySureEvent}
onCancel={directoryCancel} onCancel={directoryCancel}
> >
<Form form={form} labelCol={{ span: 6 }} wrapperCol={{ span: 16 }}> <Form form={form} labelCol={{ span: 6 }} wrapperCol={{ span: 16 }}>
<Form.Item <Form.Item label='添加目录' labelCol={{ span: 4 }} wrapperCol={{ span: 16 }}>
label="添加目录"
labelCol={{ span: 4 }}
wrapperCol={{ span: 16 }}
>
<Button icon={<PlusOutlined />} onClick={addDirectoryTitle} /> <Button icon={<PlusOutlined />} onClick={addDirectoryTitle} />
</Form.Item> </Form.Item>
{addOrEditDirectoryList.map((item: categoryDec) => ( {addOrEditDirectoryList.map((item: categoryDec) => (
<Row key={item.id} gutter={{ xs: 8, sm: 16, md: 24 }}> <Row key={item.id} gutter={{ xs: 8, sm: 16, md: 24 }}>
<Col span={16}> <Col span={16}>
<Form.Item <Form.Item
label="目录名称" label='目录名称'
name={item.id} name={item.id}
rules={[{ required: true, message: "请输入目录名称" }]} rules={[{ required: true, message: '请输入目录名称' }]}
> >
<Input placeholder="请输入目录名称" maxLength={30} /> <Input placeholder='请输入目录名称' maxLength={30} />
</Form.Item> </Form.Item>
</Col> </Col>
<Col> <Col>
{item.defaultType ? ( {item.defaultType ? (
<Button <Button
icon={<MinusOutlined />} icon={<MinusOutlined />}
type="primary" type='primary'
onClick={() => deleteDirectory(item.id)} onClick={() => deleteDirectory(item.id)}
/> />
) : ( ) : (
"" ''
)} )}
</Col> </Col>
</Row> </Row>
......
import { Modal, Form, Input, Button, Row, Col, message } from "antd"; import { Modal, Form, Input, Button, Row, Col, message } from 'antd';
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from 'react';
import { PlusOutlined, MinusOutlined } from "@ant-design/icons"; import { PlusOutlined, MinusOutlined } from '@ant-design/icons';
import { PropsType } from "~/common/interface/modal"; import { PropsType } from '~/common/interface/modal';
import { categoryDec } from "~/api/modules/goods"; import { categoryDec } from '~/api/modules/goods';
import { CategoryManageAPI } from "~/api"; import { CategoryManageAPI } from '~/api';
interface selfPropsType { interface selfPropsType {
directoryList: categoryDec[]; directoryList: categoryDec[];
...@@ -20,54 +20,45 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({ ...@@ -20,54 +20,45 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
}) => { }) => {
const [form] = Form.useForm<any>(); const [form] = Form.useForm<any>();
// 表单目录标题列表 // 表单目录标题列表
const [addOrEditDirectoryList, setAddOrEditDirectoryList] = useState< const [addOrEditDirectoryList, setAddOrEditDirectoryList] = useState<categoryDec[]>([]);
categoryDec[]
>([]);
// 是否点击删除按钮 // 是否点击删除按钮
const [isClickDle, setIsClickDle] = useState<boolean>(false); const [isClickDle, setIsClickDle] = useState<boolean>(false);
useEffect(() => { useEffect(() => {
if (directoryList.length != 0 && !isClickDle) { if (directoryList.length != 0 && !isClickDle) {
setAddOrEditDirectoryList(directoryList); setAddOrEditDirectoryList(directoryList);
const defaultFormValue = directoryList.reduce( const defaultFormValue = directoryList.reduce((pre: any, cur: categoryDec) => {
(pre: any, cur: categoryDec) => { Object.keys(cur).map((item: string) => {
Object.keys(cur).map((item: string) => { if (item === 'id') {
if (item === "id") { pre[cur[item]] = cur.sortName;
pre[cur[item]] = cur.sortName; }
} });
}); return pre;
return pre; }, {});
},
{}
);
form.setFieldsValue(defaultFormValue); form.setFieldsValue(defaultFormValue);
} }
}, [directoryList]); }, [directoryList]);
// 新增或修改目录 // 新增或修改目录
const addDirectoryTitle = () => { const addDirectoryTitle = () => {
const decList: categoryDec[] = [...addOrEditDirectoryList].sort( const decList: categoryDec[] = [...addOrEditDirectoryList].sort(
(a: categoryDec, b: categoryDec) => a.id - b.id (a: categoryDec, b: categoryDec) => a.id - b.id,
); );
setAddOrEditDirectoryList([ setAddOrEditDirectoryList([
...addOrEditDirectoryList, ...addOrEditDirectoryList,
{ {
id: decList[decList.length - 1].id + 1, id: decList[decList.length - 1].id + 1,
defaultType: 1, defaultType: 1,
sortName: "", sortName: '',
}, },
]); ]);
}; };
// 删除目录 // 删除目录
const deleteDirectory = async (id: number) => { const deleteDirectory = async (id: number) => {
const bol: boolean = directoryList.some( const bol: boolean = directoryList.some((item: categoryDec) => item.id === id);
(item: categoryDec) => item.id === id const index = addOrEditDirectoryList.findIndex((item: categoryDec) => item.id === id);
);
const index = addOrEditDirectoryList.findIndex(
(item: categoryDec) => item.id === id
);
if (bol) { if (bol) {
const res: any = await CategoryManageAPI.removeDirectory(id); const res: any = await CategoryManageAPI.removeDirectory(id);
if (res.code === "200") { if (res.code === '200') {
message.success("删除成功"); message.success('删除成功');
setIsClickDle(true); setIsClickDle(true);
refreshDec(id); refreshDec(id);
} else { } else {
...@@ -83,9 +74,7 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({ ...@@ -83,9 +74,7 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
const directorySureEvent = () => { const directorySureEvent = () => {
form.validateFields().then(async (value: any) => { form.validateFields().then(async (value: any) => {
const requestList = Object.keys(value).reduce((pre: any, cur: string) => { const requestList = Object.keys(value).reduce((pre: any, cur: string) => {
const bol: boolean = directoryList.some( const bol: boolean = directoryList.some((item: any) => item.id === Number(cur));
(item: any) => item.id === Number(cur)
);
if (bol) { if (bol) {
pre.push({ pre.push({
id: Number(cur), id: Number(cur),
...@@ -99,8 +88,8 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({ ...@@ -99,8 +88,8 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
return pre; return pre;
}, []); }, []);
const res: any = await CategoryManageAPI.addOrEditDirectory(requestList); const res: any = await CategoryManageAPI.addOrEditDirectory(requestList);
if (res.code === "200") { if (res.code === '200') {
message.success("操作成功"); message.success('操作成功');
form.resetFields(); form.resetFields();
setIsClickDle(false); setIsClickDle(false);
handleOk(); handleOk();
...@@ -116,39 +105,35 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({ ...@@ -116,39 +105,35 @@ const AddOrEditDec: React.FC<PropsType & selfPropsType> = ({
}; };
return ( return (
<Modal <Modal
title="目录管理" title='目录管理'
visible={isModalVisible} visible={isModalVisible}
onOk={directorySureEvent} onOk={directorySureEvent}
onCancel={directoryCancel} onCancel={directoryCancel}
> >
<Form form={form} labelCol={{ span: 6 }} wrapperCol={{ span: 16 }}> <Form form={form} labelCol={{ span: 6 }} wrapperCol={{ span: 16 }}>
<Form.Item <Form.Item label='添加目录' labelCol={{ span: 4 }} wrapperCol={{ span: 16 }}>
label="添加目录"
labelCol={{ span: 4 }}
wrapperCol={{ span: 16 }}
>
<Button icon={<PlusOutlined />} onClick={addDirectoryTitle} /> <Button icon={<PlusOutlined />} onClick={addDirectoryTitle} />
</Form.Item> </Form.Item>
{addOrEditDirectoryList.map((item: categoryDec) => ( {addOrEditDirectoryList.map((item: categoryDec) => (
<Row key={item.id} gutter={{ xs: 8, sm: 16, md: 24 }}> <Row key={item.id} gutter={{ xs: 8, sm: 16, md: 24 }}>
<Col span={16}> <Col span={16}>
<Form.Item <Form.Item
label="目录名称" label='目录名称'
name={item.id} name={item.id}
rules={[{ required: true, message: "请输入目录名称" }]} rules={[{ required: true, message: '请输入目录名称' }]}
> >
<Input placeholder="请输入目录名称" maxLength={30} /> <Input placeholder='请输入目录名称' maxLength={30} />
</Form.Item> </Form.Item>
</Col> </Col>
<Col> <Col>
{item.defaultType ? ( {item.defaultType ? (
<Button <Button
icon={<MinusOutlined />} icon={<MinusOutlined />}
type="primary" type='primary'
onClick={() => deleteDirectory(item.id)} onClick={() => deleteDirectory(item.id)}
/> />
) : ( ) : (
"" ''
)} )}
</Col> </Col>
</Row> </Row>
......
import { Modal } from "antd"; import { Modal } from 'antd';
function Index(props: any) { function Index(props: any) {
return ( return (
<Modal <Modal
title="分类删除" title='分类删除'
visible={props.isDeleteVisable} visible={props.isDeleteVisable}
onOk={() => props.deleteHandleOk()} onOk={() => props.deleteHandleOk()}
onCancel={() => props.deleteHandleCancel()} onCancel={() => props.deleteHandleCancel()}
......
.category-detail{ .category-detail {
min-height: 100vh; min-height: 100vh;
background-color: #fff; background-color: #fff;
padding: 40px; padding: 40px;
box-sizing: border-box; box-sizing: border-box;
&-head{ &-head {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
}
} &-title {
&-title{ font-size: 17px;
font-size: 17px; font-weight: bold;
font-weight: bold; }
&-form,
&-option,
&-table {
margin-top: 20px;
}
}
.add-goods {
&-select {
margin-top: 10px;
&-value {
display: flex;
} }
&-form,&-option,&-table{ &-list {
margin-top: 20px; height: 300px;
overflow-y: auto;
border: 1px solid #ccc;
margin-top: 10px;
} }
}
} }
.add-goods{ .goods-img {
&-select{ width: 40px;
margin-top: 10px; height: 40px;
&-value{
display: flex;
}
&-list{
height: 300px;
overflow-y: auto;
border: 1px solid #ccc;
margin-top: 10px;
}
}
} }
.goods-img{
width: 40px;
height: 40px;
}
\ No newline at end of file
...@@ -23,14 +23,14 @@ ...@@ -23,14 +23,14 @@
justify-content: flex-end; justify-content: flex-end;
flex-wrap: wrap; flex-wrap: wrap;
} }
.share-code{ .share-code {
text-align: center; text-align: center;
img { img {
width: 50%; width: 50%;
height: 50%; height: 50%;
margin-bottom: 10px; margin-bottom: 10px;
} }
.ant-btn span{ .ant-btn span {
text-decoration: underline; text-decoration: underline;
} }
} }
import { FC, useEffect, useState, useRef } from 'react'; import { FC, useEffect, useState, useRef } from 'react';
import { Button, Table, Form, message, Tooltip, Checkbox, Card, Modal } from 'antd'; import { Button, Table, Form, message, Tooltip, Checkbox, Card, Modal } from 'antd';
import { CardTabListType } from 'antd/lib/card/Card'; import { CardTabListType } from 'antd/lib/card/Card';
import {Router} from 'react-router-dom'; import { Router } from 'react-router-dom';
import FileSaver from 'file-saver'; import FileSaver from 'file-saver';
import qs from 'query-string'; import qs from 'query-string';
import { import {
...@@ -21,13 +21,12 @@ import DeleteCgyDailog from './components/deleteCgyDailog'; ...@@ -21,13 +21,12 @@ import DeleteCgyDailog from './components/deleteCgyDailog';
import EditableCell from './components/EditableCell'; import EditableCell from './components/EditableCell';
import AddOrEditDec from './components/addOrEditDec'; import AddOrEditDec from './components/addOrEditDec';
import { CategoryManageAPI } from '~/api'; import { CategoryManageAPI } from '~/api';
import { categoryEntity, categoryDec } from '~/api/interface/categoryManage' import { categoryEntity, categoryDec } from '~/api/interface/categoryManage';
import Viewer from '~/components/viewer'; import Viewer from '~/components/viewer';
import useOption from '~/common/hook/optionHook'; import useOption from '~/common/hook/optionHook';
import './index.scss'; import './index.scss';
import events from '~/events'; import events from '~/events';
const Category: FC = (props: any) => { const Category: FC = (props: any) => {
const baseRef: any = useRef(); const baseRef: any = useRef();
// 分类目录 // 分类目录
......
.from-table-wrap{ .from-table-wrap {
position: relative; position: relative;
//padding: 15px 0 0 0; //padding: 15px 0 0 0;
.header-view{ .header-view {
position: relative; position: relative;
width: 100%; width: 100%;
min-height: 60px; min-height: 60px;
...@@ -14,18 +14,18 @@ ...@@ -14,18 +14,18 @@
flex-wrap: wrap; flex-wrap: wrap;
padding: 15px 20px 5px 20px; padding: 15px 20px 5px 20px;
margin: 0 0 10px 0; margin: 0 0 10px 0;
.ant-select-selector{ .ant-select-selector {
min-width: 200px; min-width: 200px;
} }
.ant-row{ .ant-row {
margin-bottom:10px; margin-bottom: 10px;
} }
.add-button{ .add-button {
margin-right: 15px; margin-right: 15px;
} }
} }
} }
.detail-wrap{ .detail-wrap {
position: relative; position: relative;
width: 100%; width: 100%;
min-height: 60px; min-height: 60px;
...@@ -33,31 +33,31 @@ ...@@ -33,31 +33,31 @@
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
padding: 20px 25px; padding: 20px 25px;
.ant-descriptions:nth-child(1){ .ant-descriptions:nth-child(1) {
.ant-descriptions-view{ .ant-descriptions-view {
max-width: 600px; max-width: 600px;
} }
} }
} }
.custom-class{ .custom-class {
margin-top: 10vh; margin-top: 10vh;
.ant-message-notice-content{ .ant-message-notice-content {
padding: 15px 30px; padding: 15px 30px;
position: relative; position: relative;
pointer-events:none; pointer-events: none;
span[role="img"]{ span[role='img'] {
display: none; display: none;
} }
} }
.ant-message-notice-content:after{ .ant-message-notice-content:after {
position: absolute; position: absolute;
pointer-events:auto; pointer-events: auto;
left: 100%; left: 100%;
top: 0px; top: 0px;
content: "X"; content: 'X';
border: 1px solid rgba(128,129,133,0.25); border: 1px solid rgba(128, 129, 133, 0.25);
width: 15px; width: 15px;
height: 15px; height: 15px;
display: flex; display: flex;
...@@ -65,9 +65,8 @@ ...@@ -65,9 +65,8 @@
align-items: center; align-items: center;
border-radius: 50%; border-radius: 50%;
font-weight: 900; font-weight: 900;
transform: scale(1.3,1.1) translateX(-2px); transform: scale(1.3, 1.1) translateX(-2px);
color: rgba(128,129,133,0.6); color: rgba(128, 129, 133, 0.6);
cursor: pointer; cursor: pointer;
} }
} }
...@@ -75,7 +75,7 @@ const SplitCouponOperate = React.lazy( ...@@ -75,7 +75,7 @@ const SplitCouponOperate = React.lazy(
const CouponDetailed = React.lazy(() => import('src/pages/couponManage/couponDetailed')); //优惠券明细 const CouponDetailed = React.lazy(() => import('src/pages/couponManage/couponDetailed')); //优惠券明细
// 分类管理 // 分类管理
const CategoryList = React.lazy(() => import('src/pages/categoryManage/index')) const CategoryList = React.lazy(() => import('src/pages/categoryManage/index'));
export interface RouteObjectType { export interface RouteObjectType {
path: AgnosticIndexRouteObject['path']; path: AgnosticIndexRouteObject['path'];
element: any; element: any;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论