import { connect } from 'dva/index';
import React, { Component, Fragment } from 'react';
import { Form, Spin } from 'antd';
import {
sldIconBtn,
failTip,
sucTip,
sldPopConfirmDiy,
sldLlineRtextAddGoodsAddMargin,
dragSldTableColumn,
sldHandlePaginationData,
formItemLayoutModal,
isEmptyObject,
validatorNumbe,
sldComLanguage,
sldtbaleOpeBtnText,
} from '@/utils/utils';
import global from '@/global.less';
import StandardTable from '@/components/StandardTable';
import SldModal from '@/components/SldModal/SldModal';
import SldPreviewImg from '@/components/SldPreviewImg/SldPreviewImg';
let sthis = '';
@connect(({ product }) => ({
product,
}))
@Form.create()
export default class Cate_lists extends Component {
constructor(props) {
super(props);
sthis = this;
this.state = {
modal_width: 300,//图片预览宽度
show_preview_modal: false,//预览图片modal框是否展示
preview_img: '',//预览图片
preview_alt_con: '',//预览图片内容
expandedRowKeys: [],//展开的行
show_table_modal_add: false,//是否显示input后缀搜索modal上的新增按钮,默认不显示
modalSldAddVisible: false,//是否显示input后缀add的modal框,默认不显示
tablesldSAddTitle: `${sldComLanguage('添加')}`,//input后缀add的modal框的标题 添加
search_add_modal_width: 500,//input后缀add的modal框的宽度
cur_type: '',//show_list表示表格搜索,add表示添加数据
cur_operate_type: '',//当前操作对象
search_modal_width: 600,//默认搜索,modal宽度
tableTitle: '',
data: {},
formValues: {},
modalTableVisible: false,//选择商品类型弹框
submiting: false,//按钮loading
loading: false,//按钮loading
selectedRows: [],
selectedRowKeys: [],//selectedRows的key
modalVisible: false,
modalVisibleAdv: false,//多图选择器是否显示,默认不显示
cur_data: {},//多图选择器的数据
origion_data: {
width: 520,
height: 210,
admin_show_width: 260,
admin_show_height: 105,
data: [{
imgPath: '',
imgUrl: '',
info: {},
link_type: '',
link_value: '',
title: '',
}, {
imgPath: '',
imgUrl: '',
info: {},
link_type: '',
link_value: '',
title: '',
}, {
imgPath: '',
imgUrl: '',
info: {},
link_type: '',
link_value: '',
title: '',
}],
},//多图选择器的数据
modalTitle: '设置分类广告',//多图选择器标题
title: `${sldComLanguage('新增商品分类')}`,
type: 'add',//'add'新增 'edit'编辑
params: {},//搜索条件
curData: {},//编辑的数据
addData: [{
type: 'input',
label: `${sldComLanguage('分类名称')}`,
name: 'categoryName',
placeholder: `${sldComLanguage('请输入分类名称')}`,
initialValue: '',
maxLength:20,
rules: [{
required: true,
whitespace: true,
message: `${sldComLanguage('请输入分类名称')}`,
}],
}, {
type: 'inputnum',
label: `${sldComLanguage('排序')}`,
name: 'sort',
extra: `${sldComLanguage('请输入0~255的数字,值越小,显示越靠前')}`,
placeholder: `${sldComLanguage('请输入排序')}`,
initialValue: '',
rules: [{
required: true,
message: `${sldComLanguage('请输入排序')}`,
}, { validator: (rule, value, callback) => validatorNumbe(rule, value, callback) }],
}],//modal框的数据
sele_cat_info: {},//添加/编辑的时候选择的分类信息
columns: [
{
title: `${sldComLanguage('分类名称')}`,
align: 'left',
dataIndex: 'categoryName',
width: 300,
},
{
title: `${sldComLanguage('排序')}`,
dataIndex: 'sort',
align: 'center',
width: 100,
},
{
title: `${sldComLanguage('创建时间')}`,
dataIndex: 'createTime',
align: 'center',
width: 150,
},
{
title: `${sldComLanguage('更新时间')}`,//更新时间
dataIndex: 'updateTime',
align: 'center',
width: 150,
},
{
title: `${sldComLanguage('操作')}`,
align: 'center',
width: 100,
render: (text, record) => (
{sldtbaleOpeBtnText(`${sldComLanguage('编辑')}`, () => this.editCat(record))}
{/*删除后不可恢复,是否确定删除?*/}
{record.children == undefined &&
{sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.operateCat(record.categoryId, 'del'), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
sldtbaleOpeBtnText(`${sldComLanguage('删除')}`, () => null))}
}
{record.grade <= 2 &&
{sldtbaleOpeBtnText(`${sldComLanguage('添加下级分类')}`, () => this.addNextCat(record))}
}
),
},
],
};
}
cat_data = {
type: 'TreeSelectDIy',
label: `${sldComLanguage('上级分类')}`,
name: 'pid',
placeholder: `${sldComLanguage('请选择上级分类')}`,
initialValue: '',
help: `${sldComLanguage('默认为最顶级')}`,
disabled: false,
data: [],
sele_key: 'categoryId',
sele_name: 'categoryName',
allowClear: true,
onSelect: (value, node, extra) => this.sldHandleSelCat(value, node, extra),
};
componentDidMount() {
this.get_list({ pid: 0 });//grade为1表示获取一级数据
}
componentWillUnmount() {
}
//获取数据列表
get_list = (params, grade = '') => {
const { dispatch } = this.props;
let { data, expandedRowKeys } = this.state;
dispatch({
type: 'product/get_cate_list_by_id',
payload: params,
callback: (res) => {
//grade为1直接赋值
if (grade != '') {
for (let i in data.list) {
if (grade == 1) {
if (data.list[i].categoryId == params.pid) {
data.list[i].children = res.data;
break;
}
} else {
if (data.list[i].children != undefined) {
for (let j in data.list[i].children) {
if (data.list[i].children[j].categoryId == params.pid) {
data.list[i].children[j].children = res.data;
break;
}
}
}
}
}
} else {
data.list = res.data;
}
this.setState({
data: data,
expandedRowKeys: grade == '' ? [] : expandedRowKeys,
});
},
});
};
//显示modal弹框_弹框专属
showAllUnit = (val) => {
let { tableTitle, search_modal_width } = this.state;
if (val == 'search_goods_type') {
tableTitle = `${sldComLanguage('请选择商品类型')}`;
search_modal_width = 800;
}
this.setState({
modalTableVisible: true,
cur_operate_type: val,
cur_type: 'show_list',
tableTitle: tableTitle,
search_modal_width: search_modal_width,
});
};
//选择分类事件
sldHandleSelCat = (value, node, extra) => {
let { addData } = this.state;
let tmp_info = node.props.extra;
this.setState({
sele_cat_info: tmp_info,
addData,
});
};
handleSelectRows = (rows, rowkeys) => {
this.setState({
selectedRows: rows,
selectedRowKeys: rowkeys,
});
};
handleTablePagination = (pagination, filtersArg, sorter, type = 'main') => {
if (type == 'main') {
const { formValues } = this.state;
const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
this.setState({
params: params,
});
this.get_list(params);
}
};
//新增功能
addCat = () => {
let { addData } = this.state;
addData = addData.filter(item => item.name != 'category3Image' && item.name != 'pid');
for (let i = 0; i < addData.length; i++) {
if (addData[i].name == 'categoryName') {
addData.splice(i + 1, 0, this.cat_data);
}
addData[i].initialValue = '';
}
this.setState({
modalVisible: true,
type: 'add',
title: `${sldComLanguage('添加商品分类')}`,
addData,
sele_cat_info: {},
});//添加商品分类
};
//添加下级功能
addNextCat = (val) => {
let { addData } = this.state;
addData = addData.filter(item => item.name != 'pid' && item.name != 'category3Image');
for (let i = 0; i < addData.length; i++) {
if (addData[i].name == 'categoryName') {
addData.splice(i + 1, 0, this.cat_data);
addData[i].initialValue = '';
} else {
if (addData[i].name == 'pid') {
addData[i].initialValue = val.categoryName;
addData[i].disabled = true;
} else {
addData[i].initialValue = '';
}
}
}
this.setState({
modalVisible: true,
type: 'add',
title: `${sldComLanguage('添加下级分类')}`,
addData,
sele_cat_info: val,
});//添加下级分类
};
//编辑商品分类
editCat = (val) => {
let { addData } = this.state;
addData = addData.filter(item => item.name != 'pid' && item.name != 'category3Image');
for (let i = 0; i < addData.length; i++) {
addData[i].initialValue = val[addData[i].name];
}
this.setState({
type: 'edit',
title: `${sldComLanguage('编辑商品分类')}`,
addData: addData,
modalVisible: true,
curData: val,
sele_cat_info: { grade: val.grade },
});
};
//分类操作事件 type add:添加 edit:编辑 del:删除 adv:设置一级分类的广告
operateCat = (id, type) => {
let params = {};
const { dispatch } = this.props;
let dis_type = '';
if (type == 'add') {
dis_type = 'product/add_goods_cat';
params = id;
} else if (type == 'edit') {
dis_type = 'product/edit_goods_cat';
params = id;
} else if (type == 'del') {
dis_type = 'product/del_goods_cat';
params.categoryId = id;
} else if (type == 'adv') {
dis_type = 'product/edit_goods_cat_adv';
params = id;
}
this.setState({ submiting: true });
dispatch({
type: dis_type,
payload: params,
callback: (res) => {
if (res.state == 200) {
sucTip(res.msg);
this.get_list({ id: 0 });
this.setState({
modalVisible: false,
});
} else {
failTip(res.msg);
}
this.setState({ submiting: false });
},
});
};
sldHandleConfirm = (val) => {
const { curData, type, sele_cat_info, addData } = this.state;
let sld_params = {};
sld_params.categoryName = val.categoryName;
sld_params.sort = val.sort;
//三级分类图片
for (let i in addData) {
if (addData[i].name == 'category3Image') {
if (addData[i].img_succ_info.path != undefined) {
sld_params.categoryImage = addData[i].img_succ_info.path;
} else {
failTip(`${sldComLanguage('请上传图片')}`);
return false;
}
}
}
if (type == 'edit') {
sld_params.categoryId = curData.categoryId;
this.operateCat(sld_params, 'edit');
} else {
sld_params.grade = isEmptyObject(sele_cat_info) ? 1 : sele_cat_info.grade * 1 + 1;
sld_params.state = 1;
sld_params.pid = isEmptyObject(sele_cat_info) ? 0 : sele_cat_info.categoryId;//父分类id,一级分类==0
this.operateCat(sld_params, 'add');
}
};
sldHandleCancle = () => {
this.setState({ modalVisible: false, modalVisibleAdv: false });
};
//表格拖动
resizeTable = (index, size, type, data) => {
let datas = dragSldTableColumn(index, size, data);
this.setState({ [type]: datas });
};
onExpand = (expanded, record) => {
let { expandedRowKeys } = this.state;
if (expanded) {
expandedRowKeys.push(record.categoryId);
this.get_list({ pid: record.categoryId }, record.grade);
} else {
expandedRowKeys = expandedRowKeys.filter(item => item != record.categoryId);
}
this.setState({ expandedRowKeys });
};
sldHandleConfirmAdv = (val) => {
const { curData } = this.state;
this.operateCat({ cateId: curData.categoryId, categoryData: JSON.stringify(val) }, 'adv');
};
render() {
const { selectedRows, modalVisible, title, addData, columns, submiting, data, loading, expandedRowKeys, preview_img, show_preview_modal, modal_width, preview_alt_con } = this.state;
return (
{sldLlineRtextAddGoodsAddMargin('#69A2F2', `${sldComLanguage('分类管理')}`, 0, 0, 10)}
{ /*公共功能条-start*/}
{sldIconBtn(() => this.addCat(), `${sldComLanguage('新增分类')}`, 7, 0)}
{ /*公共功能条-end*/}
{ /*标准表格-start*/}
this.handleTablePagination(pagination, filtersArg, sorter, 'main')}
sldpagination={false}
resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
isColumnResize={true}
onExpand={this.onExpand}
/>
{ /*标准表格-end*/}
{ /*新增/编辑对话框-start*/}
this.sldHandleConfirm(val)}
sldHandleCancle={this.sldHandleCancle}
formItemLayoutModal={formItemLayoutModal}
content={addData}
/>
{ /*新增/编辑对话框-end*/}
{/*图片预览-start*/}
this.viewImg(false)}/>
{/*图片预览-end*/}
);
}
}